用matplotlib散點圖用餅圖示記
本章博文看完你能夠get到什麼:
用matplotlib畫出漂亮pie-chart 圖
以及matplotlob相關的畫圖函式
我們要實現的目標:
問題引入
如果我們在一張資料表中,有那麼三列資料(學生性別,學生型別,學生髮色),若是讓你去分析這樣子的三列資料的話,其中學生性別(男,女),學生型別(初中生,高中生,大學生,研究生,博士生),學生髮色(紅,白,黃,綠。黑。。),若是讓你去視覺化這樣子的雜湊資料之間的關係,你會怎麼做?
答:這樣子的話其實視覺化的方法有很多種,這裡就介紹一種pie-scatter的方法吧當然可以畫3D圖
程式碼
首先我們要定義一個函式,一個讓我們傳資料(餅圖的大小,餅圖的佔比,以及餅圖的分佈)的函式,
# xs,ys是我們傳進來的x 和y值,ratio指的是我們的佔有率(打個比方男的70%,女的30%),sizes指的是這個點的大小,ax是畫圖函式
def drawPieMarker(xs, ys, ratios, sizes, colors, ax):
markers = []
previous = 0
# calculate the points of the pie pieces
for color, ratio in zip(colors, ratios):
this = 2 * np.pi * ratio + previous
x = [0] + np.cos(np.linspace(previous, this, 30)).tolist() + [0]
y = [0] + np.sin(np.linspace(previous, this, 30)).tolist() + [0]
xy = np.column_stack([x, y])
previous = this
markers.append({'marker':xy, 's':np.abs(xy).max()**2*np.array(sizes), 'facecolor':color})
# scatter each of the pie pieces to create piesggg
for marker in markers:
ax.scatter(xs, ys, **marker, alpha=0.7)
上面的程式碼是我在一個官網找的,https://matplotlib.org/gallery/lines_bars_and_markers/scatter_piecharts.html#sphx-glr-gallery-lines-bars-and-markers-scatter-piecharts-py
我們隨便的測試下
fig,ax = plt.subplots()
drawPieMarker([1,2,3],[1,2,3],[0.3,0.7],[300],['#004c70', '#990000'],ax)
上面那個定義的函式的具體是怎麼實現的我就不詳細介紹了
接下來就是準備資料的階段:
q3_order = ['Man', 'Woman', 'unknow']
q5_order = ['Business Analyst'
,'Data Analyst'
,'Data Engineer'
,'Data Scientist'
,'DBA/Database Engineer'
,'Machine Learning Engineer'
,'Product/Project Manager'
,'Research Scientist'
,'Software Engineer'
,'Statistician'
,'Student'
,'Currently not employed'
,'Other']
q15_order = [
'I do not use machine learning methods'
,'Under 1 year'
,'1-2 years'
,'2-3 years'
,'3-4 years'
,'4-5 years'
,'5-10 years'
,'10-20 years'
,'20 or more years']
接下來就是對資料進行處理的過程(作三種透視表)
包括男和女的在內的Q5,Q15的資料透視表
在男的範圍內的Q5Q15的資料透視表
在女的範圍內的Q5Q15的資料透視表:
畫出餅點圖
fig = plt.figure(figsize=(20, 23), dpi=200)
gs = fig.add_gridspec(5, 5)
ax_plot = fig.add_subplot(gs[1:4, 0:4])
for q5_idx in q5_order[::-1]:
for q15_idx in q15_order:
man = data_Q2Q15_man[q5_idx][q15_idx]
woman = data_Q2Q15_woman[q5_idx][q15_idx]
tot = data_Q5Q15[q5_idx][q15_idx]
drawPieMarker([q15_idx],[q5_idx], [man/(man+woman), woman/(man+woman)] ,[tot*2.5], ['#004c70', '#990000'], ax=ax_plot)
ax_plot.grid(linewidth=0.2, zorder=0)
ax_plot.set_yticklabels(q5_idx, fontfamily='serif', fontsize=15)
ax_plot.set_xticklabels(q15_idx, fontfamily='serif', fontsize=15, rotation=90)
我們就可以畫出我們要的餅點,大小根據我們數目的大小,餅點是根據男女進行劃分,
畫出上面的bar圖
# Pos
ax_pos = fig.add_subplot(gs[0, :4], sharex=ax_plot)
data_q15_woman = data[data['Q2']=='Woman']['Q15'].value_counts()[q15_order]
ax_pos.bar(data_q15_woman.index, data_q15_woman, width=0.45, alpha=0.7, color='#990000')
data_q15_man = data[data['Q2']=='Man']['Q15'].value_counts()[q15_order]
ax_pos.bar(data_q15_man.index, data_q15_man, bottom=data_q15_woman , width=0.45, alpha=0.7, color='#004c70')
plt.setp(ax_pos.get_xticklabels(), visible=False)
畫出右側的bar圖
# ext
ax_exp = fig.add_subplot(gs[1:4, 4], sharey=ax_plot)
data_q5_woman = data[data['Q2']=='Woman']['Q5'].value_counts()[q5_order]
ax_exp.barh(data_q5_woman.index[::-1], data_q5_woman[::-1], height=0.55, alpha=0.7, color='#990000')
data_q5_man = data[data['Q2']=='Man']['Q5'].value_counts()[q5_order]
ax_exp.barh(data_q5_man.index[::-1], data_q5_man[::-1], left= data_q5_woman[::-1],height=0.55, alpha=0.7, color='#004c70')
plt.setp(ax_exp.get_yticklabels(), visible=False)
'''for s in ['top', 'left', 'right', 'bottom']:
ax_plot.spines[s].set_visible(False)
ax_pos.spines[s].set_visible(False)
ax_exp.spines[s].set_visible(False)'''
fig.text(0.8, 0.9, 'Gender & Position & ML Experience', fontweight='bold', fontfamily='serif', fontsize=35, ha='right')
fig.text(0.8, 0.88, 'Stacked Bar Chart + Categorical Bubble Pie Chart', fontweight='light', fontfamily='serif', fontsize=20, ha='right')
# plt.tight_layout()
plt.show()
程式碼說明:
程式碼來自於一個大佬的部落格,侵刪
若是需要原始碼:
若是對程式碼有想法的可以關注下公眾號 輸入【matplotlib_001】獲取
相關文章
- Python matplotlib繪製散點圖Python
- 柱狀圖、直方圖、散點圖、餅圖講解直方圖
- 【matplotlib 實戰】--餅圖
- 用MATLAB顯示離散系統的零極點圖Matlab
- python-資料分析-Matplotlib-1-基礎圖形(曲線圖-散點-柱狀-堆疊柱狀-餅狀圖-直方圖)Python直方圖
- 【highcharts應用-雙餅圖】
- Python 利用pandas和matplotlib繪製餅圖Python
- 用GraphPad Prism9做分組柱狀圖與散點圖共存圖PHP
- echarts 餅圖巢狀 二級餅圖 子餅圖 複合餅圖Echarts巢狀
- python資料視覺化-matplotlib入門(5)-餅圖和堆疊圖Python視覺化
- hightchart的3d餅狀圖圖例顯示問題記錄3D
- matplotlib視覺化番外篇pie()--內嵌環形餅圖視覺化
- Android 折線圖之hellocharts (餅狀圖)餅圖Android
- 餅圖
- pandas讀取csv檔案資料並使用matplotlib畫折線圖和餅圖
- 字型圖示的應用
- matplotlib畫圖未顯示,以及PyCharm中 %matplotlib inline報錯PyCharminline
- Python視覺化-散點圖與彩色散點圖Python視覺化
- 怎麼用matplotlib畫出漂亮的分析圖表
- ECharts系列:玩轉ECharts之常用圖(折線、柱狀、餅狀、散點、關係、樹)Echarts
- 餅圖0625
- R繪圖(7): 把散點圖的點換成扇形繪圖
- R繪圖(3): 散點圖新增文字註釋繪圖
- 字型圖示固用程式碼
- GNOME 3.28 啟用桌面圖示
- 【Qt開發】更改應用程式圖示和工作列圖示QT
- Redis 應用-點陣圖Redis
- 用Python生成柱狀圖、折線圖、餅狀圖來統計自己的手機話費Python
- Java 在PPT中建立散點圖Java
- 實驗| Pyecharts實現散點圖Echarts
- win10如何修改應用圖示_win10怎麼更換應用圖示Win10
- macOS Big Sur應用圖示替換教程︳big sur圖示包Mac
- matplotlib的直方圖繪製(筆記)直方圖筆記
- d3.js 入門學習記錄(九) 用佈局實現餅圖 堆疊面積圖 矩陣樹圖 思維樹圖 封閉圖JS矩陣
- d3.js 入門學習筆記( 八) 實現 面積圖(線圖) 散點圖 氣泡圖 條形圖JS筆記
- Python畫圖——matplotlib(普通折線圖)Python
- Highcharts繪製餅圖
- echarts繪製餅圖Echarts