尝试绘制一个类似于使用ggplot2在出版物中找到的图形的图形

时间:2017-04-11 22:01:59

标签: r ggplot2

我正在尝试生成一个看起来像这个图的第三个/底部的图形(其中有法语/撒丁岛语作为Y而其他作为X) http://www.nature.com/nature/journal/v514/n7523/fig_tab/nature13810_F3.html

我知道我需要使用ggplot2来生成这些,但我不知道如何。我想知道是否有人可以提供帮助

这是我的基本代码

tbl$RegionX2 <- factor(tbl$RegionX, as.character(tbl$RegionX))
plot <- ggplot(tbl, aes(y = RegionX2, 
            x = D, xmin = D - 2*SE, xmax = D + 2*SE, label = RegionX2, colour = RegionY)) + 
    geom_point(colour = "black") + 
  geom_text(hjust = 1.2) + 
  theme_classic() + 
  theme(axis.title = element_blank(),
        axis.ticks = element_blank(), 
        axis.text.y = element_blank(), 
        legend.position = "none") + 
  geom_errorbarh(height = 0)
ggsave(plot=plot,height=7,width=7, filename="D.pdf", useDingbats=FALSE)

它的绘图类似于this

但我不知道如何保持区域A和B在彼此之上堆叠,以获得x = 0线,或者获得X和Y标签,因为它们在该图中。有人可以帮忙吗?

此外,我的数据格式如下:

RegionX RegionY D   SE
WestAfrica  A   -0.027  3.14E-03
EastAfrica  A   -0.0234 2.82E-03
SouthAsia   A   0.0048  1.68E-03
Caucasus    A   0.0052  1.17E-03
EastAsia    A   0.0067  3.58E-03
WestAfrica  B   -0.028  3.14E-03
EastAfrica  B   -0.0244 2.82E-03
SouthAsia   B   0.0038  1.68E-03
Caucasus    B   0.0042  1.17E-03
EastAsia    B   0.0057  3.58E-03

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你打算实现什么,但是从链接中看到你的预期数字之后,这是我能够产生的东西。希望这有用。

首先,我使用RegionY和RegionX创建了一个新列,以便可以在Y轴上放置唯一因子。这是如何完成的。 tbl是数据集中的数据框。

tbl$X <- paste0(tbl$RegionY,tbl$RegionX)

<强>更新

tbl$X <- as.factor(tbl$X)

然后是阴谋 [更新]

  ggplot(tbl, aes(y = X,x = D,fill=RegionY)) + 
  geom_point(shape=21) + 
  scale_y_discrete(limits=rev(levels(tbl$X)),label=rev(substring(tbl$X,1,1))) + 
  geom_vline(xintercept = 0) +
  geom_text(aes(label=tbl$RegionX,colour=RegionY),x=0.02) + 
  scale_x_continuous(limits = c(-0.04,0.025)) + 
  geom_errorbarh(aes(xmin = D - 2*SE, xmax = D + 2*SE,colour=RegionY),height=0.4) +
  theme_classic() + 
  theme(axis.title = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank(),
        legend.position = "none")

下面的结果图

enter image description here

如果您对此有任何疑问,请在评论中告诉我,以便我可以更新答案。