【问题标题】:Make every Nth axis label bold with ggplot2使用 ggplot2 使每个第 N 个轴标签变为粗体
【发布时间】:2018-02-23 13:53:44
【问题描述】:

是否可以使用 ggplot2 使轴上的每个第 N 个刻度变为粗体?我只想让轴标记粗体(小线),而不是文本。

在图表中显示每日数据时,这对于突出显示每 7 个刻度非常有用。我想保留每一天的刻度线。

我无法找到有关此主题的任何信息,我们将不胜感激!

编辑:这是一个代码示例。我在最后一行扩展了它以增加所有刻度的大小。我想要的是每第 N 个标签都更大。例如每 7 次。手动定义每 7 个是行不通的,因为我正在处理每天都在变化的数据。

library(ggplot2)
library(lubridate)
theme_set(theme_bw())

df <- economics_long[economics_long$variable %in% c("psavert", "uempmed"), ]
df <- df[lubridate::year(df$date) %in% c(1967:1981), ]

# labels and breaks for X axis text
brks <- df$date[seq(1, length(df$date), 12)]
lbls <- lubridate::year(brks)

# plot
ggplot(df, aes(x=date)) + 
  geom_line(aes(y=value, col=variable)) + 
  labs(title="Time Series of Returns Percentage", 
       subtitle="Drawn from Long Data format", 
       caption="Source: Economics", 
       y="Returns %", 
       color=NULL) +  # title and caption
  scale_x_date(labels = lbls, breaks = brks) +  # change to monthly ticks and labels
  scale_color_manual(labels = c("psavert", "uempmed"), 
                     values = c("psavert"="#00ba38", "uempmed"="#f8766d")) +  # line color
  theme(axis.text.x = element_text(angle = 90, vjust=0.5, size = 8),  # rotate x axis text
        panel.grid.minor = element_blank(),
        axis.ticks.x = element_line(colour = "black", size = 2))  

解决方案:感谢@Jimbou! 使用axis.ticks.x = element_line(colour = "black", size = c(2, rep(1,6))) 导致这一点。非常适合日常数据!

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow,为了我们可以帮助您,请提供示例数据和您迄今为止尝试过的步骤。考虑How to make a great reproducible example,谢谢。
  • 你试过this approach吗?
  • 嘿@lisah,我添加了一个示例。 Lisah 也许我可以用 ifelse 做一些事情,将我示例的最后一行应用到每 7 个刻度。有什么想法我会怎么做?
  • 嘿@jaySf 我添加了一个示例。见上面的评论
  • @Jimbou 这将如何改变实际轴刻度的大小。我不想更改刻度的文本,我想更改刻度本身的实际大小。

标签: r ggplot2


【解决方案1】:

你可以试试:

ggplot(df, aes(x=date, y=value, color=variable)) + 
     geom_line() + 
     scale_color_manual(values = c("#00ba38", "#f8766d")) +
     scale_x_date(date_breaks = "1 year", date_labels ="%Y") +
     theme(axis.ticks.x = element_line(colour = "black", size = c(5, rep(1,5))),
       axis.text.x = element_text(angle = 90, vjust=0.5, size = c(15,rep(8,5))))

使用每个6th 和文本大小来进行说明。 您也可以使用您的中断和标签,但是您必须使用以下来代替,因为您复制了所有中断和标签,并且必须事先删除它们。

scale_x_date(labels = lbls[!duplicated(lbls)], breaks = brks[!duplicated(lbls)]) 

【讨论】:

  • OP 希望改变轴刻度,而不是文本大小。
  • 嘿,非常感谢!我将您的逻辑应用于刻度元素以使其工作! axis.ticks.x = element_line(colour = "black", size = c(5, rep(1,5))) 在每日数据上使用它时,它将是 rep(1,6)
  • 我已经接受了您的回答,但如果您可以更改您的回答以增加刻度本身而不是文本的大小,那就太好了。只需应用我在之前的评论中所做的即可。
  • 后续问题:您认为也可以更改刻度本身的长度(向下)吗?回答自己的问题:是的,它是:使用axis.ticks.length
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 2022-11-25
  • 2015-06-28
  • 2020-07-08
  • 2019-03-25
  • 2018-11-22
  • 1970-01-01
相关资源
最近更新 更多