我正在制作一个水平条形图,其中每个观察都有一个与之关联的数字计数变量。我想显示按(递减)计数排序的每个变量的条形,这没有问题。但是,我还想根据第三个二分变量突出显示变量名称。我在这里的另一篇文章中找到了如何做后者,但我无法将两者结合起来。这是我的意思的一个例子:
library(ggplot2)
testdata<-data.frame("var"=c('V1','V2','V3','V4'),"cat"=c('Y','N','Y','N'),
"count"=c(1,5,2,10))
ggplot(testdata, aes(var,count))+
geom_bar(stat='identity',colour='blue',fill='blue',width=0.3)+
coord_flip(ylim=c(0,10))+
theme(axis.text.y=
element_text(colour=ifelse(testdata$cat=="N","darkgreen","darkred"),
size=15))
这是带有突出显示的水平条形图,工作正常 - V1 / V3为红色,V2 / V4为绿色。
但是,当我尝试排序时,它不会保留组:
ggplot(testdata, aes(reorder(var,count),count))+
geom_bar(stat='identity',colour='blue',fill='blue',width=0.3)+
coord_flip(ylim=c(0,10))+theme_classic()+
theme(axis.ticks.y=element_blank())+
theme(axis.text.y=
element_text(colour=ifelse(testdata$cat=="N","darkgreen","darkred"),
size=15))
在第二张图中,V2和V3颜色错误。
我还尝试先按计数对数据进行排序,然后使用第一个ggplot语句,但它仍然按变量名而不是计数来绘制数据(即使它确实有效,我也必须解决绑定的计数值) 。有任何想法吗?我真正需要的是“ifelse”颜色中的数据帧与aes语句中的数据帧匹配。我尝试使用在颜色语句中按降序计数排序的数据框,但这也不起作用。
由于
编辑:更多代码
testdata$var = with(testdata, reorder(var, count))
ggplot(testdata, aes(var,count))+
geom_bar(stat='identity',colour='blue',fill='blue',width=0.3)+
coord_flip(ylim=c(0,10))+theme_classic()+
theme(axis.ticks.y=element_blank())+
theme(axis.text.y=
element_text(colour=ifelse(testdata$cat=="N","darkgreen","darkred"),
size=15))
答案 0 :(得分:2)
我的评论部分不正确。对于轴的顺序,级别的顺序是唯一重要的,但是当我们ifelse(testdata$cat == "N", "darkgreen", "darkred")
时,它按照数据的顺序排列!所以我们需要级别的顺序和数据的顺序是相同的:
testdata$var = with(testdata, reorder(var, count))
testdata = testdata[order(testdata$var), ]
ggplot(testdata, aes(var, count)) +
geom_bar(
stat = 'identity',
colour = 'blue',
fill = 'blue',
width = 0.3
) +
coord_flip(ylim = c(0, 10)) + theme_classic() +
theme(axis.ticks.y = element_blank()) +
theme(axis.text.y =
element_text(
colour = ifelse(testdata$cat == "N", "darkgreen", "darkred"),
size = 15
))