Проблема с преобразованием geom-tile ggplot в график с использованием ggplotly - PullRequest
2 голосов
/ 17 июня 2020

Я попытался преобразовать диаграмму geom-tile ggplot в график с помощью функции ggplotly. Однако я понял, что результаты разные. Пожалуйста, перейдите по ссылке ниже, чтобы увидеть разницу. Кроме того, на диаграмме ggplotly также отсутствует цветная полоса. Пожалуйста помоги.

Изображение: Разница между ggplot и ggplotly chart

Это код, на который я ссылался: https://www.r-graph-gallery.com/285-waffer-map.html

Код:

madeUp=read.table("https://raw.githubusercontent.com/holtzy/R-graph-gallery/master/DATA/madeUp.csv", sep=",", header=T)


library(tidyverse)


theData <- madeUp %>% 
  group_by(X.Axis, Y.Axis, Group) %>% 
  dplyr::summarize(statistic=mean(randVals, na.rm = TRUE))

fig <- ggplot(theData, aes(X.Axis, Y.Axis)) +

  coord_cartesian(xlim = c(0,20), ylim = c(0,20)) +
  scale_x_continuous(breaks = seq(0,20)) +
  scale_y_continuous(breaks = seq(0,20))+

  geom_tile(aes(fill=statistic))+
  guides(fill=guide_legend(title='Legend'))+

  theme(
    panel.background = element_rect(fill= 'white', color = 'white'),
    panel.grid.major = element_line(color='#E0E0E0'),
    panel.grid.minor = element_line(color='#E0E0E0')
  )+

  ggtitle('Wafer Map')+
  facet_wrap(~Group)+
  scale_fill_gradientn(colors = rainbow(100))

#Convert to ggplotly chart
fig <- ggplotly(fig)

Спасибо

1 Ответ

1 голос
/ 17 июня 2020

Похоже, вы наткнулись на ошибку (или две) в ggplotly (возможно, вам стоит поднять вопрос на github ).

  1. Первая проблема заключается в том, что «пробелы» в наборе данных теряются при преобразовании ggplot через ggplotly.

  2. Вторая проблема заключается в том, что ggplotly не может преобразовать объединенную цветовую шкалу, добавленную guides(fill=guide_legend(title='Legend')).

В качестве обходного пути для

  1. первая проблема вы можете расширить набор данных чтобы включить все комбинации X.Axis, Y.Axis и Group.
  2. во втором вопросе вы можете удалить разделенную шкалу цветов и заменить ее непрерывной шкалой цветов.

Не идеально, но таким образом преобразование через ggplotly дает вам правильный сюжет и легенду. Попробуйте это:

madeUp=read.table("https://raw.githubusercontent.com/holtzy/R-graph-gallery/master/DATA/madeUp.csv", sep=",", header=T)

theData <- madeUp %>% 
  group_by(X.Axis, Y.Axis, Group) %>% 
  dplyr::summarize(statistic=mean(randVals, na.rm = TRUE)) %>% 
  ungroup()

# Expand the Dataset to includ all Combinations of X.Axis, Y.Axis and Group
theData1 <- tidyr::expand_grid(X.Axis = 0:49, Y.Axis = 0:30, Group = LETTERS[1:6]) %>% 
  dplyr::left_join(theData)

fig <- ggplot(theData1, aes(X.Axis, Y.Axis)) +
  coord_cartesian(xlim = c(0,20), ylim = c(0,20)) +
  scale_x_continuous(breaks = seq(0,20)) +
  scale_y_continuous(breaks = seq(0,20))+
  geom_tile(aes(fill=statistic))+
  # Remove the binned colorbar
  # guides(fill=guide_legend(title='Legend'))+
  labs(fill = "Legend") +
  theme(
    panel.background = element_rect(fill= 'white', color = 'white'),
    panel.grid.major = element_line(color='#E0E0E0'),
    panel.grid.minor = element_line(color='#E0E0E0')
  )+

  ggtitle('Wafer Map')+
  facet_wrap(~Group)+
  # in case of ggplot2: Set the fill color for NA to "transparent"
  scale_fill_gradientn(colors = rainbow(100), na.value = "transparent")
fig

ggplotly(fig)

enter image description here

...