Python可视化 | Matplotlib绘制圆环图的两种方法!
人生苦短,快學Python!今天給大家介紹Python可視化之環形圖的繪制。
環形圖,也被稱為圓環圖。它在功能上與餅圖相同,只是中間有一個空白,并且能夠同時支持多個統計數據。與標準餅圖相比,環形圖提供了一個更好的數據強度,因為空白中心可以用來顯示額外的、相關的數據。
環形圖使用場景:適合展示分類的占比情況,不適合展示分類過多(超過9條數據)或者差別不明顯的場景。
在本文中,我們將介紹兩種使用 Matplotlib 繪制環形圖的方法。一種是使用餅圖和參數 wedgeprops 的簡單方法;另一種是使用極坐標軸和水平條形圖的方法[1]。
方法一:餅圖
Matplotlib 中沒有繪制環形圖的方法[2],但是我們可以使用參數 wedgeprops 快速轉換餅圖為環形圖。
下面,先繪制一個簡單的讓小號用一個簡單的餅圖。
import?matplotlib.pyplot?as?plt plt.pie([87,13],?startangle=90,?colors=['#5DADE2',?'#515A5A']) plt.show()餅圖接下來,我們我們可以添加參數 wedgeprops ,并定義邊緣的寬度。
fig,?ax?=?plt.subplots(figsize=(6,?6))ax.pie([87,13],?wedgeprops={'width':0.3},?startangle=90,?colors=['#5DADE2',?'#515A5A'])一個環形圖是不是非常簡單,其實我們還可以添加一些文字,使得我們的數據可視化更有表現力。
fig,?ax?=?plt.subplots(figsize=(6,?6)) wedgeprops?=?{'width':0.3,?'edgecolor':'black',?'linewidth':3} ax.pie([87,13],?wedgeprops=wedgeprops,?startangle=90,?colors=['#5DADE2',?'#515A5A']) plt.title('環形圖',?fontsize=24,?loc='center') plt.text(0,?0,?"87%",?ha='center',?va='center',?fontsize=42) plt.text(-1.2,?-1.2,?"來源:?Thiago?Carvalho",?ha='left',?va='center',?fontsize=12)帶有詳細信息的環形圖為了支持中文,我們需要增加這兩行Python代碼。
plt.rcParams['font.sans-serif']?=?['SimHei']??#?用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus']?=?False??#?用來正常顯示負號當我們要顯示簡單的比例時,環形圖特別有用。
然而在我眼中,圓環圖最適合用來展示進度條!而要制作類似進度條一樣的圓環圖,可以可以進一步簡化圖表。
fig,?ax?=?plt.subplots(figsize=(6,?6)) data?=?[87,?13] wedgeprops?=?{'width':?0.3,?'edgecolor':?'black',?'lw':?3} patches,?_?=?ax.pie(data,?wedgeprops=wedgeprops,?startangle=90,?colors=['#5DADE2',?'white']) patches[1].set_zorder(0) patches[1].set_edgecolor('white') plt.title('類似進度條的環形圖',?fontsize=24,?loc='center') plt.text(0,?0,?f"{data[0]}%",?ha='center',?va='center',?fontsiAze=42) plt.text(-1.2,?-1.3,?"來源:?Thiago?Carvalho",?ha='left',?va='top',?fontsize=12)方法二:條形圖
相對于前一個方法,該方案較為復雜,但也提供了更多的自定義選項。
我們先從繪制基礎圖形開始。
fig,?ax?=?plt.subplots(figsize=(6,?6),?subplot_kw={'projection':'polar'}) data?=?87? startangle?=?90 x?=?(data?*?pi?*2)/?100 left?=?(startangle?*?pi?*2)/?360?#?轉換起始角度 ax.barh(1,?x,?left=left,?height=1,?color='#5DADE2') plt.ylim(-3,?3)如果想制作成前面一樣的進度條,還需要進行更多的操作。
fig,?ax?=?plt.subplots(figsize=(6,?6),?subplot_kw={'projection':'polar'}) data?=?87 startangle?=?90 x?=?(data?*?pi?*2)/?100 left?=?(startangle?*?pi?*2)/?360?#控制起始位置 plt.xticks([]) plt.yticks([]) ax.spines.clear() ax.barh(1,?x,?left=left,?height=1,?color='#5DADE2')? plt.ylim(-3,?3) plt.text(0,?-3,?"87%",?ha='center',?va='center',?fontsize=42)進度條 - 環形圖使用這種方法的話,我們擁有更多的自定義選擇。比如可以添加多個進度條、定義它們之間的距離等等。
篇幅限制,只顯示部分代碼嗎,完整代碼下載見文末。
#?在末尾標出線條和點來使它們變圓 for?i,?x?in?enumerate(xs):ax.barh(ys[i],?x,?left=left,?height=1,?color=colors[i])ax.scatter(x+left,?ys[i],?s=350,?color=colors[i],?zorder=2)ax.scatter(left,?ys[i],?s=350,?color=colors[i],?zorder=2)plt.ylim(-4,?4)legend_elements?=?[Line2D([0],?[0],?marker='o',?color='w',?label='Group?A',?markerfacecolor='#4393E5',?markersize=10),Line2D([0],?[0],?marker='o',?color='w',?label='Group?B',markerfacecolor='#43BAE5',?markersize=10),Line2D([0],?[0],?marker='o',?color='w',?label='Group?C',?markerfacecolor='#7AE6EA',?markersize=10)] ax.legend(handles=legend_elements,?loc='center',?frameon=False)plt.xticks([]) plt.yticks([]) ax.spines.clear()好了,以上就是今天介紹的兩種使用 Matplotlib 繪制環形圖的方法。
另外,我還看過另外一個騷操作,也就是在餅圖的中心繪制一個白色圓圈,使之變成一個環形圖。
如果大家覺得本文還不錯,記得給個一鍵三連!
參考資料
[1]
Towardsdatascience: https://towardsdatascience.com/
[2]Matplotlib: https://github.com/matplotlib/matplotlib
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)推薦閱讀牛逼!Python常用數據類型的基本操作(長文系列第①篇) 牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)牛逼!Python函數和文件操作(長文系列第③篇)牛逼!Python錯誤、異常和模塊(長文系列第④篇)總結
以上是生活随笔為你收集整理的Python可视化 | Matplotlib绘制圆环图的两种方法!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中最常用的 14 种数据可视
- 下一篇: 不吹不黑,中美程序员的区别对比!