R可視化 | 馬賽克圖

2021-01-19 凹凸數據


作者:莊閃閃

來源:莊閃閃的成長手冊


馬賽克圖(mosaic plot),顯示分類數據中一對變量之間的關係,原理類似雙向的100%堆疊式條形圖,但其中所有條形在數值/標尺軸上具有相等長度,並會被劃分成段。可以通過這兩個變量來檢測類別與其子類別之間的關係。

主要優點

馬賽克圖能按行或按列展示多個類別的比較關係。

主要缺點

難以閱讀,特別是當含有大量分段的時候。此外,我們也很難準確地對每個分段進行比較,因為它們並非沿著共同基線排列在一起。

適用

馬賽克圖比較適合提供數據概覽。

注意

非坐標軸非均勻的馬賽克圖也是統計學領域標準的馬賽克圖,一個非均勻的馬賽克圖包含以下構成元素:①非均勻的分類坐標軸;②面積、顏色均有含義的矩形塊;③圖例。對於非均勻的馬賽克圖,關注的數據維度非常多,一般的用戶很難直觀理解,在多數情況下可以被拆解成多個不同的圖表,以下我們會對其進行繪製。

數據介紹

數據構建代碼來源《R數據可視化之美》,任意擬定一個數據框。並用melt()函數將數據轉化成以下結果:

library(ggplot2)
library(RColorBrewer)
library(reshape2)  #提供melt()函數
library(plyr)      #提供ddply()函數,join()函數

df <- data.frame(segment = c("A", "B", "C","D"),
                      Alpha = c(2400 ,1200, 600 ,250), 
                      Beta = c(1000 ,900, 600, 250),
                      Gamma = c(400, 600 ,400, 250), 
                      Delta = c(200, 300 ,400, 250))

melt_df<-melt(df,id="segment")

計算出每行的最大,最小值,並計算每行各數的百分比。ddply()對data.frame分組計算,並利用join()函數進行兩個表格連接。

segpct<-rowSums(df[,2:ncol(df)])
for (i in 1:nrow(df)){
  for (j in 2:ncol(df)){
    df[i,j]<-df[i,j]/segpct[i]*100  #將數字轉換成百分比
  }
}

segpct<-segpct/sum(segpct)*100
df$xmax <- cumsum(segpct)
df$xmin <- (df$xmax - segpct)

dfm <- melt(df, id = c("segment", "xmin", "xmax"),value.name="percentage")
colnames(dfm)[ncol(dfm)]<-"percentage"

#ddply()函數使用自定義統計函數,對data.frame分組計算
dfm1 <- ddply(dfm, .(segment), transform, ymax = cumsum(percentage))
dfm1 <- ddply(dfm1, .(segment), transform,ymin = ymax - percentage)
dfm1$xtext <- with(dfm1, xmin + (xmax - xmin)/2)
dfm1$ytext <- with(dfm1, ymin + (ymax - ymin)/2)

#join()函數,連接兩個表格data.frame
dfm2<-join(melt_df, dfm1, by = c("segment", "variable"), type = "left", match = "all")

方法

繪製馬賽克圖可以使用ggplot2包的geom_rect()函數、ggmosaic包的geom_mosai()函數、graphics包的mosaicplot()函數,或者vcd包的mosaic()函數繪製馬賽克圖。接下來對他們進行一一實現。

1、ggplot2包的geom_rect()函數

這個方法比較複雜,圖層一層一層疊加得到的,不過靈活性比較強,可根據自己喜好進行修改。

ggplot()+
  geom_rect(aes(ymin = ymin, ymax = ymax, xmin = xmin, xmax = xmax, fill = variable),dfm2,colour = "black") + 
  geom_text(aes(x = xtext, y = ytext,  label = value),dfm2 ,size = 4)+
  geom_text(aes(x = xtext, y = 103, label = paste("Seg ", segment)),dfm2 ,size = 4)+
  geom_text(aes(x = 102, y = seq(12.5,100,25), label = c("Alpha","Beta","Gamma","Delta")), size = 4,hjust = 0)+
  scale_x_continuous(breaks=seq(0,100,25),limits=c(0,110))+
  theme(panel.background=element_rect(fill="white",colour=NA),
        panel.grid.major = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
        panel.grid.minor = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
        text=element_text(size=15),
        legend.position="none")

**圖形解釋:**這個馬賽克圖,從A這列縱向看可以看出各個指標(Delta,Gamma等)的佔比情況,從橫向來看,不同變量(A,B等)的寬度代表該變量佔所有數據的佔比情況,越寬說明該變量數據總和越大。

2、vcd包的mosaic()函數

用該函數,我們就不用前面那麼複雜的數據集進行繪製了,只要使用xtabs轉換成以下數據格式即可,方便簡單。

library(vcd)
table<-xtabs(value ~variable+segment, melt_df)
mosaic( ~segment+variable,table,shade=TRUE,legend=TRUE,color=TRUE)

3、graphics包的mosaicplot()函數

該方法和上面類似,掉包就行,數據類型與上面相同。

library(graphics)
library(wesanderson) #顏色提取
mosaicplot( ~segment+variable,table, color = wes_palette("GrandBudapest1"),main = '')


參考資料[1]

《R數據可視化之美》 : https://blog.csdn

[2]

[R語言][可視化] 之 Mosaic Plot(馬賽克圖): https://blog.csdn.net/tobeyourlover/article/details/52704333?%3E

相關焦點

  • 作圖詳解 | 利用R繪製馬賽克圖
    馬賽克圖常用於展示屬性數據的各分類數量關係,尤其善於展示高階列聯表數據。
  • 數據可視化之R語言
    分類數據的可視化使用條形圖、點圖、柱形圖、脊柱圖、馬賽克圖、餅圖及四折圖連續數據的可視化使用箱線圖、直方圖、散點圖及其變種、帕累託圖==============================================一、分類數據的可視化
  • 用NCL畫馬賽克圖
    前陣子在國家氣候中心的網站上看到一張降水異常概率圖:對於這一個個格點式,而非平滑的曲線式填圖,講真,我也不清楚它的官方名字叫啥,索性就給它起了個名字——馬賽克圖
  • 【R】ggcor相關性可視化
    上周,我們寫了一個 ggcor 對相關性可視化的帖子 (【ggcor】相關性圖的另外一種展示)。裡面用到的例子是厚老師的示例數據。這次,我自己構建數據集,探索如何使用 ggcor 進行展示。# 顯示左側標籤        scale_size_manual(values = c(0.5, 1, 2)) +        scale_colour_manual(values = c("#D95F02", "#1B9E77", "#A2A2A288")) +        guides(size = guide_legend(title = "Pearson's r"
  • 【R語言】相關性分析、相關係數的顯著性檢驗及可視化
    本篇文章介紹基於R語言的相關性分析、相關係數的顯著性檢驗及可視化,該教程為個人筆記,大家也可參考學習,不足之處也歡迎大家批評指正!相關性分析用於評估兩個或多個變量之間的關聯,能通過定量指標描述變量之間的強弱、直接或間接聯繫。
  • R語言可視化之UpSetR包
    作者:嚴濤簡介集合可視化我們用得最多的是韋恩圖今天介紹一個R包UpSetR,專門用來集合可視化,來源於UpSet,Python裡面也有一個相似的包py-upset。此外還有個UpSetR shiny app以及原始碼.
  • kaggle:R可視化分析金拱門餐廳食物營養性(一)
    我們偶爾吃的這家快餐,它滴食物營養性咋樣,今天我們就來對kaggle競爭上的這份數據做一個可視化分析!公眾號後臺回復「金拱門」下載數據集。#可視化分析食物類別繪圖(圖1)m <- list(l = 50,r = 50,b = 100,t = 100,pad = 4)marker = list(color = brewer.pal(9, "Set1"))p <- plot_ly(x = menu$Category,marker = list(color = '#45171D'),type = "histogram
  • Nature子刊經典網絡圖在R中的繪製,網絡模塊性可視化
    test_design.csv")#### 加載包library(psych)library(igraph)##加載函數 (可後臺獲取)setwd("D:/R_input")source("CorrDF.R")source("cor.mtest.R")## 進行相關分析aa <- rcorr
  • Matlab畫圖2 連續函數的可視化
    連續函數可視化包含三個重要環節:先選定一組自變量的離散採樣點(包含採樣的起點、終點和採樣步長),然後由所給函數算出相應的一組因變量離散數據;離散數據可視化;圖形上離散點的連續化*sin(9*t3);subplot(2,2,1),plot(t1,y1,'r.') %畫離散點axis([0,pi,-1,1]),title('(1)點過少的離散圖形')subplot(2,2,2),plot(t1,y1,t1,y1,'r.')
  • python可視化
    基於pandas的內置可視化基本繪圖Series和DataFrame上的這個功能只是使用matplotlib庫的plot()方法的簡單包裝實現。np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])df.hist(bins=20)箱形圖Boxplot可以繪製調用Series.box.plot()和DataFrame.box.plot()或DataFrame.boxplot()來可視化每列中值的分布
  • 看風電行業如何利用數據可視化
    「微風在吹,扇葉在轉,大屏在看」袋鼠雲作為某風電設備公司的數據可視化平臺大屏定製服務合作夥伴,藉助數據可視化EasyV平臺與第三方數據結合設置總屏對公司業務總覽、生產經營信息進行實時展示,此外還設置了分頁屏對風電場的運行數據,布局總覽,機表總覽,以及業務系統PHM和運維等需要實時監控的數據進行可視化大屏建設
  • 普氏分析結果可視化--物種與環境、物種與物種、物種與功能關聯分析
    這兩種方法的具體原理我這裡就不講了,網上有很多,感興趣的朋友可以自行搜索一下,本推文主要介紹分析的實現方法以及對結果可視化的美化。輸入數據既然是評估兩組數據的相關性,那麼輸入數據就是兩個數據表,分別對應要分析的兩組數據,本推文已一套樣本的細菌群落豐度數據及其對應的環境因子數據為例。
  • 百度數據可視化實驗室正式成立,發布深度學習可視化平臺 Visual DL
  • 用數據說話,R語言有哪七種可視化應用?
    今天,隨著數據量的不斷增加,數據可視化成為將數字變成可用的信息的一個重要方式。R語言提供了一系列的已有函數和可調用的庫,通過建立可視化的方式進行數據的呈現。在使用技術的方式實現可視化之前,我們可以先和雷鋒網一起看看如何選擇正確的圖表類型。作者 Dikesh Jariwala是一個軟體工程師,並且在Tatvic平臺上編寫了一些很酷很有趣的程序。
  • 使用Matplotlib可視化數據的5個強大技巧
    數據可視化用於以更直接的表示方式顯示數據,並且更易於理解。它可以用柱狀圖、散點圖、折線圖、餅圖等形式形成。許多人仍然使用Matplotlib作為後端模塊來可視化他們的圖形。在這個故事中,我將給你一些技巧,使用Matplotlib創建一個優秀圖表的5個強大技巧。1.
  • r 秩和檢驗 - CSDN
    可視化數據並在R中計算的Wilcoxon測試ř函數用於計算的秩檢驗為了執行兩個樣本的Wilcoxon檢驗,比較兩個獨立樣本(x&y)的均值,R函數wilcox.test()可以如下使用:wilcox.test(x, y, alternative = "two.sided")
  • Python數據可視化實例之繪製圖表
    Python數據可視化實例之繪製圖表原創 蟲蟲安全 2018-09-05 17:41:57得利於語言的簡單明了、豐富的數據結構、豐富的類和模塊,Python如今成了數據科學中的香餑餑,成了matlab、R語言之外又一強大的數據分析工具。拋開其他方面的、今天蟲蟲帶大家一起來探索Python在數據可視化方面的應用。
  • 整理了一些自己可能會用到的R包~20210125更新
    主要功能是畫月牙狀的點圖ggClusterNet微生信生物 公眾號 號主開發的包 可視化網絡cola做一致性聚類(consensus clustering)的R包。公眾號 方圓之處。號主是circlize 和ComplexHeatmapR包的作者,絕對的大佬級別了。
  • 太驚豔了,原來算法可視化後可以這麼藝術
    來看看算法的執行過程 我們用紅點表示活躍採樣點,在每一輪的循環中從所有活躍採樣點中隨機選取一個點,然後以該點為圓心,分別以r和2r為半徑作兩個同心圓,其中r為 兩個採樣點之間所允許的最小間距。然後我們在r與2r之間的環形區域隨機生成一些候選採樣點(白點),接下來的步驟就是從這些候選採樣點中篩選出一個滿足 條件的採樣點了。 注意到圖中的灰色區域,它們是由已固定的採樣點(包括紅點和黑點)為圓心,r為半徑作圓所形成的區域,我們可以稱之為「禁區」。