我有一个由多个类别和月份组成的数据框。每行是参与者的 1 次交互,因此我想通过热图按月份和不同类别显示他们全年的交互计数。
总共 490 万行,这意味着全年总共有 490 万次交互。
我尝试使用输入来指示列名称,并尝试被动地更改 X 轴,但它似乎不起作用。
library(shiny)
library (igraph)
library (tidygraph)
library (ggraph)
library (plotly)
interaction <- readRDS("participant_interaction.rds")
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Social Network Interaction"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
helpText(" Visualise the Social Network Interaction of the Population
in Ohio"),
selectInput(inputId = "Category",
label = "Choose a Category",
choices = c( "Household Size" = "Household_Size",
"Have Kids" = "Have_Kids",
"Education Level" = "Education_Level",
"Interest Group" = "Interest_Group",
"Age Group" = "Age_Group"
),
selected = "Household_Size")
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("heatmapPlot")
)
)
)
server <- function(input, output, session) {
dataset <- reactive({
interaction %>%
group_by(Month,input$Category)%>%
summarise(InteractionCount = n()) %>%
ungroup
})
output$heatmapPlot <- renderPlot({
ggplot(dataset(),aes(x= input$Category,y = Month,fill = InteractionCount)) +
geom_tile()
})
}
# Run the application
shinyApp(ui = ui, server = server)
Desired Output:
Current Output:
我的 RDS 文件的随机 20 (dput):
structure(list(Participant_ID = c(374, 167, 899, 299, 443, 889,
997, 521, 953, 436, 218, 422, 4, 227, 126, 12, 57, 386, 255,
307), Month = structure(c(7L, 8L, 9L, 9L, 6L, 10L, 11L, 7L, 4L,
6L, 10L, 11L, 8L, 12L, 7L, 8L, 7L, 11L, 7L, 10L), .Label = c("Jan",
"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
"Nov", "Dec"), class = c("ordered", "factor")), Income = c(37891.66,
50156.67, 59877.49, 56393.02, 27899.58, 61258.05, 60728.21, 44858.08,
36665.14, 27970.52, 27803.1, 63058.55, 135076.17, 46147.7, 30712.52,
93774.11, 168620.22, 82925.21, 29451.88, 40328.79), Expenses = c(-26931.38,
-32313.29, -25363.68, -23341.46, -24747.06, -18336.36, -17067.74,
-22054.58, -23258.78, -22504.3, -23833.48, -17322.96, -28322.98,
-16633.05, -23661.04, -21135.57, -20642.13, -23707.51, -26028.96,
-30125.43), Household_Size = c(2, 2, 2, 3, 1, 2, 1, 3, 1, 1,
1, 1, 3, 1, 2, 3, 3, 2, 3, 3), Have_Kids = c(FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE), Age = c(57,
49, 59, 35, 56, 19, 48, 39, 45, 36, 38, 27, 43, 59, 26, 34, 56,
39, 59, 38), Education_Level = c("High School or College", "High School or College",
"Graduate", "High School or College", "High School or College",
"Bachelors", "Graduate", "High School or College", "Graduate",
"High School or College", "High School or College", "Graduate",
"Bachelors", "High School or College", "High School or College",
"High School or College", "Graduate", "Graduate", "High School or College",
"Graduate"), Interest_Group = c("F", "F", "B", "I", "F", "A",
"I", "I", "G", "J", "B", "D", "H", "H", "A", "D", "A", "H", "H",
"H"), Joviality = c(0.85417223, 0.846680285, 0.544405537, 0.5149016,
0.758121962, 0.126644557, 0.128853966, 0.477456741, 0.846871205,
0.949412047, 0.971074532, 0.647441392, 0.857396691, 0.490213553,
0.72895287, 0.241615182, 0.422849796, 0.479804894, 0.852187763,
0.962210067), Age_Group = structure(c(9L, 7L, 9L, 4L, 9L, 1L,
7L, 5L, 6L, 5L, 5L, 3L, 6L, 9L, 3L, 4L, 9L, 5L, 9L, 5L), .Label = c("20 & Below",
"21-25", "26-30", "31-35", "36-40", "41-45", "46-50", "51-55",
"56-60"), class = "factor")), row.names = c(1970773L, 932225L,
4348108L, 1549925L, 2381951L, 4296595L, 4822673L, 2808545L, 4594431L,
2337980L, 1146486L, 2241290L, 16905L, 1187579L, 697338L, 71056L,
302316L, 2012670L, 1319716L, 1594018L), class = "data.frame")