заливка ggplot2 не преобразует правильное отображение цветов ggplotly - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь преобразовать изображение ggplot2, используя ggplotly(), но оно не конвертируется правильно.Мое изображение ggplot все время занимает две строки и имеет переменную цвета для компонента geom_line и переменную заливки для компонента geom_point.

Вот мой код для строго базового ggplotpart:

test_data1 = data.frame(
  filter = "Filter 1",
  time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
  ovr_perc = rnorm(n = 60, mean = 8, sd = 2),
  neg_perc = rnorm(n = 60, mean = 6, sd = 2),
  count = sample(50:250,60,replace=T)
)

test_data2 = data.frame(
  filter = "Filter 2",
  time = seq(as.Date("2017-01-01"), as.Date("2017-03-01"), "days"),
  ovr_perc = rnorm(n = 60, mean = 20, sd = 6),
  neg_perc = rnorm(n = 60, mean = 6, sd = 2),
  count = sample(50:250,60,replace=T)
)

test_data = rbind(test_data1, test_data2)

p = ggplot(test_data, aes(x=time, y=ovr_perc, group = factor(filter)))  +
  geom_line(aes(color=factor(filter))) +
  geom_point(aes(fill=neg_perc, size = count), shape=21) +
  scale_fill_gradient2(low = "darkgreen", mid = "yellow", high = "red1", 
                       midpoint = 5, limits = c(0, 10), oob = squish) +
  scale_colour_manual(values = c("pink", "green")) +
  theme_classic() 
p

Изображение должно выглядеть примерно так, как я хочу, чтобы оно выглядело:

enter image description here

Однако, когда я пытаюсь добавить код ggplotly, чтобы получить функцию всплывающей подсказки, получается следующее:

ggplotly(p)

enter image description here

Весь цветСхема по каждому из пунктов пропала.Как я могу изменить это так, чтобы он сохранял ту же цветовую гамму от изображения ggplot до изображения ggplotly?

1 Ответ

0 голосов
/ 10 декабря 2018

Как отмечено в открытом отчете об ошибках, связанном выше, эстетическое отображение geom_point для fill не работает должным образом, в то время как color работает нормально.Согласно сообщению об ошибке, проблема исчезает в версии dev пакета, но если у вас нет легкого доступа к ней (как и я), следующее работает, по крайней мере, на моем конце:

library(dplyr)
library(plotly)

p2 <- ggplot(test_data, aes(x=time, y=ovr_perc, linetype = filter))  +
  geom_line(data = . %>% filter(filter == "Filter 1"),
            colour = "pink") +
  geom_line(data = . %>% filter(filter == "Filter 2"),
            colour = "green") +
  geom_point(aes(color = neg_perc, size = count)) +
  scale_color_gradient2(low = "darkgreen", mid = "yellow", high = "red1", 
                       midpoint = 5, limits = c(0, 10), oob = squish) +
  scale_linetype_manual(values = c("solid", "solid"),
                        guide = guide_legend(override.aes = list(
                          color = c("pink", "green")
                        ))) +
  theme_classic(); p2

ggplotly(p2)

Пояснения:

  1. Используется color вместо fill для geom_point, что отлично работает.

  2. Строкинанесены на отдельные слои geom_line, цвета которых указаны непосредственно за пределами aes().

  3. Тип линий линий отображается внутри aes(), чтобы заставить создание легенды длякаждое значение фильтра, в то время как фактическое сопоставление, указанное в scale_linetype_manual, устанавливает обе линии сплошными.

ggplotly result

...