add_trace: управление типом линии без предупреждения - PullRequest
0 голосов
/ 29 декабря 2018

Я пишу функцию, которая возвращает сюжетный объект.Мне уже удалось контролировать цвета.Однако у меня проблемы с контролем типа линии.В настоящее время я использую что-то вроде:

plot_ly(colors=c(rep(c("#CD0C18","#1660A7"),each=3),'#9467bd'),linetypes = c(rep(c("dot","dash","solid"),2),"dot")) %>% 
  add_trace(data=long_data,x=~month,y=~temperature,color=~measure,linetype=~measure,type="scatter",mode="lines",line=list(width=4)) %>%
  layout(title = "Average High and Low Temperatures in New York",
         xaxis = list(title = "Months", categoryorder="array", categoryarray=month),
         yaxis = list (title = "Temperature (degrees F)"))

, которое возвращает мне предупреждение:

Предупреждение:

plotly.js поддерживает только 6 различных типов линий

Предупреждение имеет смысл, поскольку measure имеет семь уровней. Однако я хотел бы контролировать linetype, не получая предупреждения каждый раз, когда у меня есть более 6 трасс для построения - есть ли способ?

Мои данные выборки:

month <- c('January', 'February', 'March', 'April', 'May', 'June', 'July',
           'August', 'September', 'October', 'November', 'December')
high_2000 <- c(32.5, 37.6, 49.9, 53.0, 69.1, 75.4, 76.5, 76.6, 70.7, 60.6, 45.1, 29.3)
low_2000 <- c(13.8, 22.3, 32.5, 37.2, 49.9, 56.1, 57.7, 58.3, 51.2, 42.8, 31.6, 15.9)
mid_2000 <-apply(rbind(high_2000,low_2000),2,mean)
high_2007 <- c(36.5, 26.6, 43.6, 52.3, 71.5, 81.4, 80.5, 82.2, 76.0, 67.3, 46.1, 35.0)
low_2007 <- c(23.6, 14.0, 27.0, 36.8, 47.6, 57.7, 58.9, 61.2, 53.3, 48.5, 31.0, 23.6)
high_2014 <- c(28.8, 28.5, 37.0, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9)
low_2014 <- c(12.7, 14.3, 18.6, 35.5, 49.9, 58.0, 60.0, 58.6, 51.7, 45.2, 32.2, 29.1)

data <- data.frame(month, high_2000, low_2000,mid_2000, high_2007, low_2007, high_2014, low_2014)

long_data<-tidyr::gather(data,measure,temperature,-month) 

1 Ответ

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

Как видно здесь , предупреждение появляется в

validLinetypes <- as.character(Schema$traces$scatter$attributes$line$dash$values)
if (length(pal) > length(validLinetypes)) {
  warning("plotly.js only supports 6 different linetypes", call. = FALSE)
}

Итак, если вы хотите отключить только это предупреждение, вы можете сделать только две вещи: переопределитьВся функция или вручную расширить Schema$traces$scatter$attributes$line$dash$values.Последнее несколько менее навязчиво и может быть сделано с помощью

tmp <- plotly:::Schema
tmp$traces$scatter$attributes$line$dash$values <- c(tmp$traces$scatter$attributes$line$dash$values, rep(NA, 100))
assignInNamespace("Schema", tmp, ns = "plotly")

Здесь мы добавляем NA 100 раз, чтобы до 106 типов линий теперь не вызывали предупреждение.Последняя строка переопределяет переменную Schema с помощью tmp в среде пакета plotly.

Вектор Schema$traces$scatter$attributes$line$dash$values используется только (через validLinetypes) здесь четыре разаи, глядя на них, кажется, что этот обман не имеет никаких вероятных побочных эффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...