2013-12-13 270 views
1

我想創建從下面的數據文件的簡單拼接圖:如何根據預先計算的計數數據繪製拼接圖?

Country|Name|Count 
US|Sam|10 
US|John|30 
UK|Sam|30 
UK|John|2 
CA|Sam|23 
CA|Bill|45 

我期望能獲得與x軸的第一列馬賽克情節和高度的層疊矩形「計數」爲每個類別「名稱」。

我想:

data<-read.table("my_table.txt", header=T, sep="|") 
mosaicplot(data) 

但它創建了太多的行和列的怪物。

我的問題是如何提及「Count」變量的值應該是y值? 在製作馬賽克之前,我嘗試使用ftable(graph),但即使表格沒有正確排列。

+1

回答基於你的標題:引入是做得正確,使用STR(數據),你可以看到: 'data.frame':\t 6 OBS。 3個變量: $國家:因子w/3等級「CA」,「UK」,「US」:3 3 2 2 1 1 $名稱:因子w/3等級「Bill」,「John」,.. :3 2 3 2 3 1 $計數:詮釋10 30 30 2 23 45 我建議改變你的標題以匹配你關於馬賽克圖的問題 – Freddy

+0

[Product plots](http://vita.had.co.nz/論文/ prodplots.pdf)和[如何在ggplot2中創建Marimekko/Mosaic圖](http://stackoverflow.com/questions/19233365/how-to-create-a-marimekko-mosaic-plot-in-ggplot2)可能是相關的。 – zx8754

+0

謝謝!我得到了馬賽克圖的原理,而不是將「Count」定義爲y變量的方式。 – lqdo2000

回答

2

一種可能性是使用rep'爆炸'您的預先計算的數據。

country <- with(df, rep(x = Country, times = Count)) 
name <- with(df, rep(x = Name, times = Count)) 

df2 <- data.frame(country, name) 
mosaicplot(country ~ name, data = df2) 

enter image description here

+0

感謝Henrik,這就是我正在尋找的東西! – lqdo2000

+0

很高興聽到它按你想要的方式工作!乾杯。 – Henrik

1

可能,我建議從vcdspine功能:

# require(vcd) 
dt <- xtabs(Count~Name+Country, data=data) 
spine(dt) 

?spine「脊柱圖是鑲嵌地塊的特殊情況下,可以看作是堆疊的一般化(或突出顯示)條形圖。類似地,旋量圖是直方圖的擴展。「

spineplot函數也可用於基礎圖形。

enter image description here

+0

Thansk TWL!雖然軸是倒置的(只需要改變它們的順序)非常方便 – lqdo2000

+0

@ lqdo2000,不客氣,實際上,請嘗試'xtabs(Count〜Country + Name,data = data)'來更改順序。 – TWL