WedX - журнал о программировании и компьютерных науках

Plotly плохо читает вывод ggplot

Я использую следующий код для построения некоторых точек данных, и он хорошо работает в ggplot. Однако, когда я загружаю это в ggplotly, метки визуализации и оси Y полностью меняются. Метка оси Y смещается вправо и переворачивается, а линии в центре становятся тоньше.

Код

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

file2 <- read.csv( text = RCurl::getURL("https://gist.githubusercontent.com/gireeshkbogu/806424c1777ff721a046b3e30e85af5a/raw/50ac0b4696f514677b4987b90305fdf879fbcd84/reproducible.examples.txt"), sep="\t")

p <- ggplot(data=subset(file2,!is.na(datetime)), 
           aes(x=datetime, y=Count, 
               color=Type, 
               group=Subject)) + 
  geom_point(size=4, alpha=0.6) +
  scale_y_continuous(breaks=c(0,1))+
  theme(axis.text.x=element_text(angle=90, size = 5))+
  facet_grid(Subject ~ ., switch = "y") +
  theme(axis.title.y=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank())+
  theme(strip.text.y.left = element_text(angle = 0, size=5)) +
  scale_color_manual(values=c("red", "#990000", "#330000", "#00CC99", "#0099FF"))

ggplotly(p)

Изображение Ggplot введите здесь описание изображения

Изображение Ggplotly введите здесь описание изображения

Воспроизводимый пример

Subject datetime    Type    Count
user1   4/16/20 15:00   A1  1
user1   3/28/20 13:00   A1  1
user2   4/29/20 15:00   A1  1
user2   5/02/20 09:00   A1  1
user1   2/19/20 18:00   A2  1
user1   4/20/20 16:00   A2  1
03.06.2020

  • Вы должны предоставить минимально воспроизводимый пример. Это должен быть минимальный, но полный и проверяемый пример. 03.06.2020
  • Добавьте это file2 <- read.csv( text = RCurl::getURL("https://gist.githubusercontent.com/gireeshkbogu/806424c1777ff721a046b3e30e85af5a/raw/50ac0b4696f514677b4987b90305fdf879fbcd84/reproducible.examples.txt"), sep = "\t") перед вашей функцией ggplot, чтобы сделать ваш вопрос воспроизводимым. Пожалуйста, также прочитайте первую ссылку, которой я поделился с вами, чтобы лучше понять воспроизводимый пример. Краткая информация заключается в том, что в большинстве случаев, чтобы поделиться своими данными, вам нужно запустить что-то вроде dput(head(data)) и избежать копирования и вставки. Ваше здоровье. 03.06.2020

Ответы:


1

Преобразование ggplot в plotly оказывается на удивление сложным! Многие функции ggplot молча удаляются или неправильно переводятся в plotly.

Если я не ошибаюсь, switch = "y" внутри вашего facet_grid молча сбрасывается.

Кроме того, у вас слишком много граней в вашем сюжете. Похоже, "Subject" создает более 30 аспектов. Я знаю, что заманчиво попытаться уместить как можно больше данных в один график, но вы действительно раздвигаете границы того, что вы можете делать с гранями здесь.

Я сделал некоторые модификации. Посмотрите, можно ли с этим работать:

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

# your original file
file2 <- read.csv( text = RCurl::getURL("https://gist.githubusercontent.com/gireeshkbogu/806424c1777ff721a046b3e30e85af5a/raw/50ac0b4696f514677b4987b90305fdf879fbcd84/reproducible.examples.txt"), sep="\t")
head(file2)

# scaling down the dataframe so that you have fewer facets per plot
file3 <- file2 %>% 
  as_tibble() %>% 
  na.omit() %>% 
  filter(Subject %in% c("User1",  "User2",  "User3",  "User4")) %>% 
  arrange(Subject, datetime)
head(file3)

# sending the smaller data frame to ggplot
p_2 <- ggplot(data=file3, 
              aes(x=datetime, y=Count, color=Type, group=Subject)) + 
  geom_point(size=4, alpha=0.6) +
  scale_y_continuous(breaks=c(0,1))+
  theme(axis.text.x=element_text(angle=90, size = 5)) +
  facet_grid(Subject ~ .) +        # removing "Switch" ; it is being dropped by plotly
  theme(axis.title.y=element_blank(),
        axis.text.y=element_blank(),
        axis.ticks.y=element_blank(),
        legend.position = "left") +    # move legend to left on ggplot
  theme(strip.text.y.left = element_text(angle = 0, size=5)) +
  scale_color_manual(values=c("red", "#990000", "#330000", "#00CC99", "#0099FF"))
p_2

ggplotly(p_2) %>% 
  layout(title = "Modified & Scaled Down Plot",  
         legend = list(orientation = "v", # fine-tune legend directly in plotly,
                       y = 1, x = -0.1))  # you may need to fiddle with these 

Модифицированный код дает мне этот график. Вам, вероятно, потребуется сделать несколько небольших групп по «Теме» и назвать сюжет для каждой группы.

модифицированное изображение ggplotly

05.06.2020
  • Кроме того, если вы еще не сталкивались с этим... попробуйте просмотреть эти сообщения: github.com/ropensci/plotly/issues/1086 stackoverflow.com/questions/43848724/ 05.06.2020
  • К сожалению, это не помогает. Вывод такой же, как и в вопросе, когда вы используете все данные для построения графика. 05.06.2020
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]