如何畫有五個變數的圖形呢?

四個輸入變數得到一個返回值,怎麼樣可視化比較好呢?樓主查了一些做法,有的是利用時間變化做的動圖,有的是利用顏色值的三個參數來表徵兩維。樓下有同學給出了將一維分成幾個子圖的方法。請問還有沒有其他的方法呢?

總結一下:二維坐標+形狀+大小+顏色+透明度。


首先說下我覺得最靠譜的畫法,就拿今年美賽的浴缸題為例,先上圖(手機拍的,渣畫質見諒)

我為了表現一段時間中一個三維浴缸中水的溫度的分布(溫度函數有四個自變數,三個空間一個時間),首先,我選擇的是每一小段時間畫一個這個時刻的溫度分布圖,排在一起。然後,對於每一個固定時刻我畫了一個分層的colorfunction(一個mathematica的做圖函數,用顏色的冷暖表現函數值,這也恰好符合我想表現的溫度),這裡的分層是為了能夠看清空間內部的溫度分布。

留坑待補,具體的mathematica實現

最後我建議樓主根據具體問題選擇合適的可視化方法,比如函數在這個四維空間中有旋轉對稱性,那麼就可以降維畫截面圖了。如果有時間維度可以參考我的方法,沒有我的方法就不太適合。另外,我這個是為了放在論文中才這麼處理時間維度的,如果可以用動圖當然是更好的展現時間的方式,其實我上面的方法加上動圖就可以表現5個變數的函數了,樓主可以自行去掉一個最不喜歡的維度表現方式。


說個常見的處理方法:

三維圖形的基礎上,第四維用顏色表示。另外建議用離散變數作為顏色取值

---------------------------------------------2016.07.30晚上更----------------------------------------------

早上只看到「四個輸入變數」就匆匆回答了,不好意思。今晚有空來補救一下

先說我的答案吧:目前還沒有一種廣受認可的方法可以用三維圖像表示五維數據

但方法總是有的:

(1)3維+時間=4維圖像

做成動圖,實際上是用四維表示五維數據了。這些在科普節目里見得比較多,適用性也比較廣

(2)另找一個圖像特徵

比如將顏色特徵分成兩個參數、

以透明度做第五維、

取曲面的光滑程度做第五維(類似於網格線的振幅和頻率)、

在網格上標記數字做第五維、

以圖形邊界顏色或亮度做第五維等(見最後一張圖)。

暫時想到這麼多。實際上難以操作,效果也不直觀,我從來沒見過有這麼做的分析圖

(3)3維+顏色+通過變數間的邏輯合理描述

用2維圖像表示4維數據不是不可能的,這要取決於對變數的理解。拿FB的數據分析比賽舉例:

x,y是地圖的橫縱坐標;顏色理解為事件種類;點的大小是1/accuracy,意味著事件可能發生的位置,accuracy理解為定位精確性;透明度表示發生頻數。這裡用2維+顏色的圖像表達了4個變數的信息。最後一張圖也用了這個思路。題主可以自己思考變數的邏輯進行低維表達

(4)分若干子圖

看字面意思大家應該都懂了

這張圖每一個二維子圖都表示了5個變數的信息(5)以上,都只是啟迪一下,實現起來未必容易。如果題主五個變數都是連續型的,我建議分多次繪圖。如果有離散型變數,針對這個離散型變數多下功夫多做嘗試


閱讀別人的代碼時,經常會碰到多個輸入變數得到一個返回值的函數。

剛才就碰到一個:

float vine(vec3 p, in float c, in float h)
{
p.y += sin(p.z*.5625+1.3)*3.5-.5;
p.x += cos(p.z*2.)*1.;
vec2 q = vec2(mod(p.x, c)-c/2., p.y);
return length(q) - h*1.4 -sin(p.z*3.+sin(p.x*7.)*0.5)*0.1;
}

函數中輸入一個三維坐標,外加兩個數值,輸出一個數值。這是什麼函數?有什麼意義?光看代碼我是看不出個所以然來。

碰到這樣的函數,我會一律將其視為地形並顯示出來:取輸入的兩維數值做為XZ平面的坐標,其他輸入參數通過控制項進行實時調整。輸出數值做為高度,這樣一個地形就出來了:

現在問題來了:為什麼我都畫出了這個函數,卻還是無法理解它呢?為什麼?為什麼?為什麼?


用Mathematica,做動態互動式的可視化[manipulate]:將變數設置成可手動調節的變數,可以觀察到每個變數對函數圖像的具體影響


t-SNE很好用。


Tableau裡邊的氣泡圖

Y軸:Sales Growth

X軸:GP%

氣泡大小:Sales Amount

氣泡顏色:Sales Growth%

氣泡形狀:Product Category

你要開心還可以加個時間軸,第六個維度

如果還不夠的話,可以多做幾個氣泡圖,相互關聯起來,還可以再加幾個維度


二維坐標+形狀+顏色+圖形大小+時間軸,這就是六維了。R語言里用googlevis 包,裡面有個motion chart ,非常好畫,而且可互動。


三維加顏色表示四維,第五維可以選擇自變數,然後用獨立的滑動條表示,滑動位置時,四維圖的顏色相應變化。


我用的是3D空間+Isosurface+contour

但Isosurface大概只能算半個吧


讓大象的鼻子動起來?


畫一個超立方體表示四個自變數,因變數用顏色表示。

圖形畫完了,但是沒說要能看啊,看的話就分別作投影吧。

另外這種畫法的好處是在四個自變數具有對稱性的時候,比用坐標、顏色、點的形狀大小來區分對待起來更滿足強迫症的內心需求。


控制兩個變數畫2D圖,或者控制一個變數畫3D圖?


反正無論怎麼畫, 都對讀者的幾何空間想像力提出了巨大的挑戰, 這也是為什麼我們要搞PCA惹. 我覺得如果維度裡面沒有時間空間這類有慣用展示方法的變數, 畫個五軸的雷達圖也是不錯的


推薦閱讀:

金融學專業,需要學習哪些軟體/編程語言?
matlab的UDP通信的丟包問題如何解決?
C++ 下有沒有矩陣計算速度能和 MATLAB 相當的矩陣或數學庫?
想用別人的實驗來算東西,但沒有他的數據,只有文獻里的圖線怎麼辦?
學術論文中用什麼軟體可以繪製這樣的圖?

TAG:Python | MATLAB | 數據可視化 | 可視化 | R編程語言 |