这样的柱状图有没有包可以让我这种学生物的人较为简单的做出来啊,如果要很复杂的话我可能用别的软件更快了[s:19]

个人多用ggplot2,觉得「图层叠加」的概念用作此图比较合适,很快就能模仿出来

这个页面上的例子里有并在一起的条状图的画法

http://www.cookbook-r.com/Graphs/Bar_and_line_graphs_(ggplot2)/

这个页面上有误差条的画法

http://docs.ggplot2.org/0.9.3.1/geom_errorbar.html

样子:

<image ref="http://imgur.com/czeRFzJ"></image>

甚至可以做出四张小图片的效果:

code

<br />
> data1 <- data.frame(x=c(0,0,5,5,10,10,20,20), type1=c(0,1,0,1,0,1,0,1), val=c(0,3,15,25,27,27,20,34))<br />
> head(data1)<br />
   x type1 val<br />
1  0     0   0<br />
2  0     1   3<br />
3  5     0  15<br />
4  5     1  25<br />
5 10     0  27<br />
6 10     1  27<br />
> data1$x = as.factor(data1$x)<br />
> data1$type1 = as.factor(data1$type1)<br />
> data2<-data.frame(x=c(0,5,10,20), val=c(0,60,70,90))<br />
> data2$x = as.factor(data2$x)<br />
> ggplot() + geom_bar(data=data2, aes(x=x, y=val), stat="identity", width=0.6, fill="white", colour="black") + geom_bar(data=data1, aes(x=x, y=val, fill=type1), position="dodge", stat="identity", colour="black") + geom_errorbar(data=data1, aes(x=x, ymin=val-2, ymax=val+2, fill=type1, width=0.7), position="dodge") + scale_fill_discrete(guide=guide_legend(title=" "), breaks=c(0, 1), labels=c("NT", "eEF2K siRNA")) + ggtitle("Sample graph") + xlab("MK2206 umol/L") + ylab("Percent of cells with\nactivated caspases(%)")</p>
<p># 以下为facet用法(只是将数据复制了三遍)<br />
> data11=data1<br />
> data11$val=data11$val+3<br />
> data12=data1<br />
> data12$val=data12$val/2<br />
> data13=data1<br />
> data13$val=data13$val+5<br />
> data1=rbind(data1,data11,data12,data13)<br />
> data1$typ=c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4)</p>
<p>> data21=data2<br />
> data2=rbind(data2,data21,data21,data21)<br />
> data2$typ=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)</p>
<p>> data1$typ=as.factor(paste("Type",data1$typ))<br />
> data2$typ=as.factor(paste("Type",data2$typ))</p>
<p>> ggplot() + geom_bar(data=data2, aes(x=x, y=val), stat="identity", width=0.6, fill="white", colour="black") + geom_bar(data=data1, aes(x=x, y=val, fill=type1), position="dodge", stat="identity", colour="black") + geom_errorbar(data=data1, aes(x=x, ymin=val-2, ymax=val+2, fill=type1, width=0.7), position="dodge") + scale_fill_discrete(guide=guide_legend(title=" "), breaks=c(0, 1), labels=c("NT", "eEF2K siRNA")) + ggtitle("Sample graph") + xlab("MK2206 umol/L") + ylab("Percent of cells with\nactivated caspases(%)") + facet_wrap(~typ, ncol=2)</p>
<p>
</p>

回复 第3楼 的 cs900601:非常感谢,但是没有显著性的*号啊,而且样子总觉得怪怪的,似乎是用白色柱子模拟的连线,和示例差别比较大,可能还需要很多调整吧~估计给老板看还是会被枪毙掉!

这种特定的应用可能还是得自己动手写函数吧,而且我觉得ggplot2不太适合这种需要画点/线的应用,还是基础图形系统比较管用,points()/segments()等等。

从图形的角度来说,条形图加误差条是毁灭数据的最佳手段,不过既然是老板要的,那什么原则都不管用了。

回复 第5楼 的 谢益辉:咦,“条形图加误差条是毁灭数据的最佳手段”,什么意思啊?这样的方式不对吗?

回复 第6楼 的 scauhe:

作为一个被这种图折磨过的筒子说点个人观点:

条形图一般是用来对比的,但误差线不一定是描述差异的(多数描述测量误差或这一组数据的变动范围),可是你挡不住有人用误差线来作对比(所以就得另外用星号表示差异的显著性),把描述和对比两个目的捏到一张图上是一套很诡异但又是很常见的组合。

不过生物领域的论文铺天盖地的条形图倒也是不争的事实。

回复 第3楼 的 cs900601:

[图层叠加]--ggplot2的精髓[s:17]

回复 第5楼 的 谢益辉:大神来指教了!!!可是也说要自己动手写,没有现成的包,觉得好伤心[s:14]

暂时先用破解GraphPad Prism救急吧,回头在看看能不能自己动手解决了~

回复 第7楼 的 yufree:多谢指教,虽然还是有些没看懂

回复 第11楼 的 doctorjxd:

其实,用打印机也能实现这个效果,黑白灰度[s:12]

回复 第4楼 的 kaji331:

看了11楼的例子才知道原来那个星号下面的是连线,不是一根白柱子……(所以觉得这个图有点奇怪)

从来不知道有“显著性”这个概念,以至于理解不对

受教了

回复 第11楼 的 doctorjxd:非常感谢,似乎ggplot2画这个还蛮方便的嘛~我参考了一下stack overflow的范例,自己修改了一下,已经完全符合需要,算实现了开头图片的效果

https://github.com/kaji331/R_scripts/blob/master/%E8%84%9A%E6%9C%AC/%E5%B8%A6%E8%BF%9E%E6%8E%A5%E7%BA%BF%E5%92%8C%E6%98%9F%E5%8F%B7%E7%9A%84%E6%9F%B1%E7%8A%B6%E5%9B%BE/%E5%B8%A6%E8%BF%9E%E6%8E%A5%E7%BA%BF%E5%92%8C%E6%98%9F%E5%8F%B7%E7%9A%84%E6%9F%B1%E7%8A%B6%E5%9B%BE.md