2016-12-19 72 views
11

我最近更新了R和Rstudio,當然現在我寫的腳本的負載已經損壞。阻止plot_ly重新排序矩陣

具體而言,導致我發生問題的一件事是以下腳本。以前它用於輸出熱圖,它正好是,因爲它出現在我給它製作矩陣的值的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

回答

5

新舊熱點貼圖中的值實際上相同;你的標籤只是被重新排序。這是目前版本的陰謀行爲(我會讓別人決定是否稱它爲「bug」)。軸標籤按字母順序重新排序。下面是清楚地顯示出它的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)) 

link to new plot

+0

不錯啊看準數據看起來還不錯。我會更仔細地調查這些名字...... –

+0

@JoeHealey弄清楚它在做什麼,並編輯我的答案,如此 –

+0

解決方法是值得讚賞的,儘管這讓我覺得行爲必須*在*打包本身。我想在幾個數據集上運行腳本,如果我必須手動更改所有名稱,那麼所有這些都會破壞腳本的對象haha –

2

覺得還是發佈一個小更新了這一點。我與GitHub上的開發者談論了這個'錯誤' - 並且他們同意這不是理想的行爲。我認爲現在已經在plotly的dev分支中進行了修改,可以用R中的install_github()方法進行安裝,直到發佈新的CRAN版本。

全螺紋是在這裏: https://github.com/ropensci/plotly/issues/863#issuecomment-285761986