我之前曾问过一个关于在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
提前感谢您提供有关修改这些图形的任何帮助。
答案 0 :(得分:1)
有几种方法可以修复条宽。这种情况正在发生,因为您没有任何因子组合的数据,而ggplot会转储它们。
我认为最简单的方法是使用complete
中的tidyr
,以便我们拥有所有因素组合:
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