【发布时间】:2018-12-21 00:50:20
【问题描述】:
我有以下数据,我想从中创建一个聚集柱形图。请注意,这是虚拟数据。
dataraw <- read.table(
text = "CRITERIA,ACTUAL,FUTURE,EFFORT
Crit1,2,4,2
Crit2,3,4,3
Crit3,1,4,5",
header = T, sep = ","
)
我希望使用 ACTUAL 和 FUTURE 作为我的两列,并使用 CRITERIA 作为我的 x 轴。
就上下文而言,ACTUAL 是标准当前所在的度量。而未来是标准应该在哪里的理想状态。 EFFORT 衡量从 ACTUAL 到 FUTURE 需要付出多少努力。
复杂之处在于我希望仅将 EFFORT 用作渐变填充(理想情况下可自定义 - 例如蓝色低,红色高)仅用于 ACTUAL,并且我需要 FUTURE 作为我选择的纯色(此时为黑色,但是可能会调整)。
目前我能够绘制带有填充的图表,但我不确定如何包含 FUTURE 列。
library(ggplot2)
ggplot(dataraw, aes(x = CRITERIA, y = ACTUAL, fill = EFFORT)) +
scale_fill_gradient(low = "blue", high = "red") +
geom_bar(stat = "identity")
这会导致以下输出:
或者,我可以这样融合数据并绘制输出,但是 EFFORT 成为与 ACTUAL & FUTURE 相同的度量。
library(ggplot2)
library(reshape2)
dataraw.m <- melt(dataraw, id.vars="CRITERIA")
ggplot(data = dataraw.m, aes(CRITERIA, value)) +
geom_bar(aes(fill = variable), width = 0.4,
position = position_dodge(width = 0.5), stat = "identity")
这会导致这个输出:
我可以从数据框中删除 EFFORT,但这会删除我在 ACTUAL 中创建渐变的能力。
我对 R 还是很陌生,所以我不确定我所问的是否可能。
提前感谢您的帮助。
【问题讨论】:
-
这看起来像您的想法吗?
ggplot(dataraw, aes(x = CRITERIA, y = ACTUAL, fill = EFFORT)) + scale_fill_gradient(low = "blue", high = "red") + geom_col(aes(y = FUTURE), fill = "black") + geom_col() -
@Nate 比我的回答好得多。
-
谢谢,但不确定 OP 想要什么,他们可能希望像你建造的那样并排,你永远不知道
-
@Nate 非常非常接近谢谢。我需要的唯一调整是让列并排,而不是 ACTUAL 坐在 FUTURE 之上。有什么论据可以让它们并排吗?
-
抱歉 Nate 和 Tjebo 澄清一下,Crit1 理想情况下将 ACTUAL 和 FUTURE 结合在一起。然后跟随这个 Crit2,然后是 Crit3。 Trejbo 您的解决方案也非常接近,但是 ACTUAL 和 FUTURE 是分开的,而不是 Crit1 并排有 ACTUAL 和 FUTURE - 如果这有意义吗?