Plotly в R игнорирует пользовательские отметки для строк, которые похожи на даты? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь построить тепловую карту с графиком в R, и для целей прослушивателя событий (щелчок, лассо) мне нужно сохранить данные в их первоначальном виде, но я бы хотел изменить названия тиков на оси x ,

Если отметки напоминают дату (даже если они хранятся в виде строки), якобы игнорирует мои названия ручных отметок - plot1. В любом другом случае это работает как положено - plot2.

Это ошибка или особенность в сюжете? Или, как я могу принудительно заставить графически не обрабатывать столбец x как дату, а как строку и включить ручные имена тиков?

plot1 plot2

library("data.table")
library("plotly")
set.seed(564351654)

dt <- CJ(x= c("2018-01-01","2019-01-01","2020-01-01"),
            y= c("A","B"))

dt[,x2:=paste0("blabla",x)]
dt[,z:=runif(nrow(dt))]

#plot1 ignores my manual ticks
xticks <- dt[,unique(x)]
xvals <- paste0("year",substr(xticks,3,4))
# [1] "year18" "year19" "year20"
plot_ly(dt,
          x=~x,
          y=~y,
          z=~z,
          type="heatmap") %>%
    layout(
        title = "plot1",
        xaxis = list(
            autotick = F,
            tickmode = "array",
            ticktext = xvals,
            tickvals = xticks
        )
    )

#plot2 is all good.
xticks <- dt[,unique(x2)]
xvals <- paste0("year",substr(xticks,9,10))
# [1] "year18" "year19" "year20"
plot_ly(dt,
          x=~x2,
          y=~y,
          z=~z,
          type="heatmap") %>%
    layout(
        title = "plot2",
        xaxis = list(
            autotick = F,
            tickmode = "array",
            ticktext = xvals,
            tickvals = xticks
        )
    )

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете установить type в категорию:

#plot1 ignores my manual ticks
xticks <- dt[,unique(x)]
xvals <- paste0("year",substr(xticks,3,4))
# [1] "year18" "year19" "year20"
plot_ly(dt,
        x=~x,
        y=~y,
        z=~z,
        type="heatmap") %>%
  layout(
    title = "plot1",
    xaxis = list(
      autotick = F,
      tickmode = "array",
      ticktext = xvals,
      tickvals = xticks,
      type = "category"
    )
  )
...