2010-07-25 68 views
4

我一直在試圖根據分類數據創建一個3D條形圖,但還沒有找到辦法。如何用R中的分類數據製作3D圖?

這很容易解釋。考慮下面的例子數據(真實的例子更復雜,但是它減少到這個數字),顯示出由於收入和年齡而產生的分類數據的相對風險。

我想在3D條形圖(類似於想法與http://demos.devexpress.com/aspxperiencedemos/NavBar/Images/Charts/ManhattanBar.jpg)中顯示。我查看了scatterplot3d軟件包,但它僅適用於散點圖,並且不能很好地處理分類數據。我能夠製作一個3d圖表,但它顯示的是點而不是3d條。對於我所需要的沒有圖表類型。我也嘗試了rgl包,但也沒有運氣。我一直在Google上搜索超過一個小時,並沒有找到解決方案。我有一份ggplot2 - 用於數據分析的優雅圖形書,但ggplot2沒有這種圖表。

是否有另一個我可以使用的免費軟件應用程序? OpenOffice 3.2也沒有這個圖表。

謝謝你的任何提示。

Age,Income,Risk 
young,high,1 
young,medium,1.2 
young,low,1.36 
adult,high,1 
adult,medium,1.12 
adult,low,1.23 
old,high,1 
old,medium,1.03 
old,low,1.11 
+3

您發佈的圖表非常糟糕。你可以粗略地瞭解一些相對數量,但是由於perspectie的差異嗎?那絕對是什麼?......印第安納州發生了什麼事? 不要試圖模仿它。 – John 2010-07-25 07:38:30

+0

爲什麼不使用2D圖表(例如使用'image')並用顏色表示第三維? – nico 2010-07-25 08:01:31

+0

@nico我這樣做了,但是我需要3張圖,然後爲了特殊目的,我需要它,空間有限。這不是一個科學項目。也就是說,它比我在R中使用3D做得更好,所以我最終可能會使用它。 – wishihadabettername 2010-07-25 14:16:10

回答

6

我不知道如何使R中三維圖表,但也有其他更好的方式來表示比用3D條形圖這個數據。三維圖表使得解釋變得困難,因爲條形的高度然後由三維透視傾斜。在這個例子圖表中,很難說2004年威斯康星州是否真的高於威斯康星州2001年,或者如果這是一個觀點的影響。如果它更高,多少呢?

由於AgeIncome都具有有意義的順序,所以製作折線圖並不會太糟糕。 ggplot2 code:

ggplot(data, aes(Age, Risk, color = Income))+ 
    geom_line(aes(group = Income)) 

或者,你可以做一個熱圖。

ggplot(data, aes(Age, Income, fill = Risk)) + 
    geom_tile() 
+0

對於三維圖表來說,你從根本上說是對的,對於可視化來說不是很好(即它是'chartjunk')。這只是因爲我所提供的具體數據符合法案,恰巧它就像一座小山,所以我可以將最高的x-y組合放在偏遠的角落。即使有些不情願,我可能會回落到折線圖上,因爲它假設只有一個維度(在這個例子中是年齡)上的進展,而收入是有色的。由於這些是分類,我也可以扭轉顏色和年齡。三維圖表本來是中性的。謝謝,不過。 – wishihadabettername 2010-07-25 04:56:46

0

你可以找到一個起點here但你需要更多的線條和一些矩形添加像你貼得到一個陰謀。

+0

我曾看過它,但無法想出完全填補廣場的方法;這些條仍然僅繪製在網格線的交點處,其間的大面積。 – wishihadabettername 2010-07-25 13:55:53

1

像其他人一樣建議有更好的方式來表達這一點,但如果你想要類似於你的東西,這應該讓你開始。

df <- read.csv(textConnection("Age,Income,Risk 
young,high,1 
young,medium,1.2 
young,low,1.36 
adult,high,1 
adult,medium,1.12 
adult,low,1.23 
old,high,1 
old,medium,1.03 
old,low,1.11 
")) 
df$Age <- ordered(df$Age, levels=c('young', 'adult', 'old')) 
df$Income <- ordered(df$Income, levels=c('low', 'medium', 'high')) 
library(rgl) 
plot3d(Risk ~ Age|Income, type='h', lwd=10, col=rainbow(3)) 

這將產生扁平的矩形。有關創建漂亮的酒吧的示例,請參閱demo(hist3d)

+0

我也嘗試過這個演示,但不幸的是演示使用了hist3d函數,沒有barplot3d。過去曾要求過(http://www.mail-archive.com/[email protected]/msg01084.html),但目前還沒有實施。我想是這樣。 – wishihadabettername 2010-07-25 14:07:43