我已经设置了闪亮的折线图。 x轴具有从2014年到当前日期的日期。
我已经使用geom_vline()设置了各种垂直线以突出显示数据中的点。
我正在使用dateRangeInput(),因此用户可以选择开始/结束日期范围以在图表上查看。
我的一条垂直线是2014年2月。如果用户使用dateRangeInput()查看2016年1月的日期,则该图上仍显示2014年2月的垂直线。即使数据行从2016年1月到当前日期,这也导致x轴从2014年开始。
有没有一种方法可以停止在dataRangeInput()之外的图形上显示的垂直线?也许geom_vline()中有一个参数可以解决这个问题?
library(shiny)
library(tidyr)
library(dplyr)
library(ggplot2)
d <- seq(as.Date("2014-01-01"),Sys.Date(),by="day")
df <- data.frame(date = d , number = seq(1,length(d),by=1))
lines <- data.frame(x = as.Date(c("2014-02-07","2017-10-31", "2017-08-01")),
y = c(2500,5000,7500),
lbl = c("label 1", "label 2", "label 3"))
#UI
ui <- fluidPage(
#date range select:
dateRangeInput(inputId = "date", label = "choose date range",
start = min(df$date), end = max(df$date),
min = min(df$date), max = max(df$date)),
#graph:
plotOutput("line")
)
#SERVER:
server <- function(input, output) {
data <- reactive({ subset(df, date >= input$date[1] & date <= input$date[2])
})
#graph:
output$line <- renderPlot({
my_graph <- ggplot(data(), aes(date, number )) + geom_line() +
geom_vline(data = lines, aes(xintercept = x, color = factor(x) )) +
geom_label(data = lines, aes(x = x, y = y,
label = lbl, colour = factor(x),
fontface = "bold" )) +
scale_color_manual(values=c("#CC0000", "#6699FF", "#99FF66")) +
guides(colour = "none", size = "none")
return(my_graph)
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
Aimée在另一个线程中提到:
简而言之,除非另有说明,否则ggplot2将始终绘制您提供的所有数据,并且轴限制基于此。因此,因为您要告诉它绘制线条和标签,所以即使其余数据没有延伸那么远,它们也会出现在图表上。 您可以通过使用coord_cartesian函数告诉ggplot2您希望x轴的限制是什么来解决此问题。# Set the upper and lower limit for the x axis
dateRange <- c(input$date[1], input$date[2])
my_graph <- ggplot(df, aes(date, number)) + geom_line() +
geom_vline(data = lines, aes(xintercept = x, color = factor(x) )) +
geom_label(data = lines, aes(x = x, y = y,
label = lbl, colour = factor(x),
fontface = "bold" )) +
scale_color_manual(values=c("#CC0000", "#6699FF", "#99FF66")) +
guides(colour = "none", size = "none") +
coord_cartesian(xlim = dateRange)