如何在ggplot中设置不同长度的geom_vline使其止于数据点?
解决方法:用geom_segment替代geom_vline实现自定义长度的垂直线
geom_vline本身是绘制贯穿整个y轴范围的垂直线,无法直接设置长度。要实现垂直线从y轴底部(0)止于对应数据点的效果,推荐使用geom_segment,它可以精确指定线段的起始和结束坐标。
修改后的代码如下:
library(tidyverse) library(lubridate) library(scales) dates <- c("2021-01-01", "2021-02-01", "2021-03-01") values <- c(1,2,3) df <- data.frame(dates, values) df <- df %>% mutate(dates = date(dates)) df %>% ggplot(aes(dates, values)) + geom_point() + theme_minimal() + scale_y_continuous(limits = c(0,3)) + theme( panel.grid.minor.y = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank() ) + # 用geom_segment绘制从y=0到对应数据点的垂直线 geom_segment(aes(x = dates, xend = dates, y = 0, yend = values))
关键说明:
geom_segment的参数中,x和xend设为同一个日期值,保证线段垂直;y设为0(对应y轴下限),yend设为数据点的values值,这样线段就会从底部延伸到对应的数据点;- 直接基于原数据框映射参数,不需要手动重复指定每个x轴截距,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Indescribled
相关产品推荐
相关产品推荐

