阻止plot_ly重新排序矩阵

时间:2016-12-19 21:29:34

标签: r plotly

我最近更新了R和Rstudio,现在我写的脚本很多都被打破了。

特别是导致我问题的一件事是下面的脚本。以前它用于输出热图完全,因为它出现在我给它制作矩阵的值的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轴排序): enter image description here

现在脚本生成: enter image description here

2 个答案:

答案 0 :(得分:5)

新旧热图中的值实际上相同;您的标签只是被重新排序。这是当前版本的一个奇怪的行为(我将让其他人决定是否将其称为&#34; bug&#34;)。轴标签按字母顺序重新排序。这是一个明确显示它的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")

由于当前版本的情节中的这种行为,我建议改用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))

here

答案 1 :(得分:2)

以为我只是发布一个小更新。我在GitHub上与开发者讨论了“bug” - 他们认为这不是理想的行为。我认为这已经在plotly的dev分支中进行了修改,可以在R中安装install_github()方法,直到发布新的CRAN版本。

完整主题在这里: https://github.com/ropensci/plotly/issues/863#issuecomment-285761986