我正在制作一个水平条形图,其中每个观察值都有一个与之相关的数值计数变量。我想显示每个变量按(降序)计数排序的条形图,这是没有问题的。但是,我还想突出显示基于第三个二分法变量的变量名。我在这里的另一篇文章中找到了如何做后者,但我一直无法将两者结合起来。下面是我的意思的一个例子:
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的颜色是错误的。
我还尝试先按count对数据进行排序,然后使用第一个ggplot语句,但是它仍然按变量名而不是count来绘制数据(即使它确实有效,我也必须解析绑定的计数值)。有什么想法吗?我真正需要的是让"ifelse“颜色的数据帧与aes语句中的数据帧相匹配。我尝试使用colour语句中按降序计数排序的数据帧,但也不起作用。
谢谢
编辑:更多代码
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))
发布于 2018-06-09 05:33:20
我的评论部分是不正确的。级别的顺序对于轴的顺序是唯一重要的,,,当我们做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
))
https://stackoverflow.com/questions/50768148
复制相似问题