не удалось преобразовать мой ggplot в интерактивный график с помощью функции ggplotly - PullRequest
0 голосов
/ 16 июня 2019

Я делаю сложенный барплот.Ширина полосы устанавливается в соответствии с переменной w.

library(plotly)
library(tidyverse)

df = data.frame(x = c("a","b","c"),
                w = c(1.2, 1.3, 4),
                y = c(9, 10, 6) )

dat = df %>% mutate(pos = 0.5 * (cumsum(w) + cumsum(c(0, w[-length(w)]))))

g= dat %>% ggplot(aes(x = pos,  y = y, fill = x)) + 
  geom_bar(aes( width = w), stat = "identity") + 
  scale_x_continuous(labels = df$x, breaks =  dat$pos)

ggplotly(g)

График ggplot в порядке.Но когда я попытался преобразовать его в интерактивный, используя ggplotly, я получил сообщение об ошибке, как показано ниже:

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

Кто-нибудь знает, почему это не удалось?Благодарю.

1 Ответ

1 голос
/ 16 июня 2019

Проблема в том, что вы масштабируете ось X.

Это должно сработать:

library(plotly)
  library(tidyverse)

  df = data.frame(x = c("a","b","c"),
                  w = c(1.2, 1.3, 4),
                  y = c(9, 10, 6) )

  dat = df %>% mutate(pos = 0.5 * (cumsum(w) + cumsum(c(0, w[-length(w)]))))

  g= dat %>% ggplot(aes(x = pos,  y = y, fill = x)) + 
    geom_bar(aes(width = w), stat = "identity") + 
    scale_x_continuous(labels = levels(df$x), breaks =  dat$pos)

  ggplotly(g)

ggplot, кажется, сохраняет ваши метки оси X как уровни факторов, которые ggplotlyне понимаетТак что вам просто нужно конвертировать их в character.

...