gpt4 book ai didi

r - theme_bw() 去除了我的 ggplot 上的所有颜色

转载 作者:行者123 更新时间:2023-12-01 12:09:08 25 4
gpt4 key购买 nike

library(tidyverse)
ggplot(mtcars, aes(cyl, mpg)) +
geom_point() +
theme_bw() +
geom_hline(aes(yintercept = 20), color = "red")

上面的代码是漂亮的黑白主题,带有红色水平线。下面的代码也应该是黑白主题,这次有一条红色垂直线。但是情节根本没有任何色彩。为什么 theme_bw() 从我下面的图中去除了所有颜色?

library(tidyverse)
library(lubridate)

df <-
tibble(
date = as.Date(41000:42000, origin = "1899-12-30"),
value = c(rnorm(500, 5), rnorm(501, 10))
) %>%
mutate(year = as.factor(year(date)))

ggplot(df, aes(date, value)) +
geom_line() +
geom_vline(
xintercept = as.numeric(df$date[yday(df$date) == 1]), color = "red"
) +
scale_x_date(
date_labels = "%b", breaks = scales::pretty_breaks(), expand = c(0, 0)
) +
facet_grid(.~ year, space = 'free_x', scales = 'free_x', switch = 'x') +
labs(x = "") +
theme_bw(base_size = 14, base_family = 'mono') +
theme(panel.grid.minor.x = element_blank()) +
theme(panel.spacing.x = unit(0, "line")) +
theme(strip.placement = 'outside', strip.background.x = element_blank())

enter image description here

最佳答案

您可以在 theme 中使用 panel.border = element_blank() 移除面板边框

ggplot(df, aes(date, value)) +
geom_line() +
geom_vline(
xintercept = as.numeric(df$date[yday(df$date) == 1]), color = "red") +
scale_x_date(
date_labels = "%b", breaks = scales::pretty_breaks(), expand = c(0, 0)) +
facet_grid(.~ year, space = 'free_x', scales = 'free_x', switch = 'x') +
labs(x = "") +
theme_bw(base_size = 14, base_family = 'mono') +
theme(
panel.grid.minor.x = element_blank(),
panel.spacing.x = unit(0, "line"),
panel.border = element_blank(),
strip.placement = 'outside',
strip.background.x = element_blank())

enter image description here


更新

要使用分面 让红线不与分面边界重叠,这是一个有点“hacky”的解决方案:

首先,绘制无面板边框

gg <- ggplot(df, aes(date, value)) +
geom_line() +
geom_vline(
xintercept = as.numeric(df$date[yday(df$date) == 1]), color = "red") +
scale_x_date(
date_labels = "%b", breaks = scales::pretty_breaks(), expand = c(0, 0)) +
facet_grid(.~ year, space = 'free_x', scales = 'free_x', switch = 'x') +
labs(x = "") +
theme_bw(base_size = 14, base_family = 'mono') +
theme(
panel.grid.minor.x = element_blank(),
panel.spacing.x = unit(0, "line"),
panel.border = element_blank(),
strip.placement = 'outside',
strip.background.x = element_blank())

然后我们提取面板的y轴范围,并添加一个geom_rect来手动绘制面板边框

ylim <- ggplot_build(gg)$layout$panel_params[[1]]$y.range
gg <- gg +
geom_rect(
xmin = min(df$date), xmax = max(df$date),
ymin = ylim[1], ymax = ylim[2],
fill = NA, colour = "black")

enter image description here

这有点老套,因为您需要将绘图分成两步才能提取面板的 y 轴范围。

关于r - theme_bw() 去除了我的 ggplot 上的所有颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52609119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com