在ggplot条形图中更新颜色填充效果和宽度

时间:2015-09-24 18:20:47

标签: r ggplot2

我之前曾问过一个关于在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 

提前感谢您提供有关修改这些图形的任何帮助。

1 个答案:

答案 0 :(得分:1)

有几种方法可以修复条宽。这种情况正在发生,因为您没有任何因子组合的数据,而ggplot会转储它们。

我认为最简单的方法是使用complete中的tidyr,以便我们拥有所有因素组合:

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

这将使所有非现有因子组合为0。

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

enter image description here 这是完整的代码:

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