如何使用ggplot2 [在R]中使用数据框中的水平误差线绘制多条线?

时间:2016-04-14 20:55:19

标签: r plot ggplot2

我正在使用它:

http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/

通过对数据框中的数据进行分组来绘制多个折线图的教程。数据如下所示:

> all
     y         x       err lab
1   -41.93 5.7696373 0.9120865  he
2   -41.68 5.6345447 0.9100468  he
3   -41.43 5.4954702 0.9068282  he
4   -41.18 5.3588358 0.9054044  he
...
471  15.72 4.3701857 0.5170079  te
472  15.97 4.5128508 0.5262806  te
473  16.22 4.6592179 0.5320847  te
474  16.47 4.8052565 0.5397946  te
475  16.72 4.9518592 0.5465613  te
476  16.97 5.1057900 0.5504546  te
477  17.22 5.2503157 0.5602737  te
478  17.47 5.4000783 0.5711784  te
479  17.72 5.5506885 0.5830945  te
480  17.97 5.7085180 0.6109026  te

我正在使用以下行绘制图表:

ggplot(all, aes(x,y, colour=lab, group=lab)) + geom_errorbarh(aes(xmin=x-err, xmax=x+err)) + geom_line() + geom_point()

我得到的内容如下:

enter image description here

我只想修复删除垂直线条。它们应该看起来有两条独立的线(每种颜色)和它们自己的水平误差条。

我应该在ggplot函数中纠正什么? 非常感谢!

数据

all <- structure(list(y = c(-41.93, -41.68, -41.43, -41.18, 15.72, 15.97, 
16.22, 16.47, 16.72, 16.97, 17.22, 17.47, 17.72, 17.97), x = c(5.7696373, 
5.6345447, 5.4954702, 5.3588358, 4.3701857, 4.5128508, 4.6592179, 
4.8052565, 4.9518592, 5.10579, 5.2503157, 5.4000783, 5.5506885, 
5.708518), err = c(0.9120865, 0.9100468, 0.9068282, 0.9054044, 
0.5170079, 0.5262806, 0.5320847, 0.5397946, 0.5465613, 0.5504546, 
0.5602737, 0.5711784, 0.5830945, 0.6109026), lab = structure(c(1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("he", 
"te"), class = "factor")), .Names = c("y", "x", "err", "lab"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "471", "472", "473", "474", "475", "476", "477", 
"478", "479", "480"))

1 个答案:

答案 0 :(得分:0)

问题在于对数据集使用geom_line(),其中每个组中的相同x可以映射到多个y值。 geom_line尝试连续从最低x到最高x连接数据点,这就是你在图中得到(几乎)垂直线的原因。请改用geom_path。例如,比较

df <- data.frame(
  y = -5:5,
  x = (-5:5)^2
) 

# geom_line
ggplot(df) + 
  aes(x, y) + 
  geom_line()


# geom_path
ggplot(df) + 
  aes(x, y) + 
  geom_path()