ggplot2系列教程 第2节——坐标轴
本期内容
坐标轴转换
坐标轴调整
本期依然以鸢尾花数据集为例,接着上期的图继续讲解,修改一下主题,初始图形如下:
library(ggplot2)
p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Petal.Length, size = Petal.Width,
shape = Species)) +
geom_point() +
scale_color_gradient(low = "#f0cf61", high = "#371722") +
scale_size_continuous(range = c(1, 4)) +
theme_classic() +
labs(x = "Sepal Length", y = "Sepal Width", title = "Iris Sepal") +
theme(plot.title = element_text(size = 15, face = "bold", hjust = 0.5),
axis.title = element_text(face = "bold"),
legend.title = element_text(face = "bold"),
axis.text = element_text(size = 13),
legend.text = element_text(size = 12))
p
坐标轴转换
ggplot2提供了一些函数来对坐标轴直接进行转换:
scale__log10()* 对数转换
scale__sqrt()* 平方根转换
scale__reverse()* 坐标轴倒序
如下对X轴进行平方根转换,对Y轴进行对数转换:
p + scale_x_sqrt() + scale_y_log10()
坐标轴倒序:
p + scale_x_reverse() + scale_y_reverse()
坐标轴调整
我们看到X轴刻度看起来有点稀疏,我们来调整一下:
SUMM <- summary(iris$Sepal.Length) # 查看下X轴数据分布
SUMM
将X轴设置为从4到8,间隔0.5的刻度:
p + scale_x_continuous(breaks = seq(4, 8, 0.5))
是否发现了4没有显示?这是因为ggplot2默认显示X,Y轴的最小值到最大值范围,如果想要自定义显示范围,只需使用limits参数:
p + scale_x_continuous(breaks = seq(4, 8, 0.5), limits = c(4, 8))
另外,我们也可以设置不规律的坐标轴刻度,如下我们试一下只显示Sepal.Length的最小值、中位值及最大值
X <- SUMM[c("Min.", "Median", "Max.")]
X
p + scale_x_continuous(breaks = as.numeric(X))
还可以自定义坐标轴标签:
Labels <- paste(names(X), as.numeric(X), sep = ": ")
Labels
p + scale_x_continuous(breaks = as.numeric(X), labels = Labels)
一般X轴位于下方,我们还可以将其调整至上方:
p + scale_x_continuous(breaks = as.numeric(X),
labels = Labels,
position = "top")
以上都是对X轴的调整,Y轴同理,如:
p + scale_x_continuous(breaks = as.numeric(X),
labels = Labels,
position = "top") +
scale_y_continuous(breaks = seq(2, 5, 0.5), # Y轴刻度设置为2到5,间隔为0.5
limits = c(2, 5), # 设置Y轴显示范围
position = "right") # 将Y轴放置于右侧
如何调整刻度线呢?这时候我们需要使用theme函数,修改axis.ticks.length参数,为了明显一点,我们将刻度线长度设置为1cm:
p + scale_x_continuous(breaks = as.numeric(X),
labels = Labels,
position = "top") +
scale_y_continuous(breaks = seq(2, 5, 0.5),
limits = c(2, 5),
position = "right") +
theme(axis.ticks.length = unit(1,"cm"))
那么反推,想要刻度线朝内,只需长度设置为负值即可,如下:
p + scale_x_reverse(breaks = as.numeric(X), labels = Labels,
position = "top") +
scale_y_continuous(breaks = seq(2, 5, 0.5),
limits = c(2, 5),
position = "right") +
theme(axis.ticks.length = unit(-0.2,"cm"))
总结一下以上图形完整代码:
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width,
color = Petal.Length, size = Petal.Width,
shape = Species)) +
geom_point() +
scale_color_gradient(low = "#f0cf61", high = "#371722") +
scale_size_continuous(range = c(1, 4)) +
theme_classic() +
labs(x = "Sepal Length", y = "Sepal Width", title = "Iris Sepal") +
theme(plot.title = element_text(size = 15, face = "bold", hjust = 0.5),
axis.title = element_text(face = "bold"),
legend.title = element_text(face = "bold"),
axis.text = element_text(size = 13),
legend.text = element_text(size = 12),
axis.ticks.length = unit(-0.2,"cm")) +
scale_x_continuous(breaks = as.numeric(X),
labels = Labels,
position = "top") +
scale_y_continuous(breaks = seq(2, 5, 0.5),
limits = c(2, 5),
position = "right")
最后
感谢支持,希望对您有帮助!
有不足的地方欢迎指正!
关注我们,及时获取更多干货!