我正在尝试绘制将根据所选输入而变化的图形。此外,图中的数据应按状态分类。我正在使用的数据集是midwest
的{{1}}。由于某种原因,应基于ggplot2
数据集状态的颜色无法正常工作。尝试使用midwest
或color = state
时出现错误。 color = prof_poverty$state
。由于存在5种不同的状态,因此应该有5种不同的颜色。
这是我的代码:
UI
Aesthetics must be either length 1 or the same as the data (1): colour
服务器
library(shiny)
library(dplyr)
library(ggplot2)
prof_poverty <- midwest %>%
select(state, county, percprof, percadultpoverty, percpovertyknown, percbelowpoverty, percadultpoverty, percelderlypoverty, percchildbelowpovert)
ui <- fluidPage(
pageWithSidebar(
headerPanel('Poverty compared with number of professors'),
sidebarPanel(
selectInput('xcol', 'X variable', names(prof_poverty)[3:8]),
selectInput('ycol', 'Y variable', names(prof_poverty)[3:8]),
selected = names(prof_poverty)[[2]]
),
mainPanel(
plotOutput('poverty')
)
)
)
答案 0 :(得分:0)
只需将ggplot调用中使用的数据更改为prof_poverty
并使用aes_string
即可。 (尽管有更多现代方法可以解决此问题)
在反应式selectedData
中对数据进行子集处理的方式无效,并且在色彩美学中使用完整的状态向量正在触发错误。
由于renderPlot
函数是反应性的,因此您实际上并不需要在此之前创建的反应性数据对象selectedData
。
server <- function(input, output){
output$poverty <- renderPlot ({
ggplot(data = prof_poverty, aes_string(x = input$xcol, y = input$ycol)) +
geom_point(aes(color = prof_poverty$state)) })
}
# Run the application
shinyApp(ui = ui, server = server)