如何解决如何在 r Shiny 中制作交互式雷达图?
我对 r 和 Shiny 还很陌生,目前我正在做我的第一个个人项目。我的项目是关于 Pokemon 的,我目前在创建交互式雷达图时遇到问题。我曾尝试在本网站上查看有关 r 和雷达图的其他问题,但无法真正找到正确的答案,因为数据集通常采用不同的格式,而且答案没有提供交互方式。
我想要实现的目标:创建一个交互式雷达图,用户可以在其中选择一个口袋妖怪,雷达图将显示该口袋妖怪的基本统计数据(hp、攻击、防御等)
数据集:
name hp defense attack sp_attack sp_defense speed
1 Bulbasaur 45 49 49 65 65 45
2 Ivysaur 60 63 62 80 80 60
3 Venusaur 80 123 100 122 120 80
4 Charmander 39 43 52 60 50 65
5 Charmeleon 58 58 64 80 65 80
6 Charizard 78 78 104 159 115 100
...
ui.R:
library(shiny)
library(plotly)
ui <- navbarPage(title = "Pokemon Research",tabPanel(title = "Types and Stats",sidebarPanel(
selectInput(inputId = "diff_stat",label = "Different Types and their Base Statistics",choices = c("hp","attack","defense","special_attack","special_defense","speed","total"))
),mainPanel(plotlyOutput("type"))),tabPanel(title = "Pokemon Statistics",sidebarPanel(
selectInput(inputId = "indv",label = "Pokemon",choices = data$name
),#IDK WHAT TO PUT HERE FOR THE MAINPANEL
)))
server.R:
library("shiny")
library("ggplot2")
data <- read.csv("../data/pokemon.csv",stringsAsFactors = FALSE)
type_data <- data %>%
select(name,type1,hp,defense,attack,sp_attack,sp_defense,speed) %>%
group_by(type1) %>%
summarise(hp = mean(hp),attack = mean(attack),defense = mean(defense),special_attack = mean(sp_attack),special_defense = mean(sp_defense),speed = mean(speed),total = mean(attack + defense + hp + sp_attack + sp_defense + speed))
indv_data <- data %>%
select(name,speed)
server <- function(input,output) {
output$type <- renderPlotly({
ggplot(data = type_data,mapping = aes_string(x = "type1",y = input$diff_stat)) +
geom_line(group = 1) +
geom_point() +
labs(x = "Types",y = "Base Stat (avg)")
})
output$radar <- renderPlot({
#WHAT DO I PUT HERE TO MAKE THE RADAR CHART
})
}
非常感谢任何帮助!
解决方法
这会有所帮助。我只包含了雷达图的代码。
library(tidyverse)
library(shiny)
library(plotly)
pokemons <-
read_table('
name hp defense attack sp_attack sp_defense speed
Bulbasaur 45 49 49 65 65 45
Ivysaur 60 63 62 80 80 60
Venusaur 80 123 100 122 120 80
Charmander 39 43 52 60 50 65
Charmeleon 58 58 64 80 65 80
Charizard 78 78 104 159 115 100')
ui <- navbarPage(title = "Pokemon Research",tabPanel(title = "Pokemon Statistics",sidebarPanel(
selectInput(inputId = "indv",label = "Pokemon",choices = pokemons$name,selected = 'Bulbasaur')
),mainPanel(
plotlyOutput('radar') #the radar plot
)
))
server <- function(input,output,session) {
output$radar <- renderPlotly({
pkmn <- filter(pokemons,name == input$indv)
r <- map_dbl(pkmn[,2:6],~.x)
nms <- names(r)
#code to plot the radar
fig <- plot_ly(
type = 'scatterpolar',r = r,theta = nms,fill = 'toself',mode = 'markers'
)
fig <- fig %>%
layout(
polar = list(
radialaxis = list(
visible = T,range = c(0,max(r))
)
),showlegend = F
)
})
}
shinyApp(ui,server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。