我想用 ggplot2 从一组数据(Y 中的 $ proteinN 和 X 中的 $ 方法)创建一个带有 SDM 的条形图,并在同一个条形图中(重叠)与图例中的一个指标包含另一组数据($ 特定)具有子弹条形图的形状。有点像这样(但第一组数据的竖线和 SDM)
(来源:yaksis.com)
这是我的代码和数据:
library(ggplot2)
data <- textConnection("proteinN, supp, method, specific
293, protnumb, insol, 46
259, protnumb, insol, 46
274, protnumb, insol, 46
359, protnumb, fasp, 49
373, protnumb, fasp, 49
388, protnumb, fasp, 49
373, protnumb, efasp, 62
384, protnumb, efasp, 62
382, protnumb, efasp, 62
")
data <- read.csv(data, h=T)
# create functions to get the lower and upper bounds of the error bars
stderr <- function(x){sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))}
lowsd <- function(x){return(mean(x)-stderr(x))}
highsd <- function(x){return(mean(x)+stderr(x))}
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00", "#CC79A7")
# create a ggplot
ggplot(data=data,aes(x=method, y=proteinN, fill=method))+
#Change _hue by _manualand remove c=45, l=80 if not desire#
scale_fill_manual(values=cbPalette)+
scale_fill_hue(c=45, l=80)+
# first layer is barplot with means
stat_summary(fun.y=mean, geom="bar", position="dodge", colour='black')+
# second layer overlays the error bars using the functions defined above
stat_summary(fun.y=mean, fun.ymin=lowsd, fun.ymax=highsd,
geom="errorbar", position="dodge",color = 'black', size=.5)
我确实尝试了一些东西,但没有任何效果,当我尝试添加第二组数据时,我总是得到这个错误输出:
错误:将变量映射到 y 并使用 stat="bin"。使用 stat="bin",它将尝试将 y 值设置为每组中的案例数。这可能会导致意外行为,并且不会在未来版本的 ggplot2 中被允许。如果您希望 y 表示案例计数,请使用 stat="bin" 并且不要将变量映射到 y。如果您希望 y 表示数据中的值,请使用 stat="identity"。有关示例,请参见 ?geom_bar。(已失效;最后在 0.9.2 版中使用)
错误:将变量映射到 y 并使用 stat="bin"。使用 stat="bin",它将尝试将 y 值设置为每组中的案例数。这可能会导致意外行为,并且不会在未来版本的 ggplot2 中被允许。如果您希望 y 表示案例计数,请使用 stat="bin" 并且不要将变量映射到 y。如果您希望 y 表示数据中的值,请使用 stat="identity"。有关示例,请参见 ?geom_bar。(已失效;最后在 0.9.2 版中使用)
这是我的尝试:
# create functions to get the lower and upper bounds of the error bars
stderr <- function(x){sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))}
lowsd <- function(x){return(mean(x)-stderr(x))}
highsd <- function(x){return(mean(x)+stderr(x))}
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73",
"#F0E442", "#0072B2", "#D55E00", "#CC79A7")
# create a ggplot
ggplot(data=data,aes(x=method, y=proteinN, fill=method, witdh=1))+
#Change _hue by _manualand remove c=45, l=80 if not desire#
scale_fill_manual(values=cbPalette)+
scale_fill_hue(c=45, l=80)+
#Second set of data#
geom_bar(aes(x=method, y=specific, fill="light green"), width=.4) +
# first layer is barplot with means
stat_summary(fun.y=mean, geom="bar", position="dodge", colour='black')+
# second layer overlays the error bars using the functions defined above
stat_summary(fun.y=mean, fun.ymin=lowsd, fun.ymax=highsd,
geom="errorbar", position="dodge",color = 'black', size=.5)