按变量填充箱线图但保持日期比例 GGplot
Fill boxplot by variable but keep date scale GGplot
我有一个包含三个变量在三个不同日期的值的数据框:
df <- data.frame(date = as.Date(c(rep('2021-01-01',6),rep('2021-05-04',6),rep('2015-04-04',6))),
variable = rep(c('apple','bananna','carrot'),6),
value = rnorm(18,5,2))
我想制作一个箱线图,填充与变量相关,x 轴为日期,y 轴为值:
ggplot(df,aes(x=as.factor(date),y=value,fill=variable))+geom_boxplot()
这是基于变量的填充,但不根据实际时间差异缩放日期:
如果我设置 group=date
,它会正确缩放,但 fill=variable
停止工作:
ggplot(df,aes(x=date,y=value,group=date,fill=variable))+geom_boxplot()
如何让日期正确缩放并根据变量名进行填充?
好像已经有人回答了。您需要为群组创建互动:group=interaction(variable,date)
:
ggplot(df,aes(x=date,y=value,group=interaction(variable,date),fill=variable))+geom_boxplot()
可以通过创建结合 date
和 variable
的因子变量来解决该问题。这是通过 interaction
.
完成的
我还添加了代码来增加绘图 window 宽度,以使条形图和标签更加可见。
df <- data.frame(date = as.Date(c(rep('2021-01-01',6),rep('2021-05-04',6),rep('2015-04-04',6))),
variable = rep(c('apple','bananna','carrot'),6),
value = rnorm(18,5,2))
library(ggplot2)
x11(width = 20, height = 8) # this is not stricktly needed
ggplot(df, aes(x = date, y = value, fill = variable)) +
geom_boxplot(aes(group = interaction(date, variable))) +
scale_x_date(
breaks = unique(df$date),
date_labels = "%Y-%m-%d"
) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
由 reprex package (v2.0.1)
创建于 2022-06-02
同样可以通过在 dplyr
管道中创建一个临时的新因子到 mutate
。
suppressPackageStartupMessages({
library(ggplot2)
library(dplyr)
})
df %>%
mutate(group = interaction(date, variable)) %>%
ggplot(aes(x = date, y = value, fill = variable)) +
geom_boxplot(aes(group = group)) +
scale_x_date(
breaks = unique(df$date),
date_labels = "%Y-%m-%d"
) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
由 reprex package (v2.0.1)
创建于 2022-06-02
我有一个包含三个变量在三个不同日期的值的数据框:
df <- data.frame(date = as.Date(c(rep('2021-01-01',6),rep('2021-05-04',6),rep('2015-04-04',6))),
variable = rep(c('apple','bananna','carrot'),6),
value = rnorm(18,5,2))
我想制作一个箱线图,填充与变量相关,x 轴为日期,y 轴为值:
ggplot(df,aes(x=as.factor(date),y=value,fill=variable))+geom_boxplot()
这是基于变量的填充,但不根据实际时间差异缩放日期:
如果我设置 group=date
,它会正确缩放,但 fill=variable
停止工作:
ggplot(df,aes(x=date,y=value,group=date,fill=variable))+geom_boxplot()
如何让日期正确缩放并根据变量名进行填充?
好像已经有人回答了group=interaction(variable,date)
:
ggplot(df,aes(x=date,y=value,group=interaction(variable,date),fill=variable))+geom_boxplot()
可以通过创建结合 date
和 variable
的因子变量来解决该问题。这是通过 interaction
.
我还添加了代码来增加绘图 window 宽度,以使条形图和标签更加可见。
df <- data.frame(date = as.Date(c(rep('2021-01-01',6),rep('2021-05-04',6),rep('2015-04-04',6))),
variable = rep(c('apple','bananna','carrot'),6),
value = rnorm(18,5,2))
library(ggplot2)
x11(width = 20, height = 8) # this is not stricktly needed
ggplot(df, aes(x = date, y = value, fill = variable)) +
geom_boxplot(aes(group = interaction(date, variable))) +
scale_x_date(
breaks = unique(df$date),
date_labels = "%Y-%m-%d"
) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
由 reprex package (v2.0.1)
创建于 2022-06-02同样可以通过在 dplyr
管道中创建一个临时的新因子到 mutate
。
suppressPackageStartupMessages({
library(ggplot2)
library(dplyr)
})
df %>%
mutate(group = interaction(date, variable)) %>%
ggplot(aes(x = date, y = value, fill = variable)) +
geom_boxplot(aes(group = group)) +
scale_x_date(
breaks = unique(df$date),
date_labels = "%Y-%m-%d"
) +
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1))
由 reprex package (v2.0.1)
创建于 2022-06-02