r - 在 R Shiny 图上选择不同颜色的线条
问题描述
我正在尝试创建一个闪亮的应用程序,该应用程序最多显示 2 条不同颜色的线条,具体取决于用户选择查看的线条。但是,我不断收到“意外字符”错误。
我认为问题出selectInput(inputId = "z", label = "Source", choices = c("social_media", "google_ads"), selected = c("social_media", "google_ads"), multiple = TRUE)
在下面代码的行中,当我用choices
和selected
替换时source
,图表似乎可以工作(尽管不允许用户选择和查看不同的选项)。
df 是一个如下所示的数据框:
av_purchase_count days_since_first_use source
2 1 social_media
5 2 social_media
4 1 google_ads
6 2 google_ads
...这是我尝试过的代码:
library(shiny)
library(ggplot2)
df <- read_xlsx("~/df.xlsx")
ui <- fluidPage(
titlePanel("df"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "x", label = "Days since first use", choices = "days_since_first_use", selected = "days_since_first_use"),
selectInput(inputId = "y", label = "Average Purchase Count", choices = "av_purchase_count", selected = "av_purchase_count"),
selectInput(inputId = "z", label = "Source", choices = c("social_media", "google_ads"), selected = c("social_media", "google_ads"), multiple = TRUE)
),
mainPanel(
plotOutput("scatterplot")
)
)
)
server <- function(input, output) {
output$scatterplot <- renderPlot({
# generate bins based on input$bins from ui.R
ggplot(data = df, aes_string(x = input$x, y = input$y, colour = input$z)) +
geom_point()
})
}
shinyApp(ui = ui, server = server)
我希望最终图表允许用户选择是否要查看 、 或两者的结果google_ads
(social_media
默认情况下,两者)。
非常感谢,希望这是有道理的。
解决方案
你可以通过
output$scatterplot <- renderPlot({
ggplot(
data = df %>% filter(source %in% input$z),
aes_string(x = input$x, y = input$y)
) + geom_point(aes(colour = source))
})
变量input$z
反映用户选择显示的内容(google_ads 或 social_media 或两者)。这是一个反应向量,它会在每次自身发生变化时触发情节重绘。每次更改时,过滤数据框以仅保留用户想要查看的内容df %>% filter(source %in% input$z)
。要注意的另一件事是根据“源”为点着色,您需要使用aes(color = source)
notaes_string
因为您不想将源评估为变量。
记得安装和加载库(tidyverse),ggplot2 也是 tidyverse 的一部分,所以你可以library(ggplot2)
用library(tidyverse)
. 如果你真的不想用tidyverse,那就用df[df$source %in% input$z, ]
过滤数据
推荐阅读
- .net-core - Travis:E:无法找到包 dotnet-sdk-2.0.0
- android - 如何在 BottomSheetDialogFragment 中使用 getViewLifecycleOwner()
- python - 使用 route53domains 进行 boto3 分页
- reactjs - 如何显示区块链合约调用的时间?
- c - 二维数组和指针
- google-bigquery - 如何从 BigQuery API 获取列名?
- python - 在每行开头添加 2 个空格的文本标记
- anomaly-detection - 何时在 Azure Anomaly Detector 中使用“/entire”与“/last” API?
- python - 为什么我的快速排序程序不能正确排序项目?
- java - 如何使反向排序与泛型类类型一起使用