假设我有一个带有 x 轴标签的条形图,我想替换它。如何将新标签值映射到旧标签值,以确保标签正确并且标签和条形图不匹配?
在ggplot2
中,可以使用scale_x_discrete()
中的labels
参数来编辑x轴标签。通过将带有字符串的向量传递给标签,我们可以控制标签的内容及其顺序。然而,在创建标签向量时,人们可能会错误地以错误的顺序写入标签,从而以一种可能被忽视的方式使标签和数据不匹配,但实际上会创建错误的数字。
有没有办法通过指定哪个新标签与每个旧标签匹配来避免这种危险?
示例
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", trt1 = "sun", trt2 = "stars"),
values = c(ctrl = "blue", trt1 = "red", trt2 = "green"))
我的首选方法是在 ggplot 调用之外预先定义标签和值的向量,而不是在 scale_xxx_xxx
内重新编码,以减少代码重复并更容易更改标签或值。
labels <- c(ctrl = "moon", trt1 = "sun", trt2 = "stars")
colors <- c(ctrl = "blue", trt1 = "red", trt2 = "green")
p +
scale_x_discrete(labels = labels) +
scale_fill_manual(labels = labels, values = colors)
关于r - 以万无一失的方式覆盖离散 x 轴标签,以避免标签和数据不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63366733/