【问题标题】:Change ggboxplot box outline colors更改 ggboxplot 框轮廓颜色
【发布时间】:2021-08-15 14:47:56
【问题描述】:

如何为箱线图栏添加黑色轮廓?如果我指定 color="black" 文本将彼此重叠。我也想把文字的颜色改成黑色

数据:

COUNTRY  ACTUAL    YEAR 
<chr>    <<dbl>    <dbl>   
1 U.S.A.  9.42     1996     
2 U.S.A.  208      1998  
3 U.S.A.  454.     1996  
4 U.S.A.  21.2     1996  
5 U.S.A.  566      1997  
6 Mexico  370.     1995  
7 U.S.A.  845.     1996  
8 Canada  492      1998  
9 U.S.A. 1352.     1998  
10 U.S.A.  103.    1996 
...

代码:

df %>% 
  select(YEAR, COUNTRY, ACTUAL) %>% 
  mutate(YEAR = as.factor(YEAR)) %>%
  group_by(COUNTRY, YEAR) %>% 
  ggsummarystats(
    ., x = c("COUNTRY"), y = c("ACTUAL"),
    palette=custom_pal,
    ggfunc = ggboxplot,
    color="YEAR",
    fill = "YEAR", 
    summaries = c("n", "mean", "median", "min", "max")
  )

制作图片

如果我编辑

color=rep("black", 12)

那么生成的图片是这样的:

其他方面看起来不错,但汇总统计信息堆叠在一起,R 会发出警告:

Warning messages:
1: In if (color %in% names(data) & is.null(add.params$color)) add.params$color <- color :
  the condition has length > 1 and only the first element will be used
2: In if (color %in% colnames(df)) { :
  the condition has length > 1 and only the first element will be used

【问题讨论】:

  • 删除color="YEAR"?
  • 结果与 color=rep("black", 12) 的图片相同

标签: r ggplot2 dplyr tidyverse


【解决方案1】:

在将输出分配给一个对象后,您可以分别更改两个图的颜色,我们称之为p。更改p$main.plot 会更改绘图轮廓和误差线,更改p$summary.plot 会更改文本颜色。

p <- df %>% 
    select(YEAR, COUNTRY, ACTUAL) %>% 
    mutate(YEAR = as.factor(YEAR)) %>%
    group_by(COUNTRY, YEAR) %>% 
    ggsummarystats(
        ., x = c("COUNTRY"), y = c("ACTUAL"),
        palette=custom_pal,
        ggfunc = ggboxplot,
        color="YEAR",
        fill = "YEAR", 
        summaries = c("n", "mean", "median", "min", "max")
    )

n <- length(unique(df$YEAR))
p$main.plot <- p$main.plot + scale_color_manual(values=rep("black", n))
p$summary.plot <- p$summary.plot + scale_color_manual(values=rep("black", n))
p

【讨论】:

  • 像魅力一样工作!谢谢。您不知道如何将汇总统计信息更改为大写?
  • 您可以使用p$summary.plot$layers[[1]]$data$y &lt;- toupper(p$summary.plot$layers[[1]]$data$y)(或p$summary.plot$layers[[1]]$data$y &lt;- tools::toTitleCase(p$summary.plot$layers[[1]]$data$y) 仅将第一个字母大写)
猜你喜欢
  • 2019-03-03
  • 2018-11-21
  • 2021-06-17
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2022-12-24
  • 2020-09-07
相关资源
最近更新 更多