我的数据如下:
> head(GEE)
trait beta se p analysis signif
1 trait1 0.078 0.01 9.0e-13 group1 1
2 trait2 0.076 0.01 1.7e-11 group1 1
3 trait3 0.063 0.01 1.8e-08 group1 1
4 trait4 0.013 0.01 .06 group1 0
5 trait5 0.018 0.01 .54 group1 0
6 trait6 -0.014 0.01 .64 group1 0我试图用gglot2绘制一个点和错误条的图,这些点和错误条是在第二列名为beta的列上排序的。下面的代码运行得很好:
ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) +
geom_point(aes(color=analysis)) +
geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2,
position=position_dodge(.9)) +
theme_light() +
coord_flip() 但是,我想为重要点添加星号,为此我有一段额外的代码,它成功地将星号添加到重要点:
geom_point(data = GEE[GEE$signif == 1, ],
color="red",
shape = "*",
size=12,
show.legend = F) +当将它添加到上面的绘图命令中时,完整的命令如下所示:
ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) +
geom_point(data = GEE[GEE$signif == 1, ],
color="red",
shape = "*",
size=12,
show.legend = F) +
geom_point(aes(color=analysis)) +
geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2,
position=position_dodge(.9)) +
theme_light() +
coord_flip() 然而,添加星号后的代码的问题是,它以某种方式取消了我用“x=reorder(特质,beta)”指定的重新排序。现在的秩序完全不同了。为什么?:“
UPDATE:@Lamia在评论中指出,这个问题不能用本文中提供的数据重新产生。本文中的数据只显示来自同一组的顶部行(group1,参见列"analysis"),但在我的完整数据集中有三个组。ggplot2命令用不同的颜色绘制这三个不同的组。只有当我在完整的数据集中阅读所有三个组时,我才能重现这个问题,所以看起来这可能与这个问题有关。
UPDATE 2:正如@Lamia所建议的(对不起,首先应该这么做),我在下面添加了数据,这些数据再现了问题:
trait,beta,se,p,analysis,signif
trait1,0.078,0.01,9.00E-13,group1,1
trait2,0.076,0.01,1.70E-11,group1,1
trait3,-0.032,0.01,0.004,group1,0
trait4,0.026,0.01,0.024,group1,0
trait5,0.023,0.01,0.037,group1,0
trait1,0.042,0.01,4.50E-04,group2,1
trait2,0.04,0.01,0.002,group2,1
trait3,0.03,0.01,0.025,group2,0
trait4,0.025,0.01,0.078,group2,0
trait5,0.015,0.01,0.294,group2,0
trait1,0.02,0.01,0.078,group3,0
trait2,0.03,0.01,0.078,group3,0
trait3,0.043,0.01,1.90E-04,group3,0
trait4,0.043,0.01,2.40E-04,group3,1
trait5,0.029,0.01,0.013,group3,0发布于 2017-10-20 09:17:26
几点建议供考虑..。
ggplot(). 1:在将数据帧输入到之前,先对其进行争论因为属性是一个分类变量,所以可以显式地将其级别指定为一个因素。
library(dplyr)
g2 <- GEE %>%
mutate(trait = factor(trait, levels = trait[order(beta[analysis == "group1"])]))
> levels(g2$trait)
[1] "trait3" "trait5" "trait4" "trait2" "trait1"根据第一组的β值,我们可以直观地验证性状的顺序是3-5-4-2-1:
ggplot(GEE, aes(x = beta, y = analysis, label = trait)) + geom_label()

2:在可能的情况下,只对ggplot()使用一个数据源,这可以确保所有美观的映射链接都是一致的,而且维护起来也更简单。
ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis,
ymin = beta - 2*se, ymax = beta + 2*se)) +
geom_point(aes(alpha = signif), # hide non-significant points while using the same dataset
color = "red") + # override 'color = analysis' in ggplot()
geom_point() +
geom_errorbar() +
scale_alpha_identity()3:对所有相关的geoms重用相同的position_dodge()。再次说明,如果您希望下次更改道奇宽度,则维护起来更简单。
pd <- position_dodge(0.9)
ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis,
ymin = beta - 2*se, ymax = beta + 2*se)) +
geom_point(aes(alpha = signif),
color = "red", shape = "*", size = 12, show.legend = F,
position = pd) +
geom_point(position = pd) +
geom_errorbar(width=.2, position = pd) +
scale_alpha_identity() +
theme_light() +
coord_flip() 结果(性状按3-5-4-2-1排序,自下而上):

数据:
GEE <- read.csv(
text =
"trait,beta,se,p,analysis,signif
trait1,0.078,0.01,9.00E-13,group1,1
trait2,0.076,0.01,1.70E-11,group1,1
trait3,-0.032,0.01,0.004,group1,0
trait4,0.026,0.01,0.024,group1,0
trait5,0.023,0.01,0.037,group1,0
trait1,0.042,0.01,4.50E-04,group2,1
trait2,0.04,0.01,0.002,group2,1
trait3,0.03,0.01,0.025,group2,0
trait4,0.025,0.01,0.078,group2,0
trait5,0.015,0.01,0.294,group2,0
trait1,0.02,0.01,0.078,group3,0
trait2,0.03,0.01,0.078,group3,0
trait3,0.043,0.01,1.90E-04,group3,0
trait4,0.043,0.01,2.40E-04,group3,1
trait5,0.029,0.01,0.013,group3,0")
> levels(GEE$trait) # default order is 1-2-3-4-5
[1] "trait1" "trait2" "trait3" "trait4" "trait5"发布于 2017-10-19 23:22:19
试试这个:
library(tidyverse)
GEE <- tribble(
~trait, ~beta, ~se, ~p, ~analysis, ~signif,
"trait1", 0.078, 0.01, 9.0e-13, "group1", 1,
"trait2", 0.076, 0.01, 1.7e-11, "group1", 1,
"trait3", 0.063, 0.01, 1.8e-08, "group1", 1,
"trait4", 0.013, 0.01, .06, "group1", 0,
"trait5", 0.018, 0.01, .54, "group1", 0,
"trait6", -0.014, 0.01, .64, "group1", 0
)
GEE %>%
ggplot(aes(y = beta, x = reorder(trait, beta)), group = analysis) +
geom_point(aes(color = analysis)) +
geom_errorbar(aes(ymin = beta - 2 * se,
ymax = beta + 2 * se,
color = analysis,
width = 0.2),
position = position_dodge(0.9)) +
geom_point(data = GEE[GEE$signif == 1, ],
color="red",
shape = "*",
size=12,
show.legend = F) +
theme_light() +
coord_flip()它改变了这个情节:

让它看起来像这样:

这就是你要找的吗?
https://stackoverflow.com/questions/46839794
复制相似问题