公衆號:Python編程時光python
可視化圖表,有至關多種,但常見的也就下面幾種,其餘比較複雜一點,大都也是基於以下幾種進行組合,變換出來的。對於初學者來講,很容易被這官網上衆多的圖表類型給嚇着了,因爲種類太多,幾種圖表的繪製方法頗有可能會混淆起來。編程
所以,在這裏,我特意總結了六種常見的基本圖表類型,你能夠經過對比學習,打下堅實的基礎。markdown
繪製折線圖,若是你數據不是不少的話,畫出來的圖將是曲折狀態,但一旦你的數據集大起來,好比下面咱們的示例,有100個點,因此咱們用肉眼看到的將是一條平滑的曲線。dom
這裏我繪製三條線,只要執行三次plt.plot
就能夠了。ide
import numpy as np import matplotlib.pyplot as plt x= np.linspace(0, 2, 100) plt.plot(x, x, label='linear') plt.plot(x, x**2, label='quadratic') plt.plot(x, x**3, label='cubic') plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.legend() plt.show() 複製代碼
show image函數
其實散點圖和折線圖是同樣的原理,將散點圖裏的點用線鏈接起來就是折線圖了。因此繪製散點圖,只要設置一下線型便可。學習
注意:這裏我也繪製三條線,和上面不一樣的是,我只用一個plt.plot
就能夠了。spa
import numpy as np import matplotlib.pyplot as plt x = np.arange(0., 5., 0.2) # 紅色破折號, 藍色方塊 ,綠色三角塊 plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^') plt.show() 複製代碼
show image 3d
直方圖,你們也不算陌生了。這裏小明加大難度,在一張圖裏,畫出兩個頻度直方圖。這應該在實際場景上也會遇到吧,由於這樣真的很方便比較,有木有?code
import numpy as np import matplotlib.pyplot as plt np.random.seed(19680801) mu1, sigma1 = 100, 15 mu2, sigma2 = 80, 15 x1 = mu1 + sigma1 * np.random.randn(10000) x2 = mu2 + sigma2 * np.random.randn(10000) # the histogram of the data # 50:將數據分紅50組 # facecolor:顏色;alpha:透明度 # density:是密度而不是具體數值 n1, bins1, patches1 = plt.hist(x1, 50, density=True, facecolor='g', alpha=1) n2, bins2, patches2 = plt.hist(x2, 50, density=True, facecolor='r', alpha=0.2) # n:機率值;bins:具體數值;patches:直方圖對象。 plt.xlabel('Smarts') plt.ylabel('Probability') plt.title('Histogram of IQ') plt.text(110, .025, r'$\mu=100,\ \sigma=15$') plt.text(50, .025, r'$\mu=80,\ \sigma=15$') # 設置x,y軸的具體範圍 plt.axis([40, 160, 0, 0.03]) plt.grid(True) plt.show() 複製代碼
show image
一樣的,簡單的柱狀圖,我就不畫了,這裏畫三種比較難的圖。
import numpy as np import matplotlib.pyplot as plt size = 5 a = np.random.random(size) b = np.random.random(size) c = np.random.random(size) x = np.arange(size) # 有多少個類型,只需更改n便可 total_width, n = 0.8, 3 width = total_width / n # 從新擬定x的座標 x = x - (total_width - width) / 2 # 這裏使用的是偏移 plt.bar(x, a, width=width, label='a') plt.bar(x + width, b, width=width, label='b') plt.bar(x + 2 * width, c, width=width, label='c') plt.legend() plt.show() 複製代碼
show image
import numpy as np import matplotlib.pyplot as plt size = 5 a = np.random.random(size) b = np.random.random(size) c = np.random.random(size) x = np.arange(size) # 這裏使用的是偏移 plt.bar(x, a, width=0.5, label='a',fc='r') plt.bar(x, b, bottom=a, width=0.5, label='b', fc='g') plt.bar(x, c, bottom=a+b, width=0.5, label='c', fc='b') plt.ylim(0, 2.5) plt.legend() plt.grid(True) plt.show() 複製代碼
show image
import matplotlib.pyplot as plt labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 10] # 設置分離的距離,0表示不分離 explode = (0, 0.1, 0, 0) plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) # Equal aspect ratio 保證畫出的圖是正圓形 plt.axis('equal') plt.show() 複製代碼
show image
import numpy as np import matplotlib.pyplot as plt # 設置每環的寬度 size = 0.3 vals = np.array([[60., 32.], [37., 40.], [29., 10.]]) # 經過get_cmap隨機獲取顏色 cmap = plt.get_cmap("tab20c") outer_colors = cmap(np.arange(3)*4) inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10])) print(vals.sum(axis=1)) # [92. 77. 39.] plt.pie(vals.sum(axis=1), radius=1, colors=outer_colors, wedgeprops=dict(width=size, edgecolor='w')) print(vals.flatten()) # [60. 32. 37. 40. 29. 10.] plt.pie(vals.flatten(), radius=1-size, colors=inner_colors, wedgeprops=dict(width=size, edgecolor='w')) # equal 使得爲正圓 plt.axis('equal') plt.show() 複製代碼
show image
要說酷炫,極軸餅圖也是首屈一指的了,這裏確定也要學一下。
import numpy as np import matplotlib.pyplot as plt np.random.seed(19680801) N = 10 theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) radii = 10 * np.random.rand(N) width = np.pi / 4 * np.random.rand(N) ax = plt.subplot(111, projection='polar') bars = ax.bar(theta, radii, width=width, bottom=0.0) # left表示從哪開始, # radii表示從中心點向邊緣繪製的長度(半徑) # width表示末端的弧長 # 自定義顏色和不透明度 for r, bar in zip(radii, bars): bar.set_facecolor(plt.cm.viridis(r / 10.)) bar.set_alpha(0.5) plt.show() 複製代碼
show image
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D data = np.random.randint(0, 255, size=[40, 40, 40]) x, y, z = data[0], data[1], data[2] ax = plt.subplot(111, projection='3d') # 建立一個三維的繪圖工程 # 將數據點分紅三部分畫,在顏色上有區分度 ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪製數據點 ax.scatter(x[10:20], y[10:20], z[10:20], c='r') ax.scatter(x[30:40], y[30:40], z[30:40], c='g') ax.set_zlabel('Z') # 座標軸 ax.set_ylabel('Y') ax.set_xlabel('X') plt.show() 複製代碼
show image
from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) # 具體函數方法可用 help(function) 查看,如:help(ax.plot_surface) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') plt.show() 複製代碼
show image