2016-10-24 3 views
2

Для интерактивных 3D-графиков, встроенных в R-блестящие выходы, пакет R plotly теперь предлагает несколько хороших вариантов, тем более, что обслуживание альтернативного пакета shiny-rgl, похоже, постепенно исчезает.R plotly 3d bar plot

Однако, возможно ли создать 3d барплот, используя plotly?

+1

Ответ на свой вопрос в порядке, но я не совсем понимаю, что проблема, которую вы решаете здесь. Ответ можно улучшить, добавив некоторое объяснение тому, что такое «трюк» и как он работает, а также изображение результата. – Axeman

+0

Изменено, чтобы сделать точку чистой. Запустите код ответа ниже, чтобы отобразить интерактивный 3D-график. – martin

ответ

2

Один трюк, чтобы создать внешний вид 3d barplot - вместо этого построить график ошибок.

Как указано в приведенном ниже коде, значения размеров, для которых нужны полосы, сокращаются наполовину, прежде чем подавать их через add_trace, где они изменяются на все, что ниже видимости (или делают их прозрачными). Симметричные столбцы ошибок пополам, а затем просто приводят к барам. В приведенном ниже примере добавляются две группы данных df1 и df2.

library(shiny) 
library(plotly) 

ui <- fluidPage(
    plotlyOutput("plotlii", width = "100%", height = "700px") 
) 

server <- function(input, output) { 
    output$plotlii <- renderPlotly({ 
     # the data:  
     obs1 <- matrix(ncol=3, 
      c(1,2,3,1,2,2,6,6,4) 
     ) 
     df1 <- setNames(data.frame(obs1), c("a", "b", "c")) 
     df1$c<-(.5*df1$c) # half values to make them the centre point of the bars 
     obs2 <- matrix(ncol=3, 
      c(14,16,10,11,12,12,23,23,22) 
     ) 
     df2 <- setNames(data.frame(obs2), c("a", "b", "c")) 
     df2$c<-(.5*df2$c) # half values to make them the centre point of the bars 
     # the plot: 
     p <- plot_ly(type="scatter3d",mode="markers",showlegend=FALSE)%>% 
     add_trace(p, 
      x = ~a, y = ~b, z = ~c, 
      data = df1, 
      color=I("red"), 
      size = I(1), 
      name = "Group a", 
      error_z=list(
       color="red", 
       thickness=0, 
       symmetric = TRUE, 
       type = "data" , 
       array = df1$c 
      ) 
     )%>% 
     add_trace(p, 
      x = ~a, y = ~b, z = ~c, 
      data = df2, 
      color=I("gray"), 
      size = I(1), 
      name = "Group a", 
      error_z=list(
       color="gray", 
       symmetric = TRUE, 
       type = "data" , 
       array = df2$c 
      ) 
     ) 
    }) 
} 

shinyApp(ui, server) 

enter image description here

+0

делает редактирование действительно увеличивать репутацию? – martin