ggplot中的x轴刻度

问题描述 投票:0回答:1

我有一个数据框

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的周期,如果可以的话,谢谢

r ggplot2 scale axis
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.