【问题标题】:Adding vertical lines in line graph where y values are maximum?在y值最大的折线图中添加垂直线?
【发布时间】:2015-10-14 05:17:42
【问题描述】:

我有一个数据框,其中包含“时间”、0-2000 x 5 的间隔(x 轴)和“步数”,范围为 0-200。我正在使用 qplot,我想在最大步数处绘制 geom_vline。它正在绘制一条线,但处于一个我无法弄清楚的低点。代码如下所示:

这是一个相当糟糕的游戏,但它仍然很适合。

set.seed(2)
a<-seq(from=0,to=1000,by=5)
b<-sample(seq(from = 0, to = 100), size = 201, replace = TRUE)
df<-data.frame(a,b)
max(b)

qplot(a,b,df, geom='line')+
    geom_vline(xintercept=max(df$b),color='red')

您可以看到max(b)=99,但geom_vline 没有绘制在那里。

【问题讨论】:

  • @ Pascal 也许,但这些更精细的点目前超出了我的范围......我只是想绘制一个折线图,以及一条与 x 轴相交的垂直线,其中 y价值是最大的。如果这涉及到废弃这段代码,那就这样吧。
  • 不干净,但做你想做的事:geom_vline(xintercept=a[b == max(b)],color='red').
  • @Pascal 这不是最精简的,但可以解决问题,我认为您在上一篇文章中的评论澄清了我最初的方法不起作用的原因。明天我将尝试 ggplot 而不是 qplot。谢谢!

标签: r plot ggplot2 max linegraph


【解决方案1】:

代码绘制了x 等于99 的垂直线,并且在此位置y 不是最大值。

geom_vline 只能根据它与x 轴(xintercept 参数)相交的位置来定义,正确的方法是映射哪个x 值带有最大y

ggplot(data=df,aes(x=a,y=b)) + 
  xlab("Time") + scale_x_continuous(limits=c(0,1000),breaks=seq(0,1000,50)) +
  ylab("Number os steps") + scale_y_continuous(limits=c(0,100),breaks=seq(0,100,50)) +
  geom_line(size=1.2,color='grey40') +
  geom_vline(xintercept=a[b == max(b)],color='red') + #as suggested by user3710546
  geom_hline(yintercept=max(b),color='blue',linetype=2) +
  theme_bw() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多