首页 > 解决方案 > 未在 ggplot 中显示所有 x 轴标签

问题描述

我有一个包含许多列的数据集。最后一列(标签)显示每个用户(行)的集群成员。如何编辑我的代码以仅显示 x 轴的几个标签?,因为现在日期重叠并且无法读取。我想显示每五个日期中的第一个、最后一个和一个。例如,显示日期1,5,10,15,....,133,其中1133是第一个和最后一个日期。顺便说一句,我使用过scale_x_date()但我没有成功。

数据样本

mat <- structure(c(1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 2, 3), 
          .Dim = c(3L, 5L), 
          .Dimnames = list(c("A", "B", "C"), 
                           c("2011-1-6", "2011-1-9", "2011-1-15", "2011-2-19", "Labels")))

代码

library(tidyverse)
    mat %>% 
      as.data.frame() %>%
      mutate(id=1:nrow(mat),
             Labels = as.factor(Labels)) %>%
      pivot_longer(cols=starts_with("2011")) %>%
      filter(value==1) %>%
      ggplot(aes(x=name, y=id, color=Labels)) + 
        geom_point() + 
        theme(axis.text.x = element_text(angle = 90))

标签: rdataframedateggplot2plot

解决方案


您可以使用scale_x_date. 在@Rui Barradas 的评论之后,您首先必须将日期的类设置为"Date".

然后,使用scale_x_date,您可以使用 控制中断date_breaks。您还可以使用 控制格式date_labels。有关?scale_x_date更多信息,请参阅。以下是每 5 天有一个轴标签的方法:

mat %>% 
  as.data.frame() %>%
  mutate(id=1:nrow(mat),
         Labels = as.factor(Labels)) %>%
  pivot_longer(cols=starts_with("2011")) %>%
  mutate(name = as.Date(name)) %>%
  filter(value==1) %>%
  ggplot(aes(x=name, y=id, color=Labels)) + 
  geom_point() + 
  scale_x_date(date_labels = "%Y-%m-%d", date_breaks = "5 days") + 
  theme(axis.text.x = element_text(angle = 90))

推荐阅读