R ggplot2-2变量聚集柱状图-变量1的渐变填充和变量2的实体填充

R ggplot2-2变量聚集柱状图-变量1的渐变填充和变量2的实体填充,r,ggplot2,R,Ggplot2,我有下面的数据,我想从中创建一个聚集柱状图。注意,这是虚拟数据 dataraw <- read.table( text = "CRITERIA,ACTUAL,FUTURE,EFFORT Crit1,2,4,2 Crit2,3,4,3 Crit3,1,4,5", header = T, sep = "," ) 这将导致以下输出: 或者,我也可以将数据按原样融化并绘制输出图,然而,努力变成了一种与实际和未来完全相同的度量 library(ggplot2) library

我有下面的数据,我想从中创建一个聚集柱状图。注意,这是虚拟数据

dataraw <- read.table(
  text = "CRITERIA,ACTUAL,FUTURE,EFFORT
  Crit1,2,4,2
  Crit2,3,4,3
  Crit3,1,4,5",
  header = T, sep = ","
)
这将导致以下输出:

或者,我也可以将数据按原样融化并绘制输出图,然而,努力变成了一种与实际和未来完全相同的度量

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")
库(ggplot2)
图书馆(E2)

dataraw.m快速脏方法:多次绘图。使数据变长(我使用的是
tidyr::gather
),这样就可以使用相同y轴上的值。然后定义
future
aes
之外的颜色

库(tidyverse)

dataraw完全警告这开始有点不正常,但我们开始:

ggplot(dataraw, aes(x = CRITERIA, y = ACTUAL, fill = EFFORT)) + 
  scale_fill_gradient(low = "blue", high = "red") + 
  geom_col(aes(y = FUTURE), fill = "black", width = .4, position = position_nudge(.2)) +
  geom_col(width = .4, position = position_nudge(-.2))

唯一的技巧是
width
如果小于.5最好,并且
position\u-nudge
是1/2,无论
width
值是什么


仅供参考
geom_col()
相当于
geom_bar(stat='identity')

这看起来像你所想的吗
ggplot(dataraw,aes(x=标准,y=实际,fill=努力))+scale\u fill\u gradient(low=“blue”,high=“red”)+geom\u col(aes(y=FUTURE),fill=“black”)+geom\u col()
@Nate比我的答案好得多。谢谢,但不确定OP想要什么,他们可能想要像你建造的那样并排建造,你永远不会know@Nate非常非常接近,谢谢。我需要做的唯一调整是让这些柱子并排排列,而不是实际坐在未来的顶部。有什么理由让他们并肩作战吗?抱歉,内特和特杰博澄清了一下,克里特一号在理想情况下会拥有现实和未来。然后跟着这个Crit2,然后是Crit3。Trejbo您的解决方案也非常接近,但是实际和未来是分开的,而不是Crit1同时拥有实际和未来-如果这有意义的话?非常感谢Tjebo。非常接近,但不是很接近。通过回顾您的解决方案,我对R有了更多的了解,因此我非常感激。非常感谢和问候。@JosephJW没问题。当你想在传奇中添加“未来”时,它可能会变得稍微复杂一些,但这是可能的。关于如何在传说中运用几种美学,有一些线索。如果你想那样做,遇到问题,请告诉我们。
ggplot(dataraw, aes(x = CRITERIA, y = ACTUAL, fill = EFFORT)) + 
  scale_fill_gradient(low = "blue", high = "red") + 
  geom_col(aes(y = FUTURE), fill = "black", width = .4, position = position_nudge(.2)) +
  geom_col(width = .4, position = position_nudge(-.2))