使用ggplot2在多个异常点的日期时间添加垂直线

时间:2019-02-06 20:32:26

标签: r ggplot2

我有一个像这样的数据框

library(ggplot2)
library(ggrepel)
ggplot(data = df, aes(PDATETIME,DELTA ))+ 
  ggtitle("Outlier Analysis") + 
  theme(axis.text.x = element_text(angle=90, vjust=1),plot.title = element_text(size = rel(1))) + 
  geom_point(colour="black") +
  geom_vline(aes(xintercept=df$PDATETIME[which(df$Type %in%  "Outlier")],linetype=4, colour="black")) + 
  geom_text_repel(aes(PDATETIME, DELTA, 
                      label = Type),
                  size =4,
                  fontface = 'bold',
                  color = 'red',
                  box.padding = 0.5,
                  point.padding = 0.5,
                  segment.color = 'darkblue',
                  segment.size = 0.5,
                  arrow = arrow(length = unit(0.01, 'npc'))) +
  xlab("PDATETIME")+ 
  ylab("DELTA")

我正在尝试使用ggplot2在离群点绘制垂直线

Error: A continuous variable can not be mapped to linetype

它引发错误“ @echo off :main if exist MyCommand.flag goto :eof start test2.bat :wait timeout 1 >nul tasklist /fi "Windowtitle eq MyCommand"|find "cmd.exe" >nul || @goto :main goto :wait

离群点位于2017-02-25 15:31:50,2017-03-16 23:48:14

我在这里想念什么?有人可以指出我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

我们在 geom_vline 中不需要 aes ,请尝试:

geom_vline(xintercept = df$PDATETIME[ which(df$Type %in%  "Outlier") ], linetype = 4, colour = "black")

答案 1 :(得分:2)

linetypecolor没有变化,因此您可以将其移到aes之外。另外,我建议您将代码修改为:

geom_vline(data = df[which(df$Type %in% "Outlier"),], 
           aes(xintercept = PDATETIME), 
           linetype = 4, colour = "black") 

答案 2 :(得分:1)

您需要将linetypecolouraes中移出:

geom_vline(aes(xintercept=df$PDATETIME[which(df$Type %in%  "Outlier")]),linetype=4, colour="black")

如果您希望linetype和/或colouraes()内,则希望它们根据某个变量(例如df$type)而变化。