Как я могу применить таблицу соответствия цветов в R плотно - PullRequest
2 голосов
/ 22 апреля 2020

Для данных, касающихся спортивных команд, я хочу применять согласованные пользовательские цвета из справочной таблицы для любых графиков, которые я создаю. Это мое текущее усилие

library(tidyverse)
library(plotly)

lookup <- tibble(team=c("Dolphins","Sharks","Minnows"), color_id =c("dodgerblue","red","black"))

data <- tibble(team =c("Dolphins","Sharks","Minnows","Sharks"),V1=c(1:4),V2=c(4:1))

df <- data %>% 
    left_join(lookup)


colors <- lookup$color_id

plot_ly(df, x= ~ V1, y= ~ V2, color = ~ color_id, name =  ~ team, colors = colors) 

Output

Как видите, легенда не определяет цвета соответствующим образом. Например, дельфины должны быть голубыми

Заранее спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

У вас есть цвета, определенные в вашем исходном фрейме данных, поэтому есть две потенциальные опции, которые кажутся близкими к желаемому решению.
I () используется, чтобы указать, что переменная - это тождество (ie Используйте это значение как есть и не интерпретировать как фактор)

library(plotly)

df <- structure(list(team = c("Dolphins", "Sharks", "Minnows", "Sharks"
), V1 = 1:4, V2 = 4:1, color_id = c("dodgerblue", "red", "black", 
"red")), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))

colors <- lookup$color_id
#original
plot_ly(df, x= ~ V1, y= ~ V2, color = ~ color_id, name =  ~ team, colors = colors)  #wrong order, 1 different color

Здесь вы хотите раскрасить переменную команду, используя "colors", чтобы указать палитру.

#this works but color palette needs to the same order as the teams 
plot_ly(df, x= ~ V1, y= ~ V2, color = ~team, name =  ~ team, size=I(70), 
         colors = c("dodgerblue", "black", "red") ) 

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

#If we manually specify the desired colors by directly referencing the data frame it works:
plot_ly(df, x= ~ V1, y= ~ V2, color = ~I(color_id), name =  ~ team, size=I(50))

enter image description here

...