我具有以下数据结构
我已经绘制了日期(x轴)与TypeA / TypeB /…的关系图。
如何绘制日期(x轴)与多个类型(如TypeA,TypeB-2行,每行一条)。
当前使用的代码是
output$trendPlot1 <- renderPlotly({
dataset1 <- reactive({
data3[sample(nrow(data3) , 100 ),]
})
p <- ggplot(dataset1(), aes_string(x = "Date", y = input$y )) +
ggtitle(paste0("Simple Cumulative Return of Stock over Time")) +
# geom_point()
geom_line()
ggplotly(p) %>%
layout( autosize=TRUE)
})
用户在屏幕上输入 y(具有不同类型的下拉列表)。我将具有多个选择下拉列表,并且能够选择不同的类型。 (实际数据中大约有100种类型)。我只想绘制用户选择的那些类型,而不是其他。
如何将多个选择传递给要在单个图形上绘制的图形?
答案 0 :(得分:1)
我从上述答案中提取了样本数据集。
library(shiny)
library(tidyverse)
Date <- c("29-Oct-2018", "28-Oct-2018", "27-Oct-2018", "26-Oct-2018")
TypeA <- rnorm(4, 5, 2)
TypeB <- rnorm(4, 5, 3)
TypeC <- rnorm(4, 5, 4)
df <- data.frame(Date = Date, TypeA = TypeA, TypeB = TypeB, TypeC = TypeC)
wide_df <- df %>% gather(Type,Value,2:4)
ui <- fluidPage(
selectInput(inputId = "type",
label = "",
choices = unique(wide_df$Type),
multiple = TRUE),
plotOutput("first_plot")
)
server <- function(input, output, session) {
output$first_plot <- renderPlot({
wide_df %>%
filter(Type %in% input$type) %>%
ggplot() +
geom_point(aes(Date, Value, color = Type))
})
}
shinyApp(ui, server)
答案 1 :(得分:0)
由于未提供实际数据(无法复制图像),因此我使用了示例数据进行解释。您需要使用melt
包中的reshape2
将数据转换为长格式图。下面给出了示例代码。根据需要进行修改。
library(ggplot2)
library(reshape2)
Date <- c("29-Oct-2018", "28-Oct-2018", "27-Oct-2018", "26-Oct-2018")
TypeA <- rnorm(4, 5, 2)
TypeB <- rnorm(4, 5, 3)
TypeC <- rnorm(4, 5, 4)
df <- data.frame(Date = Date, TypeA = TypeA, TypeB = TypeB, TypeC = TypeC)
plotdf <- melt(df, id.vars = "Date")
print(ggplot(plotdf, aes(value, Date, colour = variable)) + geom_point() +
ggtitle(paste0("Simple Cumulative Return of Stock over Time")) +
theme(legend.position = "bottom")+
guides(fill = guide_legend(reverse=TRUE)))
输出: