【问题标题】:Clickable Pie chart to select data for bar chart可点击的饼图为条形图选择数据
【发布时间】:2015-08-27 19:11:32
【问题描述】:

我想显示多年的饼图,用户可以单击其中一个切片以选择单个类别以在条形图中绘制图形,以便更轻松地查看每年的变化那个类别。单击切片将有效地完成 selectInput 在以下脚本中所做的工作:

library(rCharts)
library(shiny)

Year1 <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5)
Year2 <- c(1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,5,5)
Year3 <- c(1,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5)
data <- data.frame(Year1,Year2,Year3)


shinyApp(
  ui = fluidPage(
    showOutput("p1", lib = "nvd3"),
    showOutput("p2", lib = "nvd3"),
    showOutput("p3", lib = "nvd3"),
    selectInput("selected","Select group to graph:",
                choices = c(1:5),
                multiple = FALSE,
                selected = 1),
    showOutput("bar", lib = "highcharts")
  ),
  server = function(input, output){
    output$p1 <- renderChart2({
      nPlot(~ Year1, data = data, type = 'pieChart')
    })

    output$p2 <- renderChart2({
      nPlot(~ Year2, data = data, type = 'pieChart')
    })

    output$p3 <- renderChart2({
      nPlot(~ Year3, data = data, type = 'pieChart')
    })

    data2 <- reactive({
      data.frame(Year1 = as.data.frame(table(data$Year1))[input$selected,2],
                 Year2 = as.data.frame(table(data$Year2))[input$selected,2],
                 Year3 = as.data.frame(table(data$Year3))[input$selected,2]
      )
    })

    output$bar <- renderChart2({
      a <- rCharts:::Highcharts$new()
      a$chart(type = "column")
      a$title(text = "Bar Chart")
      a$xAxis(title = list(text = "Yearly Data"))
      a$yAxis(title = list(text = "Count"))
      a$data(data2())
      a
    })    
  }
)

非常感谢任何帮助。如果有更合适的,我不反对使用其他包。

【问题讨论】:

  • 您似乎没有使用 plyr、dplyr 或 magrittr。为什么要加载那些库
  • 我一开始是在使用它们,当时我正在使用不同的数据集设置脚本。然后我决定直接构建我的数据框更直接,但我忽略了返回并将它们从序言中删除。

标签: r highcharts shiny nvd3.js rcharts


【解决方案1】:

this 的启发,您可以添加一个自定义工具提示函数,当您点击饼图时添加点击事件:

tooltip_function="#! function(key, x, y, e ){ 
                        d3.selectAll('[class*=\"nv-slice\"]').on('click',function(){
                        Shiny.onInputChange('selected_cat',key)})
                        return '<h3>' + key + '</h3>' + '<p>'+ x +'</p>' 
                } !#"

Shiny.onInputChangeselected_cat 绑定到key 的值,这是用户单击的饼图的名称。然后,您可以使用input$selected_catserver.R 中获取该值。

renderChart2需要修改添加tooltip功能,像这样(以第一个为例):

 output$p1 <- renderChart2({
                        n1 <- nPlot(~ Year1, data = data, type = 'pieChart')
                        n1$chart(tooltipContent = tooltip_function)
                        n1
                })

还有data2

 data2 <- reactive({
                        data.frame(Year1 = as.data.frame(table(data$Year1))[input$selected_cat,2],
                                   Year2 = as.data.frame(table(data$Year2))[input$selected_cat,2],
                                   Year3 = as.data.frame(table(data$Year3))[input$selected_cat,2]
                        )
                })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多