ggplot2 -r- scale_x_discrete显示文本

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

我试图在x轴的文本中显示有限数量的观测值,但在图中保持整个离散观测数量:

zed <- structure(list(FTD = c(93L, 50L, 88L), FTD_DATE = structure(c(12L, 15L, 2L), .Label = c("01/03/2018", "03/06/2017", "05/05/2017", "08/01/2018", "08/12/2017", "09/07/2017", "11/10/2017", "13/02/2018", "14/09/2017", "15/11/2017", "16/05/2017", "17/11/2017", "18/09/2017", "18/12/2017", "21/07/2017", "21/10/2017", "23/06/2017", "26/05/2017"), class = "factor")), .Names = c("FTD", "FTD_DATE"), row.names = c(NA, 3L), class = "data.frame")

library(ggplot2)
ggplot(data=zed, aes(x=FTD_DATE,y=FTD)) +
  theme(axis.text.x = element_text
        (angle = 90, vjust = 0.5, hjust = 1.0)) +
  geom_point(aes(x=FTD_DATE,y=FTD)) +
  scale_x_discrete (breaks=c("05/05/2017","03/06/2017","09/07/2017",
                             "11/10/2017","08/12/2017","08/01/2018",
                             "01/03/2018"))

enter image description here

上面给出了x轴左侧的文本集中(scale_x_discrete中的7个日期,以及总共19个日期中的断点参数),但在轴的其余部分留下了一个宽的空白区域...是有没有办法在整个x轴上均匀分布文本,选择我想在文本中显示的观察次数,在图中保持整个观察次数,并按x轴升序排序日期?请记住,scale_x_date返回错误“错误:输入无效:date_trans仅适用于类Date的对象”..谢谢

r
1个回答
0
投票

您的日期目前是dd / mm / yyyy形式的文本,无法正确订购。您可以将FTD_DATE列转换为真实日期格式,然后使用ggplot2的scale_x_date方法设置适合您显示的日期范围的任何时间段。

测试数据

我已经将测试数据从三个点扩展到了18个,保留了结构中的标签,但是有一些虚拟的FTD值:

zed <- data.frame(FTD = rep(c(93L, 50L, 88L, 66L, 75L, 94L), 3), 
                  FTD_DATE = c("01/03/2018", "03/06/2017", "05/05/2017", "08/01/2018", "08/12/2017", "09/07/2017", "11/10/2017", "13/02/2018", "14/09/2017", "15/11/2017", "16/05/2017", "17/11/2017", "18/09/2017", "18/12/2017", "21/07/2017", "21/10/2017", "23/06/2017", "26/05/2017"))

转换到日期

zed$FTD_DATE = as.Date(zed$FTD_DATE, "%d/%m/%Y")

ggplot - 休息时间为两周

library(ggplot2)
ggplot(data=zed, aes(x=FTD_DATE,y=FTD)) +
  theme(axis.text.x = element_text
        (angle = 90, vjust = 0.5, hjust = 1.0)) +
  geom_point(aes(x=FTD_DATE,y=FTD)) +
  scale_x_date(date_breaks = "2 weeks")

enter image description here

休息时间设置为月份

ggplot(data=zed, aes(x=FTD_DATE,y=FTD)) +
  theme(axis.text.x = element_text
        (angle = 90, vjust = 0.5, hjust = 1.0)) +
  geom_point(aes(x=FTD_DATE,y=FTD)) +
  scale_x_date(date_breaks = "month")

enter image description here

如您所见,这些点按照您想要的顺序从左到右绘制,而date_breaks的选择控制着每个绘图上显示的标签数量。

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