问题描述
说我有一个带有要替换的x轴标签的条形图。如何将新的标签值映射到旧的标签值,以确保正确的标签且标签和条形不匹配?
在ggplot2
中,可以使用labels
中的scale_x_discrete()
参数来编辑x轴标签。通过将带有字符串的向量传递到labels
,我们可以控制标签的内容及其顺序。但是,在创建标签矢量时,可能会错误地以错误的顺序写入标签,从而使标签和数据不匹配,而这种方式可能不会引起注意,但实际上会产生错误的图形。
有没有一种方法可以通过指定哪个新标签与每个旧标签匹配来避免这种危险?
示例
library(ggplot2)
p <- ggplot(PlantGrowth,aes(x = group,y = weight,fill = group)) +
geom_bar(stat = "identity")
> p
现在,我们要替换x轴上的标签集
我的另一组标签是ctrl-> moon
trt1->太阳
trt2->星级
p + scale_x_discrete(labels = c("sun","moon","stars")
赞!我错误地将标签向量写错了顺序。应该是c(月亮,太阳,星星)而不是c(太阳,月亮,星星)。这样的错误很容易被忽视,并导致情节错误。
有没有一种方法可以将新标签更直接地映射到旧标签?类似于dplyr::rename
如何为每个变量严格指定new_val = old_val?然后,这种不匹配的可能性就较小。
解决方法
当然可以。您可以使用命名向量来分配新标签和值,如下所示:
library(ggplot2)
p <- ggplot(PlantGrowth,aes(x = group,y = weight,fill = group)) +
geom_bar(stat = "identity")
p +
scale_x_discrete(labels = c(ctrl = "moon",trt1 = "sun",trt2 = "stars")) +
scale_fill_manual(labels = c(ctrl = "moon",trt2 = "stars"),values = c(ctrl = "blue",trt1 = "red",trt2 = "green"))
与其在scale_xxx_xxx
内部进行编码,不如在ggplot调用之外预先定义标签和值的向量,以减少代码重复并更容易更改标签或值。 / p>
labels <- c(ctrl = "moon",trt2 = "stars")
colors <- c(ctrl = "blue",trt2 = "green")
p +
scale_x_discrete(labels = labels) +
scale_fill_manual(labels = labels,values = colors)