加星标的条形图

时间:2013-01-04 21:37:55

标签: r plot bar-chart

我试图制作一个简单的条形图,首先区分两组,基于性别,男性或女性,然后在统计数据后,对于每个样本/个体,有一个P值,重要与否。我知道如何对男性和女性之间的条形码进行颜色编码,但我希望R自动在每个样本/ P值小于0.05的个体上方放置一颗星。

我目前只使用简单的barplot(x)函数。

我试图四处寻找答案,但还没有找到任何答案。

以下是我的示例数据集的链接:

[url = http://www.divshare.com/download/22797284-187] DivShare文件 - test.csv [/ url]

我想把时间放在y轴上,用颜色代码区分男性和女性,然后对于任何一组中具有1个重要性的个体,将一颗星放在相应的条形图上方。 / p>

提前感谢您的任何建议。

1 个答案:

答案 0 :(得分:5)

我把你的数据搞砸了一下,使它更友好:

## dput(read.csv("barcharttest.csv"))
x <- structure(list(ID = 1:7,
  sex = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 2L), .Label = c("female", "male"),
   class = "factor"),
  val = c(309L, 192L, 384L, 27L, 28L, 245L, 183L),
  stat = structure(c(1L, 2L, 2L, 1L, 2L, 1L, 1L), .Label = c("NS", "sig"),
    class = "factor")),
               .Names = c("ID", "sex", "val", "stat"),
               class = "data.frame", row.names = c(NA, -7L))

看起来像这样:

  ID    sex val stat
1  1 female 309   NS
2  2 female 192  sig
3  3 female 384  sig
4  4   male  27   NS
5  5   male  28  sig
6  6 female 245   NS
7  7   male 183   NS

现在情节:

sexcols <- c("pink","blue")
## png("barplot.png")  ## for output graph
par(las=1,bty="l")  ## I prefer these settings; see ?par
b <- with(x,barplot(val,col=sexcols[sex])) ## b saves x coords of bars
legend("topright",levels(x$sex),fill=sexcols,bty="n")
## use xpd=NA to make sure that star on tallest bar doesn't get clipped;
##   pos=3 puts the text above the (x,y) location specified
text(b,x$val,ifelse(x$stat=="sig","*",""),pos=3,cex=2,xpd=NA)
axis(side=1,at=b,label=x$ID)
## dev.off()

我还应在相关轴上添加“时间”和“ID”标签。

enter image description here