【发布时间】:2018-03-28 01:36:31
【问题描述】:
目标:创建一个接受用户输入的 bin 计数的直方图,并用曲线覆盖它以适应分布。绘制的数据是一个人切 cookie 所需的时间。
主要功能:
geom_histogram(aes(y = ..count..), bins = input$binCount) - 此语句使用用户指定的 bin 数量创建频率图。
geom_density(aes(y = (..density..)(N)(binWidth) )) - 该语句应该创建一条适合分配。 “N”是数据点的总数(20),“binWidth”是每个 bin 的宽度(默认 = 5),根据用户指定的 bin 数量而变化。可以在here 找到有关此转换背后数学的完整解释。
问题:“geom_density()”函数中的“aes()”映射语句无法识别之前在“RenderPlot”中创建的变量“N”或“binWidth”块。
代码: 以下代码可立即运行。第 84 行将导致错误。如果您想查看 David 或 Sharon 的结果应该是什么样的(默认 binCount = 5),那么您可以取消注释第 85 或 86 行。
类似问题:我发现了一些处理类似 ggplot 问题的帖子,例如 this post,但它们主要处理使用“aes_string()”将字符串传递给映射语句,以及我正在使用数字变量。
感谢您提供的任何帮助!
#
# Cookie Cutting Analytics
#
# Author: Cody
# Date: 10/16/2017
# Descr: An application to analyze David and Sharon's cookie cutting efficiency.
#
# Libraries -----------------------------------------------------------
suppressWarnings(library(dplyr))
suppressWarnings(library(ggplot2))
suppressWarnings(library(shiny))
# User Interface ------------------------------------------------------
ui <- fluidPage(
# App Title
titlePanel("Cookie Cutting Analytics"),
# Sidebar layout
sidebarLayout(
# Sidebar panel for Input
sidebarPanel(
# Input: Proc Name Dropdown
selectInput("cutterPerson", "Cookie Cutter:",
c("David", "Sharon")),
# Input: Histogram Bin Count Slider
sliderInput("binCount", "Number of Bins:",
min = 1,
max = 10,
value = 5)
),
# Main panel for displaying outputs
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Plots",
br(),
plotOutput("histogram"),
br(),
plotOutput("boxPlot")),
tabPanel("Stats", verbatimTextOutput("summary")),
tabPanel("Data", tableOutput("table"))
)
)
)
)
# Server Logic --------------------------------------------------------
server <- function(input, output) {
# Reactive Expression: Cookie Data
cookieData.df <- reactive ({
person <- c("David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon","David","Sharon")
cutTime <- c(5,10,8,12,6,9,8,8,4,15,9,14,5,9,7,12,6,13,8,11,6,12,6,10,8,13,9,8,5,11,4,13,7,10,5,12,6,10,5,15)
data.frame(person, cutTime)
})
# Reactive Expression: Person Cutting
cutterName <- reactive({
input$cutterPerson
})
# Reactive Expression: Filtered Data
filteredData.df <- reactive({
cookieData.df() %>% select(person, cutTime) %>% filter(person == input$cutterPerson)
})
# Output: Histogram
output$histogram <- renderPlot({
N <- nrow(filteredData.df())
binWidth = (max(filteredData.df()$cutTime)-min(filteredData.df()$cutTime) / input$binCount)
ggplot(filteredData.df(), aes(cutTime)) +
geom_histogram(aes(y = ..count..), bins = input$binCount) +
geom_density(aes(y = ..density..* N * binWidth), color = "red") + # Error: Does not recognize "N" or "binWidth"
#geom_density(aes(y = ..density.. * 20 * 1), color = "red") + # David Curve: N = 10, binWidth = (max(cutTime)-min(cutTime))/binCount = (9-4)/5 = 1
#geom_density(aes(y = ..density.. * 20 * 1.4), color = "red") + # Sharon Curve: N = 10, binWidth = (max(cutTime)-min(cutTime))/binCount = (15-8)/5 = 1.4
labs(title = "Histogram of Cookie Cut Times", x = "Cut Duration (s)", y = "Frequency") +
theme(plot.title = element_text(size = 25, face = "bold"),
axis.title = element_text(size = 15, face = "bold"))
})
# Reactive Expression: (N) Filtered Data
N <- reactive({
nrow(filteredData.df())
})
# Reactive Expression: (binWidth) Filtered Data
binWidth <- reactive({
(max(filteredData.df()$cutTime) - min(filteredData.df()$cutTime)) / input$binCount
})
}
shinyApp(ui, server)
【问题讨论】:
-
这真的与闪亮无关。类似于问题here。 ggplot 无法跨环境查找使用
..计算变量的映射。 -
仍然无法正常工作。感谢您将我链接到另一篇文章,但个人解释会更有帮助。特别是因为我花了一个小时将一篇写得很好的帖子与示例代码放在一起。