ggplot2 x轴,每个值R的标签

Posted

技术标签:

【中文标题】ggplot2 x轴,每个值R的标签【英文标题】:ggplot2 x-axis with labels for each value R 【发布时间】:2020-07-08 08:41:36 【问题描述】:

我想创建一个在 x 轴上显示 36 个刻度的图形。

我有 df 在这个例子中我需要 12 个刻度来显示文本。

period  agg1  agg2
201601   1      2
201602   2      2 
201603   3      2 
  .      .      .
  .      .      .
  .      .      .
201612   4      1

period 是数字,格式为 YYYYMM,所以我将其更改为日期

for (row in 1:nrow(df))
  df[row,'period'] <- df[row,'period'] %>%
    mutate(period = as.Date(as.character(period*100+25),"%Y%m%d"))

融化数据

long_df <- melt(df, id = "period")

我使用以下方法绘制数据:

df_plot <- ggplot(data = long_df,
                aes(x = period, y = value, colour = variable)) + 
                geom_line()

# adding titles & labels
df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg, £million") +
  scale_x_discrete(breaks = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"))

这会创建一个图表,其中刻度线位于正确的位置,但文本不会显示在刻度线处。

我尝试添加 labels = c() 参数,但它没有显示任何内容

df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg") +
  scale_x_discrete(breaks = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"), 
                   labels = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"))

我发现了这个:ggplot x-axis labels with all x-axis values 但根据解决方案,我的labels 参数应该有效吗?

【问题讨论】:

如果你的 x 轴是一个日期,你想使用类似 scale_x_date(date_breaks = "1 day", date_labels = "%Y%m") 的东西。请参阅此问题/答案:***.com/questions/60764841/… @Laura:您不必使用for 循环来更改日期。只需直接在df 上使用mutate。它适用于所有行 【参考方案1】:
# formatting period to date
library(zoo) # additional library required

df$period <- sapply(df$period,as.character)
#sapply(df$period, class)

for (row in 1:nrow(df))
 df$period <- zoo::as.Date(zoo::as.yearmon(df$period, "%Y%m"))


# plot
df_plot <- ggplot(data = long_df,
                aes(x = period, y = value, colour = variable)) + 
                geom_line()
df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg, £million") +
              scale_x_date(breaks = "1 month", date_labels = "%Y%m") +
              theme(axis.text.x = element_text(angle = 90, hjust = 1)) # to rotate 90 degrees 

【讨论】:

以上是关于ggplot2 x轴,每个值R的标签的主要内容,如果未能解决你的问题,请参考以下文章

r 将多个ggplot2图与一个共同的x轴和不同的y轴对齐,每个轴都有不同的y轴标签。

在 R 中使用带有 facet_wrap 的 ggplot2 显示多个轴标签

r 旋转ggplot2 x轴标签

使用ggplot2更改R中的x轴刻度标签[重复]

强制 R 停止绘制缩写轴标签 - 例如ggplot2 中的 1e+00

R语言ggplot2可视化分组点图使用EnvStats包的stat_n_text函数为每个分组添加样本数标签信息(例如,在图像中X轴上方添加n=11)