gpt4 book ai didi

r - 根据长数据上 id 变量的值(与行号无关)为 ggplot 中的特定标签着色

转载 作者:行者123 更新时间:2023-12-04 10:12:04 25 4
gpt4 key购买 nike

假设我有一个长数据集,我想为 x 轴上的特定标签着色。在下面的示例中,我想为 Valiant 的标签着色。

# Packs
require(ggplot2)
require(reshape2)

# Data and trans
data(mtcars)
mtcars$model <- rownames(mtcars)
mtcars <- melt(mtcars, id.vars = "model")

# Some chart
ggplot(data = subset(x = mtcars, subset = mtcars$variable == "cyl"),
aes(x = model, y = value)) +
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 90,
colour =
ifelse(mtcars$model == "Valiant",
"red","black")))

代码生成了下面错误的图表,因为错误的标签被涂上了颜色。

Wrong label

原因很简单,因为 ifelse 创建的内容与轴上的顺序不匹配。我可以通过强制 ggplot 为特定行着色来修复代码。下面的代码为图表的特定 data.frame 中的正确标签着色,Valiant 值为 31

# Fixed chart
ggplot(data = subset(x = mtcars, subset = mtcars$variable == "cyl"),
aes(x = model, y = value)) +
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 90,
colour =
ifelse(as.numeric(rownames(mtcars)) == 31,
"red","black")))

Fixed label

显然这个解决方案是极其不切实际的。在实际数据上,我有大量的多列观察(地理、性别、指标、值(value)等)。该数据随后通过子集进行过滤,并将不同的选项传递给 aes 设置。试图找出应该着色的行是一场噩梦。我正在寻找一种解决方案,使我能够:

  • 相对轻松地指示要着色的特定观察结果,而无需尝试使用行号
  • 理想情况下,我想将 id 与一些字符串一起用作指示我要突出显示的文本的方式
  • 我想将解决方案封装在 ggplot2 代码中,我不想创建单独的数据子集来导出着色向量,因为我会多次这样做。这会不必要地增加对象。
  • 在实践中,我想要这样的解决方案:不管图表上的内容如何,​​当您在 x 轴上找到此字符串时,将其设为红色

最佳答案

第一个不匹配的原因是 mtcars$model比您正在绘制的子集长得多,因此颜色矢量 ifelse(mtcars$model == "Valiant","red","black")长度为 352,但您正在绘制的子集的长度仅为 32。第二个示例存在同样的问题,但在这种情况下,colour 的额外元素| (无论如何都是“黑色”)被丢弃,所以你不会注意到。

不幸的是它看起来像theme(...)不会使用可用的数据列名称进行评估(即不能直接在 colour=ifelse(model == "Valiant", "red", "black") 调用中执行 theme(...))

另一种方法是制作model levels(..) == "Valiant" 上的因子和过滤器.如果你有一个长数据框,你的 id 变量很可能是一个因素(或者它是一个因素是有意义的)。

mtcars$model = factor(mtcars$model)
ggplot(data=subset(mtcars, variable == 'cyl'), aes(x=model, y=value)) +
geom_bar(stat="identity") +
theme(axis.text.x=element_text(angle=90,
colour=ifelse(levels(mtcars$model) == 'Valiant', 'red', 'black')))

(您的问题源于将 subset() 作为您的数据输入 ggplot,然后无法在 theme 调用中返回到该特定子集。我不知道是否有一种棘手的方法这个)。

关于r - 根据长数据上 id 变量的值(与行号无关)为 ggplot 中的特定标签着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com