我正在尝试绘制一个堆积条,其中级别的顺序由列定义,颜色由另一个定义 .
我读了一个csv文件,数据框有以下几列:
-
方法(字符)
-
属性(字符)
-
订单(整数)
-
成功(双精度):成功是轴"y",方法是轴"x" .
Data
我的数据框的一个子集是:
Method <- c("MF", "MF", "MF", "MF", "MF", "MF", "RF", "RF", "RF", "RF", "RF", "RF")
Property <- c("P1","P2","P3","P6","P5","P7","P1","P6","P2","P5","P4","P7")
Order <- c(1,2,3,4,5,6,1,2,3,4,5,6)
Success <- c(87.612,4.583,0.286,6.122,0.788,0.573,87.612,6.409,4.332,0.895,0.0,0.573)
REF01 <- data.frame(Method, Property, Order, Success)
成功是Order列之后的增量列 . 例如,前3个属性(P1,P6和P2)的方法RF的成功是(87.612 6.409 4.332) .
Desired Result
我需要根据Order列为每个方法堆叠Success,但我想根据Property列进行着色 . 我在Excel中手动绘制了我想要看到的这个小例子 .
下图显示蓝色(P1)是两种方法的第一个属性 . 每种方法的第二个属性不同 . P2(棕色)是MF的第二个,RF是第三个,而P6(黄色)是RF的第二个,MF是第四个 . 因此,MFbar颜色如下:蓝色,棕色,灰色(RF,黄色和深蓝色中不存在的属性.RF条颜色如下:蓝色,黄色,棕色,蓝色和绿色)
有没有办法策划这个?我感谢您的帮助 .
我也忘了写我正在使用 ggplot2
,但我知道代码很简单 .
p <- ggplot(REF01, aes(x=Method, y=Success)) +
geom_bar(aes(fill = Property) , stat = "identity")
2 回答
您可以使用
group
美学来控制堆叠顺序为shown in this answer .请注意堆叠条的默认顺序是从上到下 . 要反转,我们可以使用
position = position_stack(reverse = TRUE)
.因为您需要为每组Method更改Property的因子级别排序,请考虑使用Method组迭代构建条形图
geom_bar()
. 您可以使用by
按列对数据框进行子集设置 . 下面将原始输出与调整后的输出进行比较,您可以在其中看到MF和RF交换颜色 .Original
Adjusted Output
此外,如果您希望使用与底部的第一个项目相同的Excel设置,请在
factor
的级别调用中使用反向矢量方法rev
,所有这些仍在by
内: