R сюжет, как использовать add_trace () для графика с группировкой цветов - PullRequest
0 голосов
/ 02 ноября 2018

Как я могу получить следующий код, чтобы нарисовать линию между (1,2) и (3,2)?

plot_ly(x=c(1,2,3),
        y=c(1,2,3),
        type='scatter',
        mode='markers',
        color=as.factor(c('a','b','c')))%>%
  add_trace(x=c(1,3,NA),
            y=c(2,2,NA),
            mode='lines')

Решение здесь R график add_trace для диаграммы с группами цветов не работает. Благодарю. enter image description here

Редактировать: Использование inherit=FALSE делает работу (спасибо Джонни Фелпс)

plot_ly(x=c(1,2,3),
        y=c(1,2,3),
        type='scatter',
        mode='markers',
        color=as.factor(c('a','b','c')))%>%
  add_trace(x=c(1,3),
            y=c(2,2),
            mode='lines',
            inherit = FALSE,
            line=list(color='black'))

enter image description here

1 Ответ

0 голосов
/ 02 ноября 2018

Отвечая на ваш комментарий. Иногда я испытываю настоящую боль с Плотли. Такого рода работы, но легенда беспорядок, и нужно будет немного поработать.

Задача состоит в создании нескольких цветных линий из одной серии. Я не думаю, что Plotly обрабатывает их изначально (хотелось бы увидеть лучший пример). Поэтому я только что сделал это. Вы можете получить что-то более элегантное с опцией group=.

Я добавил 4-е значение, поскольку оно лучше показывает результат.

edit: у меня настоящая болевая точка с цветом "а". Если вы посмотрите на первый р, он зеленый. После цикла оно становится коричневым. Вот почему я добавил «линии + маркеры» вместо «маркеры». Кто-то будет знать, как улучшить это, но это еще одна боль Plotly

library(plotly)
library(RColorBrewer)

dat <- data.frame(x1=c(1,2,3,4), y1=c(1,2,3,4), mycolor=c('a','b','c','d'), 
                  x2=c(1,2,3,NA), y2=c(1,2,3,NA),
                  stringsAsFactors = FALSE) 
colours <- brewer.pal(length(unique(dat$mycolor)), "Dark2")
p <- plot_ly(data=dat, x=~x1, y=~y1, colors=colours) %>%
   add_trace(mode='markers', color=~mycolor, data=dat, 
             x=~x1, y=~y1) 
p

N <- nrow(dat)-1
for(i in 1:N){
  p <- p %>% add_trace(data=dat[i:(i+1),], x=~x2, y=~y2, mode='lines+markers',
                       type="scatter", color=colours[i],
                       inherit=FALSE) 
}
p
...