簡體   English   中英

Plotly:如何將 ggplot object 轉換為 plotly?

[英]Plotly: How to convert ggplot object into plotly?

我有一個包含兩列的數據集。第一列名為 Centile.threshold,第二列是 Effective.tax.rates。 所以接下來的陡峭是使用下面的代碼制作 plot。

# Data and code
library("rJava")
library("xlsxjars")
library("xlsx")
require(tidyr)
require(plyr)
library("ggplot2")
library("plotly")

    g4_data_ext<-data.frame(structure(list(Centile.threshold = c(1, 2, 3, 4, 5, 6, 7, 8, 
                                     9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
                                     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
                                     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
                                     57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 
                                     73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 
                                     89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100), Effective.tax.rates = c(11.4875111183361, 
                                                                                                               8.07673874931679, 7.8639563682086, 6.84656368538612, 6.8383437884744, 
                                                                                                               5.83532681932012, 5.11955857753708, 4.68757220539562, 4.66492423437793, 
                                                                                                               4.63051650494602, 4.71570390296145, 4.4419481131279, 4.16374366969064, 
                                                                                                               4.4424750798236, 4.2633646392858, 4.10185821346884, 2.29819561722, 
                                                                                                               2.01895390855722, 0, 0, 2.80530318111453, 2.83367683951859, 3.03173307975026, 
                                                                                                               3.58758933227946, 3.05869003045607, 3.59225918463074, 3.01588015121759, 
                                                                                                               3.55943967998446, 3.6220565232692, 3.40885422585891, 3.51447401518606, 
                                                                                                               3.68902868712004, 3.77018314638409, 3.72783452684771, 3.80791342516448, 
                                                                                                               3.99449874248864, 4.08421307782513, 4.07517557211112, 4.19659018929637, 
                                                                                                               4.22887420998102, 4.25529382081159, 4.36205679154288, 4.40690982734329, 
                                                                                                               4.33909305037396, 4.45990415426276, 4.59436808108174, 4.6831546716255, 
                                                                                                               4.73811656768519, 4.75412915916737, 4.84778797281815, 4.94690785473091, 
                                                                                                               5.06784298188807, 5.1769208879221, 5.2520552039406, 5.33650672817794, 
                                                                                                               5.43499638671921, 5.52400199193912, 5.58169115527766, 5.70509046165446, 
                                                                                                               5.76549758450655, 5.86333222670147, 5.87097687497217, 5.98729128544292, 
                                                                                                               6.07397530734785, 6.15030076581313, 6.21615540600908, 6.28135059352123, 
                                                                                                               6.38292345287997, 6.43416757218245, 6.5863284138631, 6.63365437304645, 
                                                                                                               6.70316768627345, 6.7816891944299, 6.85128738244695, 6.94261253911407, 
                                                                                                               7.01673024329712, 7.11081973369591, 7.18077796481166, 7.26197149513331, 
                                                                                                               7.32607460317916, 7.39638728837014, 7.47062968448649, 7.55194205005014, 
                                                                                                               7.64318101794584, 7.73728594723894, 7.79092205170689, 7.88152530983832, 
                                                                                                               7.97428540786095, 8.09278589483141, 8.20373396784042, 8.27757060469128, 
                                                                                                               8.40889176349213, 8.50851684368756, 8.64124701008068, 8.72559960562268, 
                                                                                                               8.85276486059087, 9.06564270204267, 9.26861906650096, 9.43047799204161, 
                                                                                                               10.2298639144453), grp_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
                                                                                                                                             1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
                                                                                                                                             1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 
                                                                                                                                             2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 
                                                                                                                                             4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 
                                                                                                                                             6, 6, 6, 7, 8), grp_label = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                                     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                                     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                                                                                                                                                                     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 
                                                                                                                                                                                     4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
                                                                                                                                                                                     6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 
                                                                                                                                                                                     7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 2L, 3L), .Label = c("<=50%", 
                                                                                                                                                                                                                                                         "=99%", ">99%", "51%-60%", "61%-70%", "71%-80%", "81%-90%", "91%-98%"
                                                                                                                                                                                     ), class = "factor")), row.names = c(NA, -100L), class = "data.frame"))

這是用 ggplot 繪制 plot 的代碼。 這段代碼運行良好。

    g4_data_ext<-data.frame(g4_data, grp_id=NA, grp_label=NA)

for (i in 1:length((g4_data$Centile.threshold)))
{
  if (g4_data$Centile.threshold[i]<=50)
  {
    g4_data_ext$grp_label[i] <- "<=50%"
    g4_data_ext$grp_id[i] <- 1
  }
  else if (51<=g4_data$Centile.threshold[i] & g4_data$Centile.threshold[i]<=60) 
  {
    g4_data_ext$grp_label[i] <- "51%-60%" 
    g4_data_ext$grp_id[i] <- 2
  }
  else if (61<=g4_data$Centile.threshold[i] & g4_data$Centile.threshold[i]<=70) 
  {
    g4_data_ext$grp_label[i] <- "61%-70%"  
    g4_data_ext$grp_id[i] <- 3
  }
  else if (71<=g4_data$Centile.threshold[i] & g4_data$Centile.threshold[i]<=80) 
  {
    g4_data_ext$grp_label[i] <- "71%-80%"  
    g4_data_ext$grp_id[i] <- 4
  }
  else if (81<=g4_data$Centile.threshold[i] & g4_data$Centile.threshold[i]<=90) 
  {
    g4_data_ext$grp_label[i] <- "81%-90%" 
    g4_data_ext$grp_id[i] <- 5
  }
  else if (90<=g4_data$Centile.threshold[i] & g4_data$Centile.threshold[i]<=98) 
  {
    g4_data_ext$grp_label[i] <- "91%-98%"  
    g4_data_ext$grp_id[i] <- 6
  }
  else if (g4_data$Centile.threshold[i]==99) 
  {
    g4_data_ext$grp_label[i] <- "=99%"
    g4_data_ext$grp_id[i] <- 7
  }
  else 
  {
    g4_data_ext$grp_label[i] <- ">99%"
    g4_data_ext$grp_id[i] <- 8
  }
}

g4_data_ext$grp_label<-factor(g4_data_ext$grp_label)

color_code<-factor(c(rep("dark turquoise", 6), "tomato", "orange red"))


means_g4<-data.frame(ddply(g4_data_ext,~grp_id+grp_label,summarise,mean=mean(Effective.tax.rates),sd=sd(Effective.tax.rates)), color_code)

ggplot(data = means_g4, aes(x=factor(grp_id),y=mean, label =mean ))+
  scale_x_discrete("Group",breaks=c(1:8), labels=means_g4$grp_label)+
  coord_cartesian(ylim = c(-3, 12)) +
  geom_bar(stat="identity", fill=color_code)+
  geom_text(aes(y = mean*1.1, label = round(mean,2)), position=position_dodge(0.9))+
  theme(axis.text.x = element_text(angle = 0))

But my intention is to convert this plot with ggplotly().I tryed to convert but is work well, so can anybody help me how to convert this plot into plotly object?

當我嘗試

ggplotly(ggplot(data = means_g4, aes(x=factor(grp_id),y=mean, label =mean ))+
  scale_x_discrete("Group",breaks=c(1:8), labels=means_g4$grp_label)+
  coord_cartesian(ylim = c(-3, 12)) +
  geom_bar(stat="identity", fill=color_code)+
  geom_text(aes(y = mean*1.1, label = round(mean,2)), position=position_dodge(0.9))+
  theme(axis.text.x = element_text(angle = 0)))

我得到錯誤

Error in nchar(axisObj$ticktext) : 'nchar()' requires a character vector

如果我scale_x_discrete項,這個錯誤就會消失。 那里唯一看起來應該是字符向量的是labels=means_g4$grp_label ,實際上means_g4$grp_label是一個因素。 所以轉換它, ggplotly()工作:

ggplotly(ggplot(data = means_g4, aes(x=factor(grp_id),y=mean, label =mean ))+
  scale_x_discrete("Group",breaks=c(1:8), labels=as.character(means_g4$grp_label))+
  coord_cartesian(ylim = c(-3, 12)) +
  geom_bar(stat="identity", fill=color_code)+
  geom_text(aes(y = mean*1.1, label = round(mean,2)), position=position_dodge(0.9))+
  theme(axis.text.x = element_text(angle = 0)))

這看起來像ggplotly()中的一個錯誤,它應該自動進行轉換。

user2554330 弄清楚了您問題的難點。 rest 很簡單,因為我沒有看到您將 ggplot 轉換為 plotly 的實際嘗試,所以您可以這樣做:

從“標准” ggplot 方法中,只需包含ggplotly

p <- ggplot(...)
p <- p + geom_point(...)  # just an example...

fig <- ggplotly(p)
fig

這是一個例子:

library(plotly)
library(tidyverse)
library(ggplot2)


# ggplot
p <- ggplot(data=iris, aes(x = Sepal.Length, y = Sepal.Width)) 
p <- p + geom_point(aes(color=Species, shape=Species)) +
                    xlab("Sepal Length") +  ylab("Sepal Width") +
                    ggtitle("Sepal Length-Width")
# plotly
fig <- ggplotly(p)
fig

Plot:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM