引言
在數據分析和數據建模中,數據的可視化是非常重要的環節,它能幫助我們更好地理解數據、找出數據的特點和規律、進行更準確的數據分析和決策。python中的matplotlib包中的plot函數是一個非常強大的數據可視化工具,它能夠幫助我們進行各種各樣的數據可視化操作,如散點圖、折線圖、柱狀圖、箱線圖等等。
正文
1、plot函數基礎
plot函數是matplotlib中最常用的函數之一,它可以幫助我們生成各種各樣的圖形。plot函數最基本的用法是:給定X軸和Y軸上的點的坐標,可以用plot函數繪製出這些點組成的圖像。
import matplotlib.pyplot as plt import numpy as np #生成數據 x = np.linspace(0,10,100) y = np.sin(x) #繪圖 plt.plot(x,y) plt.show()
在這個例子中,我們使用了numpy來生成了100個等距的數據點,然後計算出了它們的正弦值。接著,我們使用plot函數把它們繪製成曲線,並使用show函數來顯示出來。執行代碼,就會得到一張正弦曲線的圖像。
2、散點圖和折線圖
plot函數不僅可以繪製折線圖,還可以繪製散點圖。相比於折線圖,散點圖更能夠突出數據點之間的離散程度。
下面是一個簡單的散點圖繪製代碼的例子:
import matplotlib.pyplot as plt import numpy as np #生成數據 x = np.random.rand(50) y = np.random.rand(50) colors = np.random.rand(50) sizes = 1000 * np.random.rand(50) #繪圖 plt.scatter(x, y, c=colors, s=sizes, alpha=0.5) plt.show()
在這個例子中,我們使用numpy生成了50個隨機的X軸坐標和Y軸坐標,並使用了兩個隨機變數來控制散點的顏色和大小。scatter函數用來繪製散點圖,其中c參數控制散點的顏色,s參數控制散點的大小,alpha參數控制散點的透明度。執行代碼,就會得到一張有50個隨機散點的圖像。
折線圖和散點圖可以同時繪製到同一幅圖上,只需要在繪製折線圖時,把plot函數替換為scatter函數即可。
import matplotlib.pyplot as plt import numpy as np #生成數據 x = np.linspace(0, 10, 100) y = np.sin(x) #繪圖 plt.plot(x, y, label='sin(x)') plt.scatter(x[::10], y[::10], c='r', s=50, label='sampled points') plt.legend() plt.show()
在這個例子中,我們首先使用plot函數繪製出了sin(x)的曲線,然後使用scatter函數把曲線上每隔10個點的位置處的點繪製成紅色的散點。legend函數用來給圖中的曲線和散點添加圖例。執行代碼,就會得到一張既有折線圖又有散點圖的圖像。
3、多子圖布局
在數據分析中,有時需要對多個不同的子集或者數據集進行繪圖展示,而用一個圖形中繪製多個圖時,如果用傳統的subplot實現,稍微複雜點的圖形就會非常難以繪製。在這種情況下,我們可以使用subplot2grid來實現更加靈活的子圖布局。
import matplotlib.pyplot as plt import numpy as np #生成數據 x1 = np.linspace(0, 5, 100) y1 = np.sin(x1) x2 = np.linspace(0, 5, 100) y2 = np.cos(x2) #繪圖 fig = plt.figure(figsize=(8, 6)) ax1 = plt.subplot2grid((3, 3), (0, 0), rowspan=2, colspan=2) ax1.plot(x1, y1, 'r-') ax1.set_title('sin') ax2 = plt.subplot2grid((3, 3), (0, 2), rowspan=2, colspan=1) ax2.plot(x2, y2, 'g-') ax2.set_title('cos') ax3 = plt.subplot2grid((3, 3), (2, 0), rowspan=1, colspan=3) ax3.plot(x1, y1, 'b-', x2, y2, 'y-') ax3.set_title('sin and cos') plt.tight_layout() plt.show()
在這個例子中,我們首先生成了兩組X軸和Y軸上的點的坐標,分別對應正弦曲線和餘弦曲線。然後,我們使用subplot2grid函數來實現三幅子圖的布局。第一個參數代表整個圖形的布局,第二個參數代表當前子圖在整個圖形中的位置,第三個參數代表當前子圖的大小。最後,我們分別在三幅子圖中繪製了sin、cos以及sin和cos的曲線,並使用set_title函數來給每個子圖加上了標題。tight_layout函數用來調整子圖之間的間距。執行代碼,就會得到一張包含三幅子圖的圖像。
4、柱狀圖與堆疊圖
柱狀圖是對於不同類別之間的比較和量值之間的比較非常有用的一種數據可視化方式,matplotlib中的bar函數可以用來繪製柱狀圖。堆疊圖則是用來顯示多個變數在總和上的相對貢獻度,與柱狀圖相比,堆疊圖在視覺效果上會更充分地體現出各個變數之間的差異性。
下面我們分別通過兩個例子來演示如何繪製柱狀圖和堆疊圖:
import matplotlib.pyplot as plt import numpy as np #生成數據 data = [10, 20, 30, 40, 50] labels = ['this', 'that', 'other', 'stuff', 'things'] #繪圖 plt.bar(np.arange(len(data)), data, align='center') plt.xticks(np.arange(len(data)), labels) plt.show()
在這個例子中,我們首先生成了一個包含5個元素的數據列表,然後使用bar函數把這些數據繪製成柱狀圖,並使用xticks函數來給每根柱子加上標籤。執行代碼,就會得到一張柱狀圖的圖像。
import matplotlib.pyplot as plt import numpy as np #生成數據 N = 5 menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) ind = np.arange(N) width = 0.35 #繪圖 plt.bar(ind, menMeans, width, label='Men') plt.bar(ind, womenMeans, width, bottom=menMeans, label='Women') plt.ylabel('Scores') plt.title('Scores by group and gender') plt.xticks(ind, ('Group1', 'Group2', 'Group3', 'Group4', 'Group5')) plt.legend(loc='lower center') plt.show()
在這個例子中,我們首先生成了男性和女性的得分列表,其中包含了5個分組,然後使用bar函數把這些數據繪製成堆疊圖。其中的bottom參數控制著女性柱子繪製時的起點,即女性柱子的高度都是基於男性柱子的高度的。執行代碼,就會得到一張堆疊圖的圖像。
5、箱線圖
箱線圖是一種常用的數據可視化工具,它可以用來展示一組數據的分布情況,包括中位數、四分位數、最大值和最小值等。Matplotlib中的boxplot函數可以用來繪製箱線圖。下面是一個繪製箱線圖的例子:
import matplotlib.pyplot as plt import numpy as np #生成數據 data = [np.random.normal(0, std, 100) for std in range(1, 4)] #繪圖 fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(111) bp = ax.boxplot(data) ax.set_xticklabels(['x1', 'x2', 'x3']) plt.show()
在這個例子中,我們首先使用numpy生成三組數據,並使用boxplot函數把它們繪製成一個箱線圖。add_subplot函數返回一個AxesSubplot對象,用來在Figure對象上添加一個子圖。xticklabels函數用來給X軸坐標加上對應的標籤。執行代碼,就會得到一張箱線圖的圖像。
總結
通過上面的幾個例子,我們學習了如何使用plot函數進行數據可視化,其中包括了折線圖、散點圖、子圖布局、柱狀圖、堆疊圖和箱線圖等幾種非常常用的可視化方式,特別是plot函數最常用的用法,希望可以對讀者有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308471.html