r - 以万无一失的方式覆盖离散的 x 轴标签,以避免标签和数据不匹配
问题描述
假设我有一个要替换的带有 x 轴标签的条形图。如何将新标签值映射到旧标签值,以确保标签正确且标签和条不匹配?
在ggplot2
中,可以使用 in 中的labels
参数来编辑 x 轴标签scale_x_discrete()
。通过将带有字符串的向量传递给labels
,我们可以控制标签的内容及其顺序。但是,在创建标签向量时,可能会错误地以错误的顺序编写标签,从而以一种可能被忽视的方式不匹配标签和数据,但实际上会创建错误的图形。
有没有办法通过指定哪个新标签与每个旧标签匹配来避免这种危险?
例子
library(ggplot2)
p <- ggplot(PlantGrowth, aes(x = group, y = weight, fill = group)) +
geom_bar(stat = "identity")
> p
现在假设我想替换 x 轴上的标签集
我的替代标签集是ctrl -> moon
trt1 -> sun
trt2 -> stars
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"))
我首选的方法不是在内部重新编码,而是scale_xxx_xxx
在 ggplot 调用之外预先定义标签和值的向量,以减少代码重复并更容易更改标签或值。
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)
推荐阅读
- visual-studio-code - 将图标添加到树视图的正确方法是什么?
- java - 修改映射键 java - 性能
- android - React Native - 在 android 上构建成功但应用程序崩溃
- c# - 在标签内绘制尽可能大的内圆
- android - 如何在底页中制作多个回收视图(所有可滚动)并在底页的可触摸视图中添加按钮
- c# - Asp将标头添加到响应不起作用
- ios - 如何使收藏视图倒置?
- android - ViewRenderable 无法与 VideoView [SceneForm ARCore] 一起正常工作
- spring - Spring Boot 中的模拟服务
- vmware - Copy-VMGuestFile - 尝试将文件从主机复制到 VM 时出错