Python干貨:分享Python繪制六種可視化圖表
可視化圖表,有相當(dāng)多種,但常見的也就下面幾種,其他比較復(fù)雜一點(diǎn),大都也是基于如下幾種進(jìn)行組合,變換出來的。對(duì)于初學(xué)者來說,很容易被這官網(wǎng)上眾多的圖表類型給嚇著了,由于種類太多,幾種圖表的繪制方法很有可能會(huì)混淆起來。
因此,在這里,我特地總結(jié)了六種常見的基本圖表類型,你可以通過對(duì)比學(xué)習(xí),打下堅(jiān)實(shí)的基礎(chǔ)。
01. 折線圖
繪制折線圖,如果你數(shù)據(jù)不是很多的話,畫出來的圖將是曲折狀態(tài),但一旦你的數(shù)據(jù)集大起來,比如下面我們的示例,有100個(gè)點(diǎn),所以我們用肉眼看到的將是一條平滑的曲線。
這里我繪制三條線,只要執(zhí)行三次 plt.plot 就可以了。
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()
02. 散點(diǎn)圖
其實(shí)散點(diǎn)圖和折線圖是一樣的原理,將散點(diǎn)圖里的點(diǎn)用線連接起來就是折線圖了。所以繪制散點(diǎn)圖,只要設(shè)置一下線型即可。
注意:這里我也繪制三條線,和上面不同的是,我只用一個(gè) plt.plot 就可以了。
import numpy as np import matplotlib.pyplot as plt x = np.arange(0., 5., 0.2) # 紅色破折號(hào), 藍(lán)色方塊 ,綠色三角塊 plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^') plt.show()
03. 直方圖
直方圖,大家也不算陌生了。這里小明加大難度,在一張圖里,畫出兩個(gè)頻度直方圖。這應(yīng)該在實(shí)際場(chǎng)景上也會(huì)遇到吧,因?yàn)檫@樣真的很方便比較,有木有?
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:將數(shù)據(jù)分成50組 # facecolor:顏色;alpha:透明度 # density:是密度而不是具體數(shù)值 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:具體數(shù)值;patches:直方圖對(duì)象。 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$') # 設(shè)置x,y軸的具體范圍 plt.axis([40, 160, 0, 0.03]) plt.grid(True) plt.show()
04. 柱狀圖
同樣的,簡(jiǎn)單的柱狀圖,我就不畫了,這里畫三種比較難的圖。
4.1 并列柱狀圖
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) # 有多少個(gè)類型,只需更改n即可 total_width, n = 0.8, 3 width = total_width / n # 重新擬定x的坐標(biāo) 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()
4.2 疊加柱狀圖
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()
05. 餅圖
5.1 普通餅圖
import matplotlib.pyplot as plt labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 10] # 設(shè)置分離的距離,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()
5.2 嵌套餅圖
import numpy as np import matplotlib.pyplot as plt # 設(shè)置每環(huán)的寬度 size = 0.3 vals = np.array([[60., 32.], [37., 40.], [29., 10.]]) # 通過get_cmap隨機(jī)獲取顏色 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()
5.3 極軸餅圖
要說酷炫,極軸餅圖也是數(shù)一數(shù)二的了,這里肯定也要學(xué)一下。
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表示從中心點(diǎn)向邊緣繪制的長(zhǎng)度(半徑) # width表示末端的弧長(zhǎng) # 自定義顏色和不透明度 for r, bar in zip(radii, bars): bar.set_facecolor(plt.cm.viridis(r / 10.)) bar.set_alpha(0.5) plt.show()
06. 三維圖
6.1 繪制三維散點(diǎn)圖
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') # 創(chuàng)建一個(gè)三維的繪圖工程 # 將數(shù)據(jù)點(diǎn)分成三部分畫,在顏色上有區(qū)分度 ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪制數(shù)據(jù)點(diǎn) 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') # 坐標(biāo)軸 ax.set_ylabel('Y') ax.set_xlabel('X') plt.show()
6.2 繪制三維平面圖
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) # 具體函數(shù)方法可用 help(function) 查看,如:help(ax.plot_surface) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow') plt.show()
總結(jié)
以上所述是小編給大家介紹的Python繪制六種可視化圖表,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
深入理解python中pytest.ini的配置方法和參數(shù)
Pytest 是 Python 測(cè)試框架中最流行的一個(gè),而 pytest.ini 文件則是 pytest 配置文件的核心,在本文中,將詳細(xì)介紹 pytest.ini 文件的配置方法和可能的參數(shù),幫助您更好地掌握 Pytest 的使用,需要的朋友可以參考下2024-10-10python3 QT5 端口轉(zhuǎn)發(fā)工具兩種場(chǎng)景分析
這篇文章主要介紹了python3 QT5 端口轉(zhuǎn)發(fā)工具,功能是打開本機(jī)端口,映射到指定IP的端口,接下來通過兩種場(chǎng)景給大家詳細(xì)介紹,感興趣的朋友一起看看吧2022-01-01Python實(shí)現(xiàn)迭代時(shí)使用索引的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)迭代時(shí)使用索引的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python使用enumerate()函數(shù)以及zip()函數(shù)獲取元素索引的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06Python3.6筆記之將程序運(yùn)行結(jié)果輸出到文件的方法
下面小編就為大家分享一篇Python3.6筆記之將程序運(yùn)行結(jié)果輸出到文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04