geom_boxplot 中不显示垂直线
Vertical line does not show in geom_boxplot
我有一个类似于以下内容的数据框(例如):
set.seed(42) ## for sake of reproducibility
n <- 6
dat <- data.frame(date=seq.Date(as.Date("2020-12-26"), as.Date("2020-12-31"), "day"),
category=rep(LETTERS[1:2], n/2),
daily_count=sample(18:100, n, replace=TRUE)
)
dat
# date category daily_count
#1 2020-12-26 A 60
#2 2020-12-27 B 32
#3 2020-12-28 B 39
#4 2020-12-29 B 75
#5 2020-12-30 A 25
#6 2020-12-31 A 53
#7 2020-12-26 A 60
#8 2020-12-27 A 32
#9 2020-12-28 A 39
#10 2020-12-29 B 75
#11 2020-12-30 B 25
#12 2020-12-31 B 53
.
.
.
我正在尝试创建一个 X 轴上带有月份和年份的箱线图,它看起来像这样:
我想在 2013-08-23 上创建一条垂直线。我为此使用以下代码:
library(ggplot2)
ggplot(dat) +
geom_boxplot(aes(y=daily_count,
x=reorder(format(dat$date,'%b %y'),dat$date),
fill=dat$category)) +
xlab('Month & Year') + ylab('Count') + guides(fill=guide_legend(title="Category")) +
theme_bw()+
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10))+
geom_vline(xintercept = as.numeric(as.Date("2013-08-23")), linetype=1, colour="red")
有什么指导吗?
我认为没有必要进行任何“扩展”...这不是我的解决方案,而是@dario 修改后的解决方案。我认为问题出在美学上。
ggplot(dat, aes(y=daily_count,
x=date,
fill=category)) +
geom_boxplot() +
labs(x = 'Month & Year', ylab= 'Count', fill = "Category") +
theme_bw()+
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10))+
geom_vline(xintercept = as.Date("2020-12-28"), linetype=1, colour="red")
在这个回答中:
- 我创建了一个更大的样本
- 为简单起见,我使用
tsibble
中的 yearmonth
- 我已经解决了垂直线的问题
- 我清理了一些实验室的使用以获得更清晰的代码
set.seed(42)
dates <- seq.Date(as.Date("2012-08-01"), as.Date("2014-08-30"), "day")
n <- length(dates)
dat <- data.frame(date = dates,
category = rep(LETTERS[1:2], n/2),
daily_count = sample(18:100, n, replace=TRUE))
library(ggplot2)
library(tsibble)
ggplot(dat) +
geom_boxplot(aes(y = daily_count,
x = yearmonth(date),
group = paste(yearmonth(date), category),
fill = category)) +
labs(x = 'Month & Year',
y = 'Count',
fill = "Category") +
theme_bw() +
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10)) +
geom_vline(xintercept = lubridate::ymd("2013-08-23"), linetype=1, colour="red", size = 2)
由 reprex package (v2.0.0)
于 2021-11-05 创建
竖线我设置的比较粗,这样可以看到。
遗憾的是图表很难可视化。为什么不用丝带代替?
随机数据很糟糕,但你应该看到一些有意义的东西。
library(ggplot2)
library(tsibble)
library(dplyr)
library(tidyr)
dat %>%
group_by(category, yearmonth = yearmonth(date)) %>%
summarise(q = list(quantile(daily_count))) %>%
unnest_wider(q, names_sep = "_") %>%
ggplot(aes(x = yearmonth, fill = category, colour = category)) +
geom_ribbon(aes(ymin = `q_0%`, ymax = `q_100%`), alpha = 0.2) +
geom_ribbon(aes(ymin = `q_25%`, ymax = `q_75%`), alpha = 0.2) +
geom_line(aes(y = `q_50%`)) +
labs(x = 'Month & Year',
y = 'Count',
colour = "Category",
fill = "Category") +
theme_bw() +
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10)) +
geom_vline(xintercept = lubridate::ymd("2013-08-23"), linetype=1, colour="red", size = 2)
我有一个类似于以下内容的数据框(例如):
set.seed(42) ## for sake of reproducibility
n <- 6
dat <- data.frame(date=seq.Date(as.Date("2020-12-26"), as.Date("2020-12-31"), "day"),
category=rep(LETTERS[1:2], n/2),
daily_count=sample(18:100, n, replace=TRUE)
)
dat
# date category daily_count
#1 2020-12-26 A 60
#2 2020-12-27 B 32
#3 2020-12-28 B 39
#4 2020-12-29 B 75
#5 2020-12-30 A 25
#6 2020-12-31 A 53
#7 2020-12-26 A 60
#8 2020-12-27 A 32
#9 2020-12-28 A 39
#10 2020-12-29 B 75
#11 2020-12-30 B 25
#12 2020-12-31 B 53
.
.
.
我正在尝试创建一个 X 轴上带有月份和年份的箱线图,它看起来像这样:
我想在 2013-08-23 上创建一条垂直线。我为此使用以下代码:
library(ggplot2)
ggplot(dat) +
geom_boxplot(aes(y=daily_count,
x=reorder(format(dat$date,'%b %y'),dat$date),
fill=dat$category)) +
xlab('Month & Year') + ylab('Count') + guides(fill=guide_legend(title="Category")) +
theme_bw()+
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10))+
geom_vline(xintercept = as.numeric(as.Date("2013-08-23")), linetype=1, colour="red")
有什么指导吗?
我认为没有必要进行任何“扩展”...这不是我的解决方案,而是@dario 修改后的解决方案。我认为问题出在美学上。
ggplot(dat, aes(y=daily_count,
x=date,
fill=category)) +
geom_boxplot() +
labs(x = 'Month & Year', ylab= 'Count', fill = "Category") +
theme_bw()+
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10))+
geom_vline(xintercept = as.Date("2020-12-28"), linetype=1, colour="red")
在这个回答中:
- 我创建了一个更大的样本
- 为简单起见,我使用
tsibble
中的yearmonth
- 我已经解决了垂直线的问题
- 我清理了一些实验室的使用以获得更清晰的代码
set.seed(42)
dates <- seq.Date(as.Date("2012-08-01"), as.Date("2014-08-30"), "day")
n <- length(dates)
dat <- data.frame(date = dates,
category = rep(LETTERS[1:2], n/2),
daily_count = sample(18:100, n, replace=TRUE))
library(ggplot2)
library(tsibble)
ggplot(dat) +
geom_boxplot(aes(y = daily_count,
x = yearmonth(date),
group = paste(yearmonth(date), category),
fill = category)) +
labs(x = 'Month & Year',
y = 'Count',
fill = "Category") +
theme_bw() +
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10)) +
geom_vline(xintercept = lubridate::ymd("2013-08-23"), linetype=1, colour="red", size = 2)
由 reprex package (v2.0.0)
于 2021-11-05 创建竖线我设置的比较粗,这样可以看到。
遗憾的是图表很难可视化。为什么不用丝带代替? 随机数据很糟糕,但你应该看到一些有意义的东西。
library(ggplot2)
library(tsibble)
library(dplyr)
library(tidyr)
dat %>%
group_by(category, yearmonth = yearmonth(date)) %>%
summarise(q = list(quantile(daily_count))) %>%
unnest_wider(q, names_sep = "_") %>%
ggplot(aes(x = yearmonth, fill = category, colour = category)) +
geom_ribbon(aes(ymin = `q_0%`, ymax = `q_100%`), alpha = 0.2) +
geom_ribbon(aes(ymin = `q_25%`, ymax = `q_75%`), alpha = 0.2) +
geom_line(aes(y = `q_50%`)) +
labs(x = 'Month & Year',
y = 'Count',
colour = "Category",
fill = "Category") +
theme_bw() +
theme(axis.text=element_text(size=10),
axis.title=element_text(size=10)) +
geom_vline(xintercept = lubridate::ymd("2013-08-23"), linetype=1, colour="red", size = 2)