天天看點

《Python資料可視化程式設計實戰》——5.2 建立3D柱狀圖

本節書摘來自異步社群《python資料可視化程式設計實戰》一書中的第5章,第5.2節,作者[愛爾蘭]igor milovanović ,颛青山 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

雖然matplotlib主要專注于繪圖,并且主要是二維的圖形,但是它也有一些不同的擴充,能讓我們在地理圖上繪圖,讓我們把excel和3d圖表結合起來。在matplotlib的世界裡,這些擴充叫做工具包(toolkits)。工具包是一些關注在某個話題(如3d繪圖)的特定函數的集合。

比較流行的工具包有basemap、gtk 工具、excel工具、natgrid、axesgrid和mplot3d。

本節将探索關于mplot3d的更多功能。mpl_toolkits.mplot3工具包提供了一些基本的3d繪圖功能,其支援的圖表類型包括散點圖(scatter)、曲面圖(surf)、線圖(line)和網格圖(mesh)。雖然mplot3d不是一個最好的3d圖形繪制庫,但是它是伴随着matplotlib産生的,是以我們對其接口已經很熟悉了。

基本來講,我們仍然需要建立一個圖表并把想要的坐标軸添加到上面。但不同的是我們為圖表指定的是3d視圖,并且添加的坐标軸是axes3d。

現在,我們可以使用幾乎相同的函數來繪圖了。當然,函數的參數是不同的,需要為3個坐标軸提供資料。

例如,我們要為函數mpl_toolkits.mplot3d.axes3d.plot指定xs、ys、zs和zdir參數。其他的參數則直接傳給matplotlib.axes.axes.plot。下面來解釋一下這些特定的參數。

1.xs和ys:x軸和y軸坐标。

2.zs:這是z軸的坐标值,可以是所有點對應一個值,或者是每個點對應一個值。

3.zdir:決定哪個坐标軸作為z軸的次元(通常是zs,但是也可以是xs或者ys)。

以下代碼示範了我們所解釋的概念。

上述代碼生成如圖5-1所示的圖表。

《Python資料可視化程式設計實戰》——5.2 建立3D柱狀圖

我們需要像在2d世界中那樣做相同的準備工作。不同的是,在這裡需要指定後端(backend)的種類。然後生成了一些随機資料,例如4年的銷售額(2011-2014)。

我們需要為3d坐标軸指定相同的z值。

從顔色映射集合中随機選擇一種顔色,然後把它和每一個z-order集合的xs、ys對關聯起來。最後,用xs、ys對渲染出柱狀條序列。

其他的一些matplotlib的2d繪圖函數在這裡也是可以用的,例如scatter()和plot()有着相似的接口,但有額外的點标記大小參數。我們對contour、contourf和bar也非常熟悉。

僅在3d中出現的新圖表類型有線框圖(wireframe)、曲面圖(surface)和三翼面圖(tri-surface)。

在下面的示例代碼中,我們繪制了著名的pringle函數的三翼面圖,數學專業上的叫法是雙曲面抛物線(hyperbolic paraboloid)。

上面的代碼生成如圖5-2所示的圖形。

《Python資料可視化程式設計實戰》——5.2 建立3D柱狀圖