Извлекает информацию о тиках оси из сюжетной диаграммы - PullRequest
0 голосов
/ 13 ноября 2018

Я строю тепловую карту, используя R plotly:

set.seed(1)
df <- reshape2::melt(matrix(rnorm(100*20),100,20,dimnames = list(paste0("G",1:100),paste0("S",1:20))))

library(plotly)
library(dplyr)
plot_ly(z=c(df$value),x=df$Var2,y=df$Var1,colors=grDevices::colorRamp(c("darkblue","gray","darkred")),type="heatmap",colorbar=list(title="Scaled Value",len=0.4)) %>%
  layout(yaxis=list(title=NULL),xaxis=list(tickangle=90,tickvals=10,ticktext="X-Label"))

enter image description here

Как видите, plotly - этоне отображаются все отметки по оси Y.У меня вопрос, возможно ли, и если да, то как получить метки галочки по оси Y plotly, выбранные для отображения?

Я сохранил объект графика:

plotly.obj <- plot_ly(z=c(df$value),x=df$Var2,y=df$Var1,colors=grDevices::colorRamp(c("darkblue","gray","darkred")),type="heatmap",colorbar=list(title="Scaled Value",len=0.4)) %>%
  layout(yaxis=list(title=NULL),xaxis=list(tickangle=90,tickvals=10,ticktext="X-Label"))

Иосмотрелся вокруг и, похоже, plotly.obj$x$layoutAttrs должен хранить эту информацию, но это не так:

> plotly.obj$x$layoutAttrs
$`102ce55fd393e`
$`102ce55fd393e`$yaxis
$`102ce55fd393e`$yaxis$title
NULL


$`102ce55fd393e`$xaxis
$`102ce55fd393e`$xaxis$tickangle
[1] 90

$`102ce55fd393e`$xaxis$tickvals
[1] 10

$`102ce55fd393e`$xaxis$ticktext
[1] "X-Label"

Есть идеи?

Ответы [ 2 ]

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

Я получил ответ от github issue, который я разместил на ropensci/plotly:

set.seed(1)
df <- reshape2::melt(matrix(rnorm(100*20),100,20,dimnames = list(paste0("G",1:100),paste0("S",1:20))))

library(plotly)
library(dplyr)
plot_ly(z=c(df$value),x=df$Var2,y=df$Var1,colors=grDevices::colorRamp(c("darkblue","gray","darkred")),type="heatmap",colorbar=list(title="Scaled Value",len=0.4)) %>%
  layout(yaxis=list(title=NULL),xaxis=list(tickangle=90,tickvals=10,ticktext="X-Label")) %>% 
  htmlwidgets::onRender(
    "function(el, x) {
       alert(el._fullLayout.yaxis._vals.map(function(i) { return i.text; }));
    }"
  )

Появится окно браузера с метками галочек.

Теперь вопрос в том, можно ли это сохранить / передать в переменную R или записать в файл, чтобы это можно было сделать автоматически, а не в интерактивном режиме.Это будет другой пост.

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

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

levels(plotly.obj$x$attrs$`2c4c148651ae`$y)

Тики, которые окончательно отображаются, выбираются динамически и будут адаптироваться в зависимости от размера графика и т. Д.

Вы также можете проверить атрибуты с помощью plotly_json():

plot_ly(z=c(df$value),x=df$Var2,y=df$Var1,colors=grDevices::colorRamp(c("darkblue","gray","darkred")),type="heatmap",colorbar=list(title="Scaled Value",len=0.4)) %>%
      layout(yaxis=list(title=NULL),xaxis=list(tickangle=90,tickvals=10,ticktext="X-Label")) %>% 
      plotly_json()
...