首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ggplot标记垂直线

使用ggplot标记垂直线
EN

Stack Overflow用户
提问于 2020-01-30 03:15:06
回答 3查看 160关注 0票数 1

我有一个数据集看起来像这样,

代码语言:javascript
运行
复制
df<-structure(list(Year = c(1985L, 1986L, 1987L, 1988L, 1989L, 1990L, 
                        1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L,2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 1985L, 1986L, 1987L, 1988L, 1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L,  1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L,                         2008L, 2009L, 2010L, 2011L, 2012L, 1985L, 1986L, 1987L, 1988L,  1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 1985L, 1986L, 1987L, 1988L, 1989L, 1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L,  2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L),
               varclass = structure(c(5L,5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L,  7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L),
                                    .Label = c("r_mean_dp_C_EU_PTA", "r_mean_dp_C_eu_esr_sum", "r_mean_TS_dp_C_EU_PTA", "r_mean_TS_dp_C_eu_esr_sum", "r_mean_dp_C_US_PTA", "r_mean_dp_C_us_esr_sum", "r_mean_TS_dp_C_US_PTA", "r_mean_TS_dp_C_us_esr_sum"), class = "factor"), 
               score = c(0, 0.0243131684738152, 0.0295348762350131, 1.24572619158458, 1.20624633452509, 1.57418568231032, 1.45479246796848, 2.38700784566208, 2.62865525326503,  2.26401361870534, 2.67319203680329, 2.64440548764366, 3.10459526464658, 3.05231530072328, 3.32660416229216, 4.14909239351474, 3.76404440984403, 
                3.79766644256544, 4.55279786294561, 5.57506946922008, 6.83412605593388,   8.07241989452914, 9.10370786838265, 9.51564633960853, 8.64357423479438, 9.10723202296861, 10, 9.06442082870898, 0, 0.00309681975626394,  0.00376191973176611, 0.31456863316694, 0.307467479949235, 0.393381408917437,  0.369438522116308, 2.72595849026258, 3.02912715393088, 2.68234740512793,  3.04191351961057, 3.00285602012791, 3.53353155000059, 3.56064849955087, 
                3.8582842780802, 4.41758875010321, 3.86352795800086, 3.87742698588076, 4.75555995695473, 5.25498063194254, 6.83035779491644, 7.94400595857329, 8.90724897806749, 9.63957864779812, 8.45971275397907, 8.90268516213906,   10, 8.67387866657026, 0, 0.0971144336795407, 0.095032354957329,  0.324563912754777, 0.309037243530711, 0.445594208900048, 0.408585357361577,  0.984622633943152, 0.885285042777509, 0.854437578777773, 0.899346941764503,   0.713835758098677, 0.923205921767153, 0.885795460138979, 0.907706909901698,   1.26691097637723, 1.38531675474906, 1.46801357426345, 2.40528143410555,   6.11127334356639, 6.87984183345601, 8.58685934192075, 9.81477059919623,  10, 8.91400803949761, 9.13396140936897, 8.91190146236915, 9.31841494169555, 
                 0, 0.0131639497352947, 0.012881722072468, 0.0747427246588618,  0.074583753038409, 0.101240906800678, 0.0942176097616221, 1.01715224261827,  0.955422044148621, 0.930088131161646, 0.983316358580305, 0.814500687241286, 1.04433781820825, 1.00311623335088, 1.03043794235494, 1.25737311039187, 1.24242809142003, 1.30488643766672, 2.07282625012893, 5.9283639095883,   6.84735189008267, 8.44992964327563, 9.67266470058815, 10, 8.83518011553472, 
 9.08678510978114, 8.89558771137843, 9.22647697054944)), row.names = c(NA,-112L), 
class = "data.frame")

我和我正在创建以下图:

代码语言:javascript
运行
复制
plot<- df %>%  
      ggplot(aes(x= Year, y= score, color = varclass)) +
           geom_line() + 
           geom_vline(xintercept = c(1992, 2004), linetype="dotted", size = 0.3)

问题是我不能给垂直线加上我想要的标签。我想特别指出的是,1992年的路线被称为“北美自由贸易协定”。而2004年行为“泛美自由贸易协定”。这些都是影响我的系列的重要事件。理想情况下,标签应该出现在"varclass“标签的右侧。

我尝试做了以下几件事

代码语言:javascript
运行
复制
events<-structure(list(year = c(1992L, 2004L), 
                  event = structure(1:2, .Names = c("a","b"), 
                  .Label = c("NAFTA", "PAFTA"), 
                  class = "factor")), 
                  row.names = c("a", "b"), 
                  class = "data.frame")

plot<- df %>%  
       ggplot(aes(x= Year, y= score, color = varclass)) +
          geom_line() + 
          geom_vline(aes(xintercept=year, color=events),data=tst) 

然而,这个图例变得与十字架混淆。

有没有关于如何拥有一个干净的图形的想法,带有黑色的垂直事件线和清晰的标签?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-30 03:35:36

也许这会有所帮助,您可以将geom_text添加到您的第一个图中

代码语言:javascript
运行
复制
plot + 
geom_text(aes(x=2004, label="\nPAFTA", y=9), colour="red", angle=90) +
geom_text(aes(x=1992, label="\nNAFTA", y=9), colour="red", angle=90)

票数 4
EN

Stack Overflow用户

发布于 2020-01-30 03:22:47

这并没有直接回答您的问题,但我认为作为替代方案,您可以将标签作为图上的注释:

代码语言:javascript
运行
复制
df%>%  ggplot(aes(x= Year, y= score, color = varclass)) +geom_line() + 
  geom_vline(xintercept = 1992, linetype="dotted", size = 0.3) +   geom_vline(xintercept = 2004, linetype="dotted", size = 0.3) +
  annotate("text", x = 1994, y = 10.5, label = "NAFTA") +
  annotate("text", x = 2006, y = 10.5, label = "PAFTA")
票数 1
EN

Stack Overflow用户

发布于 2020-01-30 03:37:02

您可以将geom_text与新的data参数设置一起使用。但是您还必须设置inherit.aes = FALSE,这样以前的data = df就不会被geom使用。

此外,我还将绘图的名称从plot (基本R函数的名称)更改为g

代码语言:javascript
运行
复制
g <- ggplot(df, aes(x= Year, y= score, color = varclass)) +
  geom_line() + 
  geom_vline(xintercept = c(1992, 2004), linetype="dotted", size = 0.3) 

g + geom_text(data = events, 
              mapping = aes(x = year, y = c(10.5, 10.5), label = event),
              inherit.aes = FALSE,
              hjust = 1)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59974066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档