ggplot中的x轴刻度

时间:2020-05-17 11:32:05

标签: r ggplot2 scale axis

我有一个数据框

df <-data.frame(apport=c("Min 1", "Min 2", "Org 2017","Org 2017","Org 2017",
                         "Org 2017","Org 2017","Org 2017","Org 2017","Org 2017",
                         "Org 2017","Org 2017"), periode_ap=c("Mai_32","Jui_34",
                          "Avr_30", "Avr_31","Avr_31","Avr_31","Mai_32","Mai_32","Mai_32",
                          "Mai_33","Mai_33","Mai_33"))

我做了一个ggplot

ggplot(df, aes(x=periode_ap, color=apport))+geom_density() 

enter image description here

但是我想在x轴上具有此列表中的刻度:

list<-c("Jan_0", "Jan_1", "Fev_2", "Fev_3","Mar_4", "Mar_5", "Avr_6", "Avr_7", "Mai_8", "Mai_9", "Jui_10", "Jui_11", "Jul_12", "Jul_13", "Aou_14", "Aou_15", "Sep_16", "Sep_17", "Oct_18", "Oct_19", "Nov_20","Nov_21", "Dec_22", "Dec_23", "Jan_24", "Jan_25", "Fev_26", "Fev_27", "Mar_28", "Mar_29", "Avr_30","Avr_31", "Mai_32", "Mai_33", "Jui_34", "Jui_35", "Jul_36", "Jul_37", "Aou_38", 
 "Aou_39", "Sep_40", "Sep_41", "Oct_42", "Oct_43", "Nov_44", "Nov_45", "Dec_46", "Dec_47")

我的数据中有一个从Jan_0到Dec_47的周期,而不是从Avr_30到Jui_34的周期,如果可以的话,谢谢

1 个答案:

答案 0 :(得分:2)

似乎您在围绕答案跳舞。问题在于您不能使用类似xlim('Jan_0','Dec_47')之类的东西,因为您的x轴刻度是离散的而不是连续的。 ggplot2不知道应该如何组织您的数据,因此它只是默认为数据帧中的数据,并且不知道如何推断回“ Jan_0”或进一步推断到“ Dec_47”。 (顺便说一句...我也不...)

因此,如何扩展图表的答案是双重的:

(1)告诉ggplot2数据的组织方式。我将df$periode_ap设置为一个因素,并指出级别是您的列表。

lev_periode_ap <- list<-c("Jan_0", "Jan_1", "Fev_2", "Fev_3","Mar_4", "Mar_5", "Avr_6", "Avr_7", "Mai_8", "Mai_9", "Jui_10", "Jui_11", "Jul_12", "Jul_13", "Aou_14", "Aou_15", "Sep_16", "Sep_17", "Oct_18", "Oct_19", "Nov_20","Nov_21", "Dec_22", "Dec_23", "Jan_24", "Jan_25", "Fev_26", "Fev_27", "Mar_28", "Mar_29", "Avr_30","Avr_31", "Mai_32", "Mai_33", "Jui_34", "Jui_35", "Jul_36", "Jul_37", "Aou_38", 
        "Aou_39", "Sep_40", "Sep_41", "Oct_42", "Oct_43", "Nov_44", "Nov_45", "Dec_46", "Dec_47")

df$period_ap <- factor(df$periode_ap, levels=lev_periode_ap)

(2)告诉ggplot2处理这些级别。现在,ggplot2知道df$periode_ap是序数,它可以告诉“最高的” ”,什么是“最低”,并且严格地所有这些级别的顺序。我们需要表明我们希望通过scale_x_discrete(labels=...)显示所有级别,但重要的是,我们要确保ggplot2不会删除没有数据的任何级别。幸运的是,我们可以使用drop=参数。在theme()元素进行一些更改之后,您将获得以下信息:

ggplot(df, aes(x=period_ap,color=apport))+ theme_bw() +
  geom_density() +
  scale_x_discrete(labels=lev_periode_ap, drop=FALSE) +
  theme(axis.text.x=element_text(angle=90, vjust=0.5, hjust=1))

enter image description here

现在,似乎我们缺少足够的数据点,无法显示“最小1”和“最小2”的颜色,但是您提出的问题就有了答案。