如何通过数据框中列中的值设置单个 ggplot2 箱线图框的宽度

问题描述 投票:0回答:0

我正在使用 ggplot2 绘制德国所有地区在特定时间段(“期间”)内建造的建筑物数量(“N”)。

时间段的持续时间不尽相同。我希望箱线图的宽度反映时间段的持续时间(“年”),即更宽的持续时间更长。

数据框:

       NUTS3_ID ARS_Codes Location         period             N Years no_highlight
   <chr>    <chr>     <chr>            <fct>          <dbl> <dbl> <lgl>       
 1 DEF01    01001     Flensburg, Stadt Before 1919     2362    10 TRUE        
 2 DEF01    01001     Flensburg, Stadt 1919 - 1948     1955     9 TRUE        
 3 DEF01    01001     Flensburg, Stadt 1949 - 1978     7012     9 FALSE       
 4 DEF01    01001     Flensburg, Stadt 1979 - 1986     1487     7 FALSE       
 5 DEF01    01001     Flensburg, Stadt 1987 - 1990      411     3 FALSE       
 6 DEF01    01001     Flensburg, Stadt 1991 - 1995      654     4 FALSE       
 7 DEF01    01001     Flensburg, Stadt 1996 - 2000     1182     4 FALSE       
 8 DEF01    01001     Flensburg, Stadt 2001 - 2004      753     3 FALSE       
 9 DEF01    01001     Flensburg, Stadt 2005 - 2008      686     3 FALSE       
10 DEF01    01001     Flensburg, Stadt 2009 and later   293     2 FALSE       
# … with 4,110 more rows
# ℹ Use `print(n = ...)` to see more rows

在此数据框中,变量“no_highlight”用于按颜色格式化箱线图。相关列是“period”、“N”和“Years”。

用于制作boxpot的代码:

ggplot(df2, aes(x=period, y=N, fill = no_highlight)) +
  geom_boxplot() + 
  labs(x = "Period",y = "Number of Buildings Constructed") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  scale_fill_manual(values=c("grey", "white")) + 
  scale_alpha_manual(values=c(1,0.1)) +
  theme(legend.position = "none")

Boxplot Plot

我最初尝试使用 varwidth,但是框的宽度没有连接到 x 变量,所以这样不好。

为简单起见,我创建了一个新列“年”,其中包含每个时期的持续时间,并希望使框的宽度与持续时间成正比。

r ggplot2 boxplot
© www.soinside.com 2019 - 2024. All rights reserved.