使用ggplot2使第N个坐标轴标签加粗

6

使用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)))会得到这样的结果。非常适合日常数据处理! enter image description here


1
你好,欢迎来到 Stack Overflow。为了帮助您, 请提供示例数据和您已尝试的步骤。请参考 如何创建一个完美的可重现的示例。谢谢。 - jay.sf
1
你尝试过这种方法吗? - lisah
嘿@lisah,我添加了一个示例。Lisah也许我可以使用ifelse来将我的示例的最后一行应用于每7个刻度中的仅一个。你有任何想法如何去做吗? - Nieuwefn
1
嘿@jaySf,我添加了一个示例。请参见上面的评论。 - Nieuwefn
@Jimbou 这会如何改变实际轴刻度的大小?我不想改变刻度文本,我想改变刻度本身的实际大小。 - Nieuwefn
1个回答

7

您可以尝试以下方法:

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))))

在此输入图片描述

为了举例说明,这里使用了每6个文本进行一次操作。你也可以使用你自己的间隔和标签,但是需要按照以下方式操作,因为你复制了所有的间隔和标签,必须先将它们删除。

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

OP想要改变轴刻度,而不是文本大小。 - jay.sf
1
嘿,非常感谢!我使用了你的逻辑来使ticks元素正常工作!axis.ticks.x = element_line(colour = "black", size = c(5, rep(1,5)))当在日常数据中使用时,它将是 rep(1,6) - Nieuwefn
我接受了你的答案,但如果你能更改答案以增加勾号本身的大小而不是文本的大小,那将会很好。只需应用我在先前评论中所做的即可。 - Nieuwefn
跟进问题:您认为是否也可能改变刻度线本身的长度(向下)? 回答自己的问题:是的,可以使用axis.ticks.length。 - Nieuwefn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接