ggplot为每个组绘制特定的边界?

时间:2017-12-15 23:23:24

标签: r ggplot2

嗨假设我有这样的数据帧。

id     gene    value      upper    lower
AE5    ATM 4.046142  0.5440875 5.941381
AE5    ATR 3.463361  1.5046214 4.867110
AE5  BRCA1 4.228049 -0.7397759 5.791135
AE5  CDK12 4.488001  1.6029831 6.106177
AE5 CDKN1A 4.837943  2.1936042 9.880194
AE6    ATM 3.629939  0.5440875 5.941381
AE6    ATR 3.121015  1.5046214 4.867110
AE6  BRCA1 4.368070 -0.7397759 5.791135
AE6  CDK12 4.759688  1.6029831 6.106177
AE6 CDKN1A 5.757290  2.1936042 9.880194

我可以用ggplot

绘制这个
ggplot(final , aes(y=gene, x=value, col=id)) +
  geom_point(size=5)

这让我得到了这个情节。 enter image description here

然而,我想要的是根据数据帧的上下列为每个组设置边界线。因此,例如ATM将具有在.54和5.9上交叉的小垂直线。通过这种方式,我可以更好地想象每个样本落地的位置。 提前谢谢!

1 个答案:

答案 0 :(得分:5)

您可以使用geom_errorbarh包中的ggstance。要获得单个范围行而不管id(因为id的两个级别的范围相同),请将颜色美学移至geom_point,以便它仅适用于点和不是错误栏。我们还在geom_errorbarh中设置了数据,以便只选择一个id,以避免将相同的误差线多次绘制在彼此之上。

library(ggplot2)
library(ggstance)

ggplot(final , aes(y=gene, x=value)) +
  geom_errorbarh(data=final[final$id=="AE5",], aes(xmin=lower, xmax=upper),
                 width=0.2, colour="grey50") +
  geom_point(size=5, aes(col=id)) +
  theme_bw()

enter image description here

要获得垂直线,您可以使用geom_point作为点标记对"|"进行两次调用(尽管我认为使用水平线来引导眼睛更容易阅读图形)。

ggplot(final , aes(y=gene, x=value)) +
  geom_point(aes(x=upper), shape="|", size=5) +
  geom_point(aes(x=lower), shape="|", size=5) +
  geom_point(size=5, aes(col=id)) +
  theme_bw()

enter image description here