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

R ggplot2:以非字母顺序保留x轴标签,r,ggplot2,R,Ggplot2,我用ggplot2来绘制各州每年发生的事件。我希望状态标签的顺序与数据表AZ CT NH NM DE中所示的顺序相同。。。但是ggplot会自动按照字母顺序重新组织州标签。。。。我创建了组,以便以num值(例如NM和TN)显示范围。请忽略组编号-我取出了一些数据点,以使表格更小 我尝试了以前帖子的建议,使用因子和级别,如下所示: guidelines$state <- factor(guidelines$state, levels = unique(guidelines$state) 但

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

我尝试了以前帖子的建议,使用因子和级别,如下所示:

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

但它不起作用,因为我使用的是组和重复的州名称。有什么办法可以解决这个问题吗?

试试这个。你必须使用unique。在因子中添加ordered=T将保持所需的顺序。下面的代码请下次使用dput共享您的数据,因为有时使用屏幕截图中的数据会很复杂,因为它们非常大:

library(ggplot2)
#Data
guidelines <- data.frame(state=c('AZ','CT','NH','NM','NM','DE','NJ','TN','TN'),
                 num=c(10,10,10,5,10,5,5,2,5),
                 grp=c(3,4,17,19,19,5,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))
输出:

我们可以使用订购的

-输出


我想你是在寻找scale_x_discrete请不要将数据添加为图像。阅读并了解如何给出建议。
library(ggplot2)
#Data
guidelines <- data.frame(state=c('AZ','CT','NH','NM','NM','DE','NJ','TN','TN'),
                 num=c(10,10,10,5,10,5,5,2,5),
                 grp=c(3,4,17,19,19,5,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))
#Data
guidelines <- data.frame(state=c('AZ','CT','NH','NM','NM','DE','NJ','TN','TN'),
                         num=c(10,10,10,5,10,5,5,2,5),
                         grp=c(3,4,17,19,19,5,18,25,25),stringsAsFactors = F)
#Plot 2
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))+
  scale_x_discrete(limits=unique(guidelines$state))
library(dplyr)
library(ggplot2)

guidelines %>% 
   mutate(state =ordered(state, levels = unique(state))) %>%
  ggplot(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))