修改 R 中的 ggplot X 轴刻度标签
本文将介绍如何在 R 中修改 ggplot
x 轴刻度标签。
使用 scale_x_discrete
修改 R 中的 ggplot
X 轴刻度标签
scale_x_discrete
与 scale_y_discrete
一起用于对绘图比例标签和限制进行高级操作。在这种情况下,我们使用 scale_x_discrete
来修改 ggplot
对象的 x
轴刻度标签。请注意,第一个 ggplot
对象是基于 diamonds
数据集的条形图。该图使用 cut
列并在 y
轴上绘制每种类型的计数。x
轴具有默认标题 - cut
,可以通过将字符串作为 scale_x_discrete
的第一个参数进行修改。或者,我们可以通过构造一个向量并将其分配给 labels
参数来为每个标签传递特定的字符串值。两个图都是使用 grid.arrange 函数并排绘制的,grid.arrange 函数是 gridExtra 包的一部分。
library(ggplot2)
library(gridExtra)
p1 <- ggplot(diamonds, aes(cut)) + geom_bar(fill = "orange") + scale_x_discrete("Cut")
p2 <- p1 + scale_x_discrete("Cut Type", labels = c("Fair" = "F","Good" = "G", "Very Good" = "VG","Premium" = "P","Ideal" = "I"))
grid.arrange(p1, p2, ncol = 2)
修改 x
轴上标签的另一种有用方法是将函数对象作为 labels
参数传递。下一个代码片段使用 abbreviate
函数自动缩短标签,然后将图形绘制为两列。
library(ggplot2)
library(gridExtra)
p1 <- ggplot(diamonds, aes(cut)) + geom_bar(fill = "orange") + scale_x_discrete("Cut")
p2 <- p1 + scale_x_discrete("Cut Type", labels = c("Fair" = "F","Good" = "G", "Very Good" = "VG","Premium" = "P","Ideal" = "I"))
p3 <- p1 + scale_x_discrete("Cut Type", labels = abbreviate)
grid.arrange(p2, p3, ncol = 2)
scale_x_discrete
在不同的图上的工作方式类似,标签操作技术是适用的,如下例所示。也就是说,从 mpg
数据集中绘制了几个散点图。
library(ggplot2)
library(gridExtra)
p1 <- ggplot(mpg, aes(manufacturer, cty)) + geom_point()
p2 <- ggplot(mpg, aes(manufacturer, cty)) + geom_point() +
scale_x_discrete(labels = abbreviate)
p3 <- ggplot(mpg, aes(manufacturer, cty)) + geom_point(colour = "blue") +
scale_x_discrete(labels = abbreviate)
grid.arrange(p1, p2, p3, nrow = 3)
使用 scale_x_discrete
和自定义函数来修改 R 中的 ggplot
X 轴刻度标签
scale_x_discrete
参数 labels
可以采用自定义函数对象来相应地修改每个刻度标签。在这种情况下,我们实现了 capitalize_all
函数,它首先缩写每个标签,然后将字符串的起始字符转换为大写字母。请注意,paste
、toupper
、substring
和 abbreviate
内置函数用于实现 capitalize_all
功能,但对这些方法的全面回顾超出了本文的范围。可以在 R 控制台中使用 ?function_name
表示法显示手册页。
library(ggplot2)
library(gridExtra)
capitalize_all <- Vectorize(function(x) {
s <- abbreviate(x)
paste(toupper(substring(s, 1,1)), substring(s, 2), sep="", collapse=" ")
})
ggplot(mpg, aes(manufacturer, cty)) + geom_point(aes(colour = trans)) +
scale_x_discrete(labels = capitalize_all)