R-stacked-grouped barplot with different fill in R

早过忘川 提交于 2020-01-02 08:04:04

问题


I have the following code:

library(ggplot2)

K  <- data.frame(KK=c("30", "30", "30", "30","10", "10", "10", "10"),k=c("10", "8", "5", "2","10", "8", "5", "2"), 
               Precision=c(85.2,87.5,100,100,82.5,83.3,85.2,94.4),     
               Recall=c(73.3,80,100,100,51.4,54.8,61.1,87.9) , 
               Fscore=c(70.8,79.4,100,100,49.1,54.2,62.7,90.3),
               Accuracy=c(82.2,86.7,100,100,63.3,66.7,73.3,93.3)) 
  df2 <- reshape2::melt(K, 1:2)

   ggplot(df2, 
   aes(k, value, fill = variable)) + 
  geom_bar(stat = 'identity', position = 'dodge') +
 theme(legend.position = 'top')

This code gives me the following plot.

However, I want to get a barplot like this

Each value of k (10,8,5,2) should be a group of bars and each colour of bar a metric. In addition, the bar from the KK value 30 should be solid and with KK of 10 stripped. I don't know if it is clear. In my output appears the values for K30, but missing with K10 merged with K30 stripped.


回答1:


You could simply add the two different layers to your plot one for each KK value. Unfortunately, ggplot does not handle patterns well (or at all really), see this post: How to add texture to fill colors in ggplot2?

The code to add different layers for each KK value is:

ggplot() + 
  geom_bar(data=df2[which(df2$KK==10),], aes(k, value, fill = variable),stat = 'identity',position="dodge") +
  geom_bar(data=df2[which(df2$KK==30),], aes(k, value, fill = variable),stat = 'identity',position="dodge",alpha=0.5) +
  theme(legend.position = 'top')



来源:https://stackoverflow.com/questions/38070878/r-stacked-grouped-barplot-with-different-fill-in-r

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!