【发布时间】:2016-11-14 19:07:34
【问题描述】:
我有一个如下所示的数据集:
Distance Mean SD Median VI Vegetation.Index Direction X X.1 X.2 X.3
1 10m 0.525 0.082 0.530 NDVI NDVI Whole Landscape NA NA NA NA
2 25m 0.517 0.085 0.523 NDVI NDVI Whole Landscape NA NA NA NA
3 50m 0.509 0.086 0.514 NDVI NDVI Whole Landscape NA NA NA NA
4 100m 0.494 0.090 0.497 NDVI NDVI Whole Landscape NA NA NA NA
5 10m 0.545 0.076 0.551 NDVIe NDVI East NA NA NA NA
6 25m 0.542 0.078 0.549 NDVIe NDVI East NA NA NA NA
> dput(droplevels(head(data)))
structure(list(Distance = structure(c(2L, 3L, 4L, 1L, 2L, 3L), .Label = c("100m",
"10m", "25m", "50m"), class = "factor"), Mean = c(0.525, 0.517,
0.509, 0.494, 0.545, 0.542), SD = c(0.082, 0.085, 0.086, 0.09,
0.076, 0.078), Median = c(0.53, 0.523, 0.514, 0.497, 0.551, 0.549
), VI = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("NDVI",
"NDVIe"), class = "factor"), Vegetation.Index = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = "NDVI", class = "factor"), Direction = structure(c(2L,
2L, 2L, 2L, 1L, 1L), .Label = c("East", "Whole Landscape"), class = "factor"),
X = c(NA, NA, NA, NA, NA, NA), X.1 = c(NA, NA, NA, NA, NA,
NA), X.2 = c(NA, NA, NA, NA, NA, NA), X.3 = c(NA, NA, NA,
NA, NA, NA)), .Names = c("Distance", "Mean", "SD", "Median",
"VI", "Vegetation.Index", "Direction", "X", "X.1", "X.2", "X.3"
), row.names = c(NA, 6L), class = "data.frame")
我想创建一个条形图分面网格,其中 x 轴上的分类变量(距离)、y 轴上的连续变量(植被指数)和每个条形图的两个条形图(平均和中值植被指数值) .条形图按“方向”和“植被指数”绘制刻面。
我已经用一种类型的度量(平均值)做到了这一点,如下图所示。
这是我现在的代码:
p = ggplot(data,aes(x=Distance,y=Mean,fill=Distance)) + geom_bar(stat =
'identity',position='dodge')+ facet_grid(Direction~Vegetation.Index)+
coord_cartesian(ylim=c(0.2,0.95)) + geom_errorbar(data = data,
aes(ymin=Mean-SD,ymax=Mean+SD),width=0.5)
但我还想要一个中位数栏。
Like this 但对于分面网格中的所有条形图。
我发现一些人想要做这个完全相同或类似的事情,并发现它们相当有用:
但是,我的数据看起来与他们的(我认为)非常不同,并且以任何方式更改它都会弄乱我已有的数据。据我了解,我必须使用 group='Mean+Median'。
【问题讨论】:
-
请发送reproducible example (click link for many tips)。不要共享数据图像。取而代之的是 (a) 使用看起来像您的数据的内置数据,(b) 共享短代码来模拟示例数据,或 (c) 使用
dput()可重复地共享您的数据(或者可能是您的数据的子集)。 -
另外,请更清楚您想要的输出。 “沿 x 轴的多个连续变量”没有多大意义,尤其是对于条形图。条形图的 x 轴是分类的,而不是连续的。您的意思是您想要沿 x 轴的度量类型,例如,一根表示中位数,一根表示平均值?
-
根据您的澄清,您的第一个问题链接似乎是几乎完全相同的重复。您需要将数据转换为长格式,其中有一个“measure”列,该列采用
"mean"或"median"的值和一个“value”列,取平均值或中位数的数值。您可以使用meltjust like in this answer 来做到这一点。 -
如果你能调整你对变量的想法,你将会有更好的运气与
ggplot一起工作。条形图中唯一的连续变量是 y 轴。您想要 y 轴上的连续 值,并且您想要 x 轴上的分类 measure(平均值或中位数)。如果您按照上面的要求可重复地共享您的数据,我将很乐意在答案中进行演示。 没有以可用方式共享的特定数据,我建议将您的问题作为您链接的问题的副本关闭。 -
非常感谢 Gregor 的 cmets 和建议!我发布了我的数据样本以及您建议的 dput() 。我希望这是可重现的。
标签: r ggplot2 geom-bar facet-grid