首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ggplot -使用重新排序的数据保留轴标签颜色

ggplot -使用重新排序的数据保留轴标签颜色
EN

Stack Overflow用户
提问于 2018-06-09 04:43:03
回答 1查看 119关注 0票数 0

我正在制作一个水平条形图,其中每个观察值都有一个与之相关的数值计数变量。我想显示每个变量按(降序)计数排序的条形图,这是没有问题的。但是,我还想突出显示基于第三个二分法变量的变量名。我在这里的另一篇文章中找到了如何做后者,但我一直无法将两者结合起来。下面是我的意思的一个例子:

代码语言:javascript
复制
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为绿色。

然而,当我尝试排序时,它并没有保留组:

代码语言:javascript
复制
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语句中按降序计数排序的数据帧,但也不起作用。

谢谢

编辑:更多代码

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 05:33:20

我的评论部分是不正确的。级别的顺序对于轴的顺序是唯一重要的,,当我们做ifelse(testdata$cat == "N", "darkgreen", "darkred")的时候,当然它是按照数据的顺序进行的!因此我们需要级别的顺序和数据的顺序是相同的:

代码语言:javascript
复制
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
                    ))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档