Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在ggplot中的垂直线之间添加水平线?_R_Ggplot2_Line - Fatal编程技术网

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