2014-07-01 300 views
3

想要繪製具有3維圖:3D繪圖用分類軸[Python的/ Matplotlib]

x軸 - 值(浮點) Y軸 - 值(浮點) Z軸 - 類別(字符串)

現在我試圖使用pandas.factorize(table.zcolumn)的Z矢量

Output: (array([ 0, 0, 0, ..., -1, -1, 1]), Index([u'London', u'National'], dtype='object')) 

所以我可以繪製的數字沒有問題的轉換。

你會看到有NaN值轉換爲-1,所以當我繪製圖形時,有一堆值爲-1。數據持有倫敦,國家和NaN類別。

如何標記軸以適合我的數據?我覺得應該有一個簡單的功能來匹配它。

在Z軸,我需要重新分配蜱-1成爲「NA」,0成爲「倫敦」和1,成爲「國家」

我也很想在某種程度上對有大量的類,所以代碼並不需要手動輸入每個類別的字符串

regions = pandas.factorize(dataTable.Region[id_range]) 
regions_num = regions[0] 

fig = plot.figure() 
ax = fig.add_subplot(111,projection='3d') 
ax.scatter(y, x, zs=regions_num) 

ax.axes.set_zticklabels(["London","National","N/A"]) 

plot.show() 

The problem: Z-Axis labels do not match discrete values (at -1, 0, 1)

回答

1

你只需要設置相應的類別zticks三個z值這樣:

ax.axes.set_zticks(regions_num) 

話雖如此,我並不是這是一個非常好的繪製數據的方法。當您的X,Y和Z值都是連續變量時,3D圖很有用。如果'區域'是一個有序變量,將區域表示爲不同的z級別可能會更有意義,但是有什麼理由說'N/A'應該比'National'更高? 3D圖也比2D圖更難讀取 - 例如,由於透視投影在'National'類別附近的點可能看起來很像一個距離較遠的點,但是在'N/A'類別中。

更合適的選擇可能是將這些數據表示爲2D軸上的散點圖,其中不同的顏色對應於不同的類別。

+0

它的工作表示感謝。第二點我完全明白你的意思。但我主要使用它作爲編碼練習。不知何故,我無法將標籤設置爲字符串?我可以不使用ax.axes.set_zticklabels(regions [1] [:])來設置每個刻度標籤嗎?它在一分鐘內將所有東西打印在一起 – darkace

+0

@darkace,什麼是'regions [1] [:]'? –