ggplot删除特定的x轴标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ggplot删除特定的x轴标签相关的知识,希望对你有一定的参考价值。

library(tidyverse)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_breaks = "1 month", 
                 date_labels = "%b") + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

我想保持下面所示的情节,完全一样,有两个例外。我想删除x轴标签上的第一个Nov和x轴标签上的最后一个Dec。我在上面的代码块中添加了coord_cartesian(xlim = as.Date(c("2017-12-01", "2018-11-01"))),但这消除了我x轴任意一端的“空格”填充。

如何告诉ggplot删除第一个和最后一个x轴标签的文本?这将是第一个Nov和最后一个Dec。请注意,这些在我的df数据框中根本不存在,因此dplyr过滤器可能不起作用。

enter image description here

答案

我想这就是你想要的。 date_breaks是不必要的。

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_labels = "%b", breaks = df$date) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

Resulting plot

另一答案

你可以通过使用seq.date设置中断来实现你想要的:

library(tidyverse);library(lubridate)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))



ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(
               date_labels = "%b",
               breaks = seq.Date(ymd("2017-12-01"),ymd("2018-11-01"), by = "month")) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

enter image description here

另一答案

我建议在R中研究Lubridate软件包 - 你可以将任何凌乱的日期值转换为适当的POSIXT格式,并且还可以非常容易地提取月份信息 - 您还可以将这些日期转换为实际月份的单个列,并使用作为你的轴标签,这是更清洁,因为你会有一个额外的相应月份的列 - 你也可以根据那个月填写并做一些其他很酷的东西!

以上是关于ggplot删除特定的x轴标签的主要内容,如果未能解决你的问题,请参考以下文章

删除ggplot中的所有x轴标签[重复]

如何删除x轴标签上的组信息

带有所有x轴值的ggplot x轴标签

具有所有 x 轴值的 ggplot x 轴标签

在ggplot2中的x轴标签下方添加图像

R语言ggplot2可视化轴标签重叠问题解决实战:修改轴标签字体轴标签垂直于坐标轴(或者旋转特定角度)