Предотвращать матрицу переупорядочения plot_ly

Недавно я обновил R и Rstudio, и, естественно, теперь загрузился сценарий, который я написал.

В частности, одна вещь, которая вызывает у меня проблемы, - это script ниже. Раньше она использовалась для вывода тепловой карты точно так же, как она появилась в значениях csv, которые я дал ей, чтобы сделать матрицу. Теперь более поздние версии, похоже, изменили порядок их заказа. Теперь он упорядочивает столбцы и их метки в возрастающем числовом порядке, что приводит к их выходу из строя. Как я могу предотвратить его переупорядочение столбцов или указать, что он обрабатывает их, как я им предоставил?

Незначительные эстетические проблемы не так уж и важны.

Здесь код:

library(ggplot2)
library(plotly)
library(RColorBrewer)
# Read in data
library(readr)


adjwallace <- read.csv() # see the link for the actual data http://pastebin.com/bBLs8uLt


rownames(adjwallace_recluster)[17] <- "Species" #Rename STree
names(adjwallace_recluster)[17] <- "Species"


# Preferences for xaxis
font.pref <- list(
  size = 20,
  family = "Arial, sans-serif",
  color = "black"
)

x.axisSettings <- list(
  title = "",
  zeroline = FALSE,
  showline = FALSE,
  showticklabels = TRUE,
  tickfont = font.pref,
  showgrid = TRUE
)

# Preferences for yaxis
y.axisSettings <- list(
  title = "",
  zeroline = FALSE,
  showline = FALSE,
  showticklabels = TRUE,
  tickfont = font.pref,
  showgrid = TRUE
)

margins <- list(
  l = 50,
  r = 10,
  b = 50,
  t = 10,
  pad = 1
)

# Plot graph as a heatmap
p <-plot_ly(z = ~data.matrix(adjwallace),
        colors = "YlOrRd",
        name = "Adjusted Wallace Coefficients",
        x = names(adjwallace),
        y = names(adjwallace),
        colorbar = list(title = "Adjusted Wallace <br> Coefficient", titlefont = font.pref),
        type = "heatmap") %>%
        layout(xaxis=x.axisSettings,
         yaxis=y.axisSettings,
         plot_bgcolor='rgba(0,0,0,0)',
         paper_bgcolor='rgba(0,0,0,0)',
         margin = margins
          )
p

И изображение, которое этот код использовал для создания (обратите внимание на порядок оси x и y): введите описание изображения здесь

И теперь script производит: введите описание изображения здесь

Ответ 1

Значения в новых и старых тепловых картах фактически идентичны; ваши ярлыки просто переупорядочиваются. Это странное поведение текущей версии plotly (я позволю другим решить, называть ли это "ошибкой" ). Маркеры Axis переупорядочиваются в алфавитном порядке. Здесь MWE, который показывает это ясно:

dat <- matrix(c(1,2,3), nrow = 30, ncol = 30)
dimnames(dat) <- list(rownames(dat, FALSE, "r"), 
                      colnames(dat, FALSE, "c"))
plot_ly(z=dat, x=colnames(dat), y = rownames(dat),
        type = "heat map")

Из-за этого поведения в текущей версии plotly я бы предложил использовать ggplot2. Фактически, вы можете прийти к своему первоначальному сюжету в меньшем количестве строк следующим образом:

adjwallaceX <- melt(t(as.matrix(adjwallace)))
ggplot(data = adjwallaceX, aes(x = Var1, y = Var2)) +
    geom_tile(aes(fill = value)) +
    coord_equal() +
    scale_fill_gradientn(colours = rev(brewer.pal(9,"YlOrRd"))) +
    labs(fill='Adjusted Wallace Coefficient') +
    theme(axis.title.x=element_blank(),
        axis.title.y=element_blank(),
        axis.text.x=element_text(angle = 315, hjust = 0))

ссылка на новый сюжет

Ответ 2

Думал, что я просто опубликую небольшое обновление. Я поговорил с разработчиками GitHub о "ошибке", и они согласились с ним не так, как с идеальным поведением. Я думаю, что теперь это было изменено в ветки dev, которая может быть установлена ​​с помощью метода install_github() в R, пока не будет выпущена новая версия CRAN.

Полная тема здесь: https://github.com/ropensci/plotly/issues/863#issuecomment-285761986