R 如何在ggplot中的垂直线之间添加水平线?
我有一个新的数据框,看起来像这样:R 如何在ggplot中的垂直线之间添加水平线?,r,ggplot2,line,R,Ggplot2,Line,我有一个新的数据框,看起来像这样: > new group date relamount average 1 1 2012-07-01 2.3498695 1.524178 2 1 2012-08-01 0.6984866 1.524178 3 2 2012-09-01 0.9079118 1.896867 4
> new
group date relamount average
1 1 2012-07-01 2.3498695 1.524178
2 1 2012-08-01 0.6984866 1.524178
3 2 2012-09-01 0.9079118 1.896867
4 2 2012-10-01 2.8858218 1.896867
5 3 2012-11-01 1.2406948 1.777372
6 3 2012-12-01 2.3140496 1.777372
7 4 2013-01-01 1.5904573 2.421820
8 4 2013-02-01 3.2531825 2.421820
9 5 2013-03-01 4.2962963 3.812503
10 5 2013-04-01 3.3287101 3.812503
11 6 2013-05-01 3.7698413 2.603770
12 6 2013-06-01 1.4376997 2.603770
13 7 2013-07-01 5.0687285 4.760392
14 7 2013-08-01 4.4520548 4.760392
15 8 2013-09-01 5.5063913 5.537038
16 8 2013-10-01 5.5676856 5.537038
17 9 2013-11-01 6.2686567 8.644863
18 9 2013-12-01 11.0210697 8.644863
我将数据(date
绘制在x轴上,relamount
绘制在y轴上),并将new$group
绘制为垂直线
我想要什么:
基于新$average
的垂直线之间的水平线…到目前为止,尝试使用geom_段
:
我知道我必须为geom_段
指定一个特定的起点和终点,但也许我也可以这样做?正如所料,它没有起作用
seq <- seq(2, nrow(df1), by=2) # points for vertical lines
ggplot(new, aes(date, relamount)) + # plot data
geom_line() +
geom_vline(xintercept = new$date[seq]) # create vertical lines
geom_segment(data = new, aes(x = new$group, # create horiz. lines
y = new$average,
xend = new$group +1,
yend = new$average))
序列库(ggplot2)
新建=读取。表格(文本=”
组日期平均值
1 1 2012-07-01 2.3498695 1.524178
2 1 2012-08-01 0.6984866 1.524178
3 2 2012-09-01 0.9079118 1.896867
4 2 2012-10-01 2.8858218 1.896867
5 3 2012-11-01 1.2406948 1.777372
6 3 2012-12-01 2.3140496 1.777372
7 4 2013-01-01 1.5904573 2.421820
8 4 2013-02-01 3.2531825 2.421820
9 5 2013-03-01 4.2962963 3.812503
10 5 2013-04-01 3.3287101 3.812503
11 6 2013-05-01 3.7698413 2.603770
12 6 2013-06-01 1.4376997 2.603770
13 7 2013-07-01 5.0687285 4.760392
14 7 2013-08-01 4.4520548 4.760392
15 8 2013-09-01 5.5063913 5.537038
16 8 2013-10-01 5.5676856 5.537038
17 9 2013-11-01 6.2686567 8.644863
18 9 2013-12-01 11.0210697 8.644863
“,页眉=T)
#获取垂直线的点
seq哪里是df1
?您使用的是什么软件包?哦,对不起,df1是我用来生成新数据帧的旧数据帧…我使用的唯一软件包是ggplot()。谢谢您的回答!只有一件事:我需要tidyverse包吗?我无法正确加载它,它会给出一个错误,说“package readxl没有名称空间”,并且在尝试加载readxl时,它也不工作。如果我在不加载tidyverse的情况下执行代码,我只会得到绘图中红线的结束点。它应该只适用于ggplot2
包。好的,现在可以工作了,我只是把日期改成了一个因素…谢谢!
library(ggplot2)
new = read.table(text = "
group date relamount average
1 1 2012-07-01 2.3498695 1.524178
2 1 2012-08-01 0.6984866 1.524178
3 2 2012-09-01 0.9079118 1.896867
4 2 2012-10-01 2.8858218 1.896867
5 3 2012-11-01 1.2406948 1.777372
6 3 2012-12-01 2.3140496 1.777372
7 4 2013-01-01 1.5904573 2.421820
8 4 2013-02-01 3.2531825 2.421820
9 5 2013-03-01 4.2962963 3.812503
10 5 2013-04-01 3.3287101 3.812503
11 6 2013-05-01 3.7698413 2.603770
12 6 2013-06-01 1.4376997 2.603770
13 7 2013-07-01 5.0687285 4.760392
14 7 2013-08-01 4.4520548 4.760392
15 8 2013-09-01 5.5063913 5.537038
16 8 2013-10-01 5.5676856 5.537038
17 9 2013-11-01 6.2686567 8.644863
18 9 2013-12-01 11.0210697 8.644863
", header=T)
# get points for vertical lines
seq <- seq(2, nrow(new), by=2)
ggplot() +
geom_line(data=new, aes(date, relamount, group=1)) + # plot line of data points
geom_vline(xintercept = as.numeric(new$date[seq])) + # plot vertical lines
geom_segment(data=new[seq,], aes(x=as.numeric(date)-2, # plot horizontal lines (segments)
xend=as.numeric(date),
y=average,
yend=average), col="red") +
scale_x_discrete(breaks = new$date[seq], labels = new$date[seq]) # adjust x axis labels