【问题标题】:Updating color fill effects and widths in a ggplot barplot在 ggplot 条形图中更新颜色填充效果和宽度
【发布时间】:2015-09-24 18:20:46
【问题描述】:

我之前问过一个关于在 R.Creating barplot with standard errors plotted in R 中绘制带有标准错误的条形图的问题。答案非常适合我的需要。不过我想问一下是否可以修改剧情的图形。

首先,如何修改 x 轴上每个因子的宽度,以使每个条形都相等?因此在下面的示例中,站点 B 会更宽,因此“之前”、“期间”和“之后”的每个条形的宽度相等。

其次,实际上我有比这三个更多的因素,但情节(令人恼火)不应该有颜色。我找不到任何关于在每个条上绘制图案的填充效果。因此,对于某些人来说,可能是带有黑色对角线的白色背景,例如在this 图片中。这在ggplot中可能吗?如果是这样,“之前”和“之后”的灰色和黑色填充,以及“期间”的某种图案将是理想的。

抱歉,我无法找到一种方法来一致地更改每个站点的宽度并更新填充效果。

这是一个示例数据集:

site <- c(rep("a", 8),
      rep("b", 11),
      rep("c", 8))
values <- as.data.frame(matrix(sample(0:10, 3*9, replace=TRUE), ncol=1))
when <- as.factor(c(rep(c("Before","After"),each = 4),
   rep("During", 3),
   rep("Before", 4),
   rep("After", 4),
   rep(c("Before","After"),each = 4)))
df <- data.frame(when,site,values)

这是我目前得到的输出:

library(plotrix) 
library(dplyr) 
library(ggplot2) 
grouped_df<-group_by(df,when,site)
summarised_df<-summarise_each(grouped_df,funs(mean=mean,std_error=std.error))
limits <- aes(ymax = mean + std_error, ymin=mean-std_error)
g<-ggplot(summarised_df,aes(site,mean,fill=when))
g<-g+geom_bar(stat = "identity",position = position_dodge())
g<-g+geom_errorbar(limits,width=0.25,position = position_dodge(width = 0.9))
g 

提前感谢您在修改这些图形方面提供的任何帮助。

【问题讨论】:

  • 列名已更新,它正在处理我的工作,但我已将变量名更改为“何时”以避免混淆。抱歉,我正在混合上一个示例中的代码,但针对这个问题对其进行了更新。

标签: r ggplot2


【解决方案1】:

有几种方法可以固定条形宽度。发生这种情况是因为您没有某些因子组合的任何数据,而 ggplot 会转储它们。

我认为最简单的方法是使用tidyr 中的complete,这样我们就有了所有因素的组合:

library(tidyr)
df <- df %>% complete(when, site, fill = list(0))

这将使所有不存在的因子组合为 0。

要修复颜色,我们可以使用 scale_fill_grey() 强制 ggplot 使用灰度。

完整代码如下:

library(tidyr)
library(plotrix) 
library(dplyr) 
library(ggplot2) 
grouped_df <- df %>% complete(when, site, fill = list(0)) %>% 
                     group_by(when, site) %>%
                     summarise_each(funs(mean = mean, std_error = std.error))
limits <- aes(ymax = mean + std_error, ymin = mean - std_error)
g <- ggplot(summarised_df, aes(site, mean, fill = when)) + 
            geom_bar(stat = "identity", position = position_dodge()) +
            geom_errorbar(limits, width = 0.25, position = position_dodge(width = 0.9)) +
            scale_fill_grey()
g 

【讨论】:

  • 这太棒了,谢谢! scale_fill_grey 看起来很棒。有没有办法按照这个来为每个因素对齐中心的栏?那么对于 a 和 c,将黑色/灰色边框直接放在每个字母的上方?
  • 这有点复杂,例子见this answer
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 2012-06-23
  • 2014-10-27
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2020-10-05
相关资源
最近更新 更多