【问题标题】:Use ggplot and ggplotly instead of plot_ly to create a pie chart使用 ggplot 和 ggplotly 而不是 plot_ly 创建饼图
【发布时间】:2018-11-04 20:51:45
【问题描述】:

您好,我有一个简单的闪亮应用程序,它根据我的数据集的输入 FacilityName 创建一个饼图。我希望每次选择不同的设施时,我的饼图都可以显示 EXT/INT (OriginId) 之间的份额。此外,每件作品都应该显示份额和“kunden”的数量。不幸的是,plot_ly() 对我来说似乎无法正常工作,所以我会改用 ggplot(),然后用 ggplotly() 将其转换为 plotly。

#data
OriginId=c("INT","EXT","INT","INT","EXT","INT","EXT","INT")
FacilityName=c("t1","t1","t2","t2","t1","t3","t4","t5")
FacId=c("t1","t1","t2","t2","t1","t3","t4","t5")
Testdata2<-data.frame(OriginId,FacilityName,FacId)

#ui.r
library(shinydashboard)
library(plotly)
library(data.table)

dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody()
)
#
ui <- dashboardPage(skin = "black",
                    dashboardHeader(title = img(src="Logo1.jpg", height = 50, align = "left")

                    ),

                    ## Sidebar content
                    dashboardSidebar(
                      sidebarMenu(
                        menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))

                      )
                    ),

                    ## Body content
                    dashboardBody(
                      tabItems(

                        # Dashboard tab
                        tabItem(tabName = "dashboard",
                                fluidRow(
                                  box(title = "Verhältnis interner / externer Aufträge", status = "primary", solidHeader = TRUE,
                                      plotlyOutput("pie",height = 250)),
                                  uiOutput("var")

                                )

                        )



                      )
                    )
)
#server.r
server <- function(input, output,session) {

  # Auftrag INT vs Ext
  output$pie<-renderPlotly({

    data <- dplyr::tbl_df(subset(Testdata2,Testdata2$FacilityName %in% input$variable))
    ttestdata <- data.frame(data %>% group_by(OriginId) %>% mutate(Counts = n())) 
    p <- plot_ly(data, labels=data$OriginId, values = table(data$OriginId), type = 'pie',
                 textposition = 'inside',
                 insidetextfont = list(color = '#FFFFFF'),
                 hoverinfo = 'text',
                 text = ~paste(ttestdata$Counts, ' Kunden'),
                 marker = list(
                   line = list(color = '#FFFFFF', width = 1)),
                 showlegend = FALSE) %>%
      layout(
        title = paste(input$variable),
        xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
        yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

  })



  output$var<-renderUI({
    selectInput("variable",
                h4("Abteilung wählen:"),
                choices = Testdata2 %>% distinct(FacilityName),selected = 1)
  })

}

【问题讨论】:

  • 您遇到了什么问题?您的应用似乎可以运行。
  • 我想用 ggplot() 而不是 plot_ly 创建一个饼图,但我不知道如何正确转换它

标签: r ggplot2 plotly r-plotly


【解决方案1】:

ggplot2 中的饼图:

这是在ggplot2 中制作饼图的方法:

data <- Testdata2 %>% filter(FacilityName == "t1")
p <- ggplot(data, aes(x = '', fill = OriginId)) +
        geom_bar(width = 1, stat = "count") +
        coord_polar(theta = "y", start = 0)

这个想法是使用条形图并切换到极坐标。 这会产生以下图表:

ggplotly() 中的支持:

ggplotly() 尚不支持极坐标。

你可以参考这个github issue来遵循这一点:https://github.com/ropensci/plotly/issues/878

【讨论】:

  • 我想我不会有情节互动。但是 tnx 为您解答
  • 不幸的是,是的,现在如果您想使用 ggplot2,那么在修复此 github issue 之前,您将无法拥有 plotly 的交互性。无论如何,如果答案令人满意,请接受它,以便其他寻找答案的人可以快速找到它。
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多