簡體   English   中英

R - 如何繪制一個二維矩陣,其中每個 (i,j) 條目的大小是標記的大小?

[英]R - How can I plot a 2D matrix where the magnitude of each (i,j) entry is the size of the marker?

使用 R(版本 3.5.1),我試圖制作這個圖:

感興趣的情節

現在,我有一個沒有列名的 27x27 矩陣。 此矩陣中的條目與 (i,j) 條目的“大小”相關——例如,與 (a,b) 或 (e,f) 相關聯的值。 我怎樣才能在 R 中做到這一點? 我嘗試了balloonplot,但我無法讓它工作,因為我的 R 版本太舊了,而且由於某種原因我無法更新我的 Conda 環境。 ggplot2 中是否有一個函數可以作為很好的替代品?

我的 (27x27) 矩陣如下所示:

100, 53, 76, 23, 5330, ... , 90
...
230, 89, 23, 22, 1000, ... , 19

因此,與 (1,1) 相關聯的條目將大於 (1,2),但 (1,5) 將是圖中最大的正方形(或圓,無關緊要)。 我還有一個 DataFrame 可以使用。 它具有所有字母和“空格”作為行/列名稱。

注意:在我的 Jupyter Notebook 的 Conda 環境中,我似乎無法獲得大於 3.5.1 的 R 版本。 因此,我不能使用balloonplot()。

謝謝!

ggplot2可以很好地做到這一點。 讓我們從一個示例矩陣開始,然后將其轉換為 data.frame,因為這是ggplot2工作方式。

library(tidyverse)
MyMat <- matrix(data = rnorm(27*27, mean = 100, sd = 20), 
                ncol = 27, nrow = 27)
MyDataFrame <- MyMat %>% as.data.frame()
names(MyDataFrame) <- c(letters[1:26], "-")

現在我們已將您的矩陣轉換為 data.frame,讓我們將其重塑為長格式,以便我們可以繪制它。

MyDataFrame <- MyDataFrame %>% 
      mutate(YCol = c(letters[1:26], "-")) %>% 
      pivot_longer(names_to = "XCol", values_to = "Value", -YCol) %>% 
      mutate(YCol = factor(YCol, levels = c("-", letters[26:1])), 
             XCol = factor(XCol, levels = c(letters[1:26], "-")))

請注意,我將 XCol 和 YCol 列轉換為因子,以便它們按照我們希望它們在圖中的方式進行排序。

ggplot(MyDataFrame, aes(x = XCol, y = YCol, size = Value)) +
      geom_point(shape = 15, color = "white") +
      scale_size_continuous(range = c(0.1, 5)) +
      xlab(NULL) + ylab(NULL) +
      theme(panel.background = element_rect(fill="black", color=NA),
            panel.grid.minor.y = element_line(color = NA),
            panel.grid.minor.x = element_line(color = NA),
            panel.grid.major = element_line(colour = NA), 
            legend.position = "none")

ggplot2 圖

您可以使用scale_size_continuous的 range 部分將大小調整為最適合您的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM