【问题标题】:How to plot multiple lines with horizontal error bars from a dataframes using ggplot2 [in R]?如何使用 ggplot2 [in R] 从数据框中绘制多条带有水平误差线的线?
【发布时间】:2016-08-06 15:21:30
【问题描述】:

我正在使用这个:

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()

我得到的如下:

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

我应该在 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"))

【问题讨论】:

  • 只是不要使用geom_line ?

标签: r plot ggplot2


【解决方案1】:

问题在于将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()

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 2014-06-18
    • 2021-09-14
    • 2012-06-16
    • 1970-01-01
    • 2011-12-16
    • 2022-01-21
    相关资源
    最近更新 更多