微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ggplot2:以非字母顺序保留x轴标签

如何解决ggplot2:以非字母顺序保留x轴标签

我正在使用ggplot2绘制各州每年发生的事件。我希望状态标签与数据表“ AZ CT NH NM DE ...”中显示的顺序相同,但是ggplot会自动按字母顺序“ AZ CT DE NH ...”重新组织状态标签。我创建了组,以便可以以“ num”个值(例如NM和TN)显示范围。请忽略组编号-我删除了一些数据点以使表更小。

enter image description here

ggplot(guidelines,aes(x = state,y = num,group = grp)) +
geom_point() + geom_line(linetype = "dotted") +
labs(x = "State",y = "Number") + 
labs(title = "A") +
scale_y_continuous(breaks = seq(0,11,1),limits=c(0,11))

enter image description here

我尝试了以前文章中的建议来使用像这样的因子和水平:

guidelines$state <- factor(guidelines$state,levels = unique(guidelines$state)

但是它不起作用,因为我正在使用组并重复状态名称。关于如何解决这个问题的任何想法?

解决方法

尝试一下。您之所以接近,是因为您必须使用unique()。在ordered=T中添加factor()将保持所需的顺序。这里是代码(请下次使用dput()共享数据,因为有时使用屏幕截图中的数据确实很大可能会很复杂):

library(ggplot2)
#Data
guidelines <- data.frame(state=c('AZ','CT','NH','NM','DE','NJ','TN','TN'),num=c(10,10,5,2,5),grp=c(3,4,17,19,18,25,25),stringsAsFactors = F)
#Format factor
guidelines$state <- factor(guidelines$state,levels = unique(guidelines$state),ordered = T)
#Plot
ggplot(guidelines,aes(x = state,y = num,group = grp)) +
  geom_point() + geom_line(linetype = "dotted") +
  labs(x = "State",y = "Number") + 
  labs(title = "A") +
  scale_y_continuous(breaks = seq(0,11,1),limits=c(0,11))

输出:

enter image description here

或者如 @TTS 在评论中所述,您可以将scale_x_discrete()limits选项一起使用:

#Data
guidelines <- data.frame(state=c('AZ',stringsAsFactors = F)
#Plot 2
ggplot(guidelines,11))+
  scale_x_discrete(limits=unique(guidelines$state))

输出:

enter image description here

,

我们可以使用ordered

library(dplyr)
library(ggplot2)

guidelines %>% 
   mutate(state =ordered(state,levels = unique(state))) %>%
  ggplot(aes(x = state,group = grp)) +
       geom_point() + 
       geom_line(linetype = "dotted") +
       labs(x = "State",y = "Number") + 
       labs(title = "A") +
       scale_y_continuous(breaks = seq(0,11))

-输出

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。