大家好,從今天起,我們將開始更新Matplotlib進階散點圖圖鑑。本文將講解以下二個進階的散點圖繪製方法。
進階散點圖-007下面我們就來講解如何繪製第一個進階散點圖,注意,代碼在以下環境全部通過測試:
因版本不同,可能會有部分語法差異,如有報錯,請先檢查拼寫及版本是否一致!
首先導入相關庫並查看版本
import matplotlib
print(matplotlib.__version__) #查看Matplotlib版本
import pandas as pd
print(pd.__version__) #查看pandas版本
import numpy as np
print(np.__version__) #查看numpy版本
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #設置中文mac系統推薦直接使用以下
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['STHeiti'] # mac自帶中文接著我們使用一組真實數據,由於我們要建立rank、company和MC(總市值)3個維度的向量,我們考慮到把他們寫入DataFrame數據結構。我們可以看到MC(總市值)在區間400到8000左右,添加 ['size']考慮首先對他進行數據歸一化處理,使之在屏幕中的分布剛好撐滿整個畫布。再者我們添加 [『color』] 對於繪製的點的顏色進行選擇。新添 ['Y'] 對他進行從小到大排列。
data=pd.DataFrame(data={'rank':[10,9,8,7,6,5,4,3,2,1],
'company':['推特','沃達豐','IBM','思科','英特爾','奧多比','英偉達','萬事達卡','谷歌C','臉書'],
'MC':[432.11, 446.75, 1107.94, 1879.51, 1997.78, 2386.36, 3254.89,3544.57,6536.81, 7743.65]})
data['size']=data['MC']*500/(data['MC'].max()-data['MC'].min())
data['color']=[ '#E6E6FA', '#FFF0F5', '#FFC1C1', '#FF6A6A', '#FF3030','#EE799F', '#CD919E', '#CD5555', '#8B3A62','#8B636C']
data['Y']=10-data['rank']對於我們所需要的數據預處理的階段就到這樣,接下來我們開始繪圖。fig, ax = plt.subplots(1,1,dpi=300),其中參數1和1分別代表子圖的行數和列數,一共有 1x1 個子圖像。函數返回一個figure圖像和子圖ax的array列表。設置dpi(像素)大小為300。接下來我們對x、y刻度做一系列調整。
fig,ax=plt.subplots(1,1,dpi=300)
#隱藏y軸
ax.get_yaxis().set_visible(False)
#將刻度小橫線設置為白色,標籤顏色為黑色
plt.tick_params(axis='x',color='w',labelcolor='#1C1C1C')
#x,y軸刻度範圍
ax.set_xlim(200, 9000)
ax.set_xticks(range(200, 9000, 1000))
ax.set_ylim(-1,10)
#畫 x,y水平線,設置顏色,線類型,和線寬度
for i in range(200,9000,1000):
ax.axvline(x=i,c="gray",ls="-",lw=0.1)
for y in range(10):
ax.axhline(y=y,c="gray",ls="-",lw=0.1)利用ax.scatter進行繪製散點圖。對於該圖我們希望在散點中來標記y軸的公司情況,我們設置了 ['text_size'] 來設置字體,這裡我們根據mc的大小來設置字體,越大的mc字體越大。zip()函數把 ['text_size'] 和 ['MC'] 大小進行從小到大配對。使用ax.text畫出字體,並進行調整。
ax.scatter('MC', 'company', c='color', s='size', data=data) #c : color s :size
data['text_size']=[6,6,7,7,8,8,9,9,9,10]
for rank,company in zip(data['rank'],data['company']):
MC=data[data['company']==company]['MC']
text_size=data[data['company']==company]['text_size']
ax.text(MC-500*text_size/17,10-rank-0.1,company,fontdict={'color':'#1C1C1C','size':text_size},fontweight='heavy')
#設置上下左右外框變為透明
for i in ['top','right','left','bottom']:
ax.spines[i].set_visible(False)
plt.title("2020年知名美股總市值比較")
plt.savefig("D_07.png")
plt.show()
D_07進階散點圖-008現在修改散點圖字體的位置,使其縱軸顯示公司名,因為語法與第一幅一致,此處不在贅述!
data=pd.DataFrame(data={'rank':[10,9,8,7,6,5,4,3,2,1],
'company':['推特','沃達豐','IBM','思科','英特爾','奧多比','英偉達','萬事達卡','谷歌C','臉書'],
'MC':[432.11, 446.75, 1107.94, 1879.51, 1997.78, 2386.36, 3254.89,3544.57,6536.81, 7743.65]})
data['size']=data['MC']*500/(data['MC'].max()-data['MC'].min())
data['color']=[ '#E6E6FA', '#FFF0F5', '#FFC1C1', '#FF6A6A', '#FF3030','#EE799F', '#CD919E', '#CD5555', '#8B3A62','#8B636C']
data['Y']=10-data['rank']
fig,ax=plt.subplots(1,1,dpi=300)
plt.tick_params(axis='x',color='w',labelcolor='#3d405b')
plt.tick_params(axis='y',color='w',labelcolor='#3d405b')
#x,y軸刻度範圍
ax.set_xlim(200, 9000)
ax.set_xticks(range(200, 9000, 1000))
ax.set_ylim(-1,10)
ylabels=data['company'].tolist() #縱軸顯示
ax.set_ylim(-1,10)
ax.set_yticklabels(ylabels)
for i in range(200,9000,1000):
ax.axvline(x=i,c="gray",ls="-",lw=0.1)
for y in range(10):
ax.axhline(y=y,c="gray",ls="-",lw=0.1)
ax.scatter('MC', 'company', c='color', s='size', data=data) #c : color s :size 這裡傳入了序列
for i in ['top','right','left','bottom']:
ax.spines[i].set_visible(False)
plt.title("2020年知名美股總市值比較")
plt.savefig("D_08.png")
plt.show()
plt.close()
D_08以上就是本期兩副圖鑑的全部內容,更多精美圖表歡迎關注後續更新。
以上代碼均已通過測試,如有報錯,請先檢查拼寫與版本,若在某個版本中需要修改,歡迎在留言區指出,對於本篇內容有任何問題歡迎也請一定給我留言,謝謝!