2016-08-31 1 views
3

J'essaie d'obtenir deux parcelles de donut côte à côte dans l'intrigue. Cependant, je reçois seulement une image. Des conseils sur ce qui me manque?R Plotly Deux parcelles côte à côte

library(dplyr) 
library(plotly) 

df1 <- as.data.frame(matrix(data = c("a","b", "c", 34,28, 29), nrow = 3, ncol = 2)) 
colnames(df1) <- c("category", "count") 
df2 <- as.data.frame(matrix(data = c("Q","F", "G", 29,50, 76), nrow = 3, ncol = 2)) 
colnames(df2) <- c("group", "count") 


p <- subplot(
    plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE), 
    plot_ly(df2, labels = group, values = count, type = "pie", hole = 0.6, showlegend = TRUE), 
    margin = 0.05, 
    nrows = 2 
) 
p 

Courant de sortie:

enter image description here

Répondre

4

Vous êtes si proche. Ceci est une adaptation de votre code à Plotly's pie charts examples: (. Ils utilisent add_trace au lieu d'un parent subplot)

plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE, 
     domain = list(x = c(0, 1), y = c(0.5, 1))) %>% 
    add_trace(data = df2, labels = group, values = count, type = "pie", hole = 0.6, showlegend = TRUE, 
      domain = list(x = c(0, 1), y = c(0, 0.5))) 

side-by-side pies

Si vous voulez ajouter quadrillages (par @ exemple de Technophobe01) , vous ajouteriez

ax <- list(showline= TRUE) 
plot_ly(...) %>% add_trace(...) %.% 
    layout(xaxis = ax, yaxis = ax) 

Beaucoup plus d'options pour cela, sapmles sur leur axes page.

+0

Utiliser 'domain' comme ça rappelle de moi en utilisant' par (fig = ..., new = TRUE) 'dans la base R. Cela semble un peu draconien, mais ça marche. – r2evans

+0

Génial, merci pour cela. Pourquoi ne pas subploter le travail? Les docs suggèrent cela? – user1357015

+0

Aucune idée, désolé. (Pouvez-vous "accepter" l'une des réponses?) – r2evans

1

Si vous prenez la solution r2evans vous pouvez le faire correspondre à votre question comme suit:

library(dplyr) 
library(plotly) 

df1 <- as.data.frame(matrix(data = c("a","b", "c", 34,28, 29), nrow = 3, ncol = 2)) 
colnames(df1) <- c("category", "count") 
df2 <- as.data.frame(matrix(data = c("Q","F", "G", 29,50, 76), nrow = 3, ncol = 2)) 
colnames(df2) <- c("group", "count") 


p2<- subplot(
    plot_ly(df1, labels = category, values = count, type = "pie", hole = 0.6, showlegend = TRUE, 
      domain = list(x = c(0, 0.5), y = c(0, 1))), 
    add_trace(data = df2, labels = group, values = count, type = "pie", hole = 0.6, 
       domain = list(x = c(0.5, 1), y = c(0, 1))), 
    margin = 0.05) 
p2 

Résultat:

enter image description here

+1

Est-ce que 'subplot' ajoute la grille d'arrière-plan? Je ne pouvais pas le faire fonctionner sans cela. (BTW: J'ai manqué 'nrows = 2', et vous avez suivi le modèle ... :-) – r2evans

+0

Oui, comme codé, le sous-schéma ajoute la grille de fond. ref: https://plot.ly/r/subplots/ – Technophobe01

+0

Peut être fait avec ['layout'] (https://plot.ly/r/axes/), bien que dans ce contexte, je ne suis pas certain qu'il ajoute beaucoup (qu'est-ce que '0,0' signifie quand légèrement en dehors d'un graphique à secteurs?). – r2evans