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.
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