I am using this :
http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/
tutorial to plot multiple line graphs by grouping the data from a data frame. Data looks like this:
> 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
And i am using following line to plot the graph:
ggplot(all, aes(x,y, colour=lab, group=lab)) + geom_errorbarh(aes(xmin=x-err, xmax=x+err)) + geom_line() + geom_point()
What I got is as follows:
I just want to fix remove the vertical lines. They should look lien two separate lines (each colour) and with their own horizontal error bars.
What should I correct in ggplot function? Thanks a lot!
Data
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"))
The problem is with the use of geom_line()
for a dataset where the same x in each group may map to multiple y values. geom_line
tries to connect data points continuously from lowest to highest x which is why you get the (almost) vertical lines in your graph. Use geom_path
instead. For an example, compare
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.