python画气泡图_用Python把图做的好看点:用Matplotlib画个好看的气泡图
我們繼續來把簡單的圖形丟到極坐標,這次是氣泡圖和柱狀圖,臨摹的對象是澎湃美數課
這個圖看起來很好看,原理其實很簡單,把柱狀圖和氣泡圖從笛卡爾坐標系中轉移到極坐標系中來就OK
我們開始本次的臨摹吧
本期的主題如下:熟悉一下柱狀圖的一些參數
熟悉一下散點圖的一些參數
熟悉一下極坐標系的規則(高中內容啦)
熟悉一下這么自定義字體
熟悉一下網格線
我們先來說說及極坐標內,一個點位置該怎么表示:(筆者很懶惰,就直接從網上復制圖片來教學了)
從圖上可以看出來,x軸為那個帶箭頭的線,matplotlib中也一樣,極坐標的起點在同樣的位置,不過在matplotlib里 x表示的是角度,y表示的長度,所以確定好夾角θ,和半徑長度就OK
我們在看看 美術課里這個樣圖,一排上,一共有15個圓,且最后一個和第一個沒有在90°與270°的位置上,所以我們要把圓分成36份,也就是每份是2π/36
這樣我們就可以確定等差數列了,我們以3/2π為起點,不斷加2π/36
我們來畫第一圈圓
import numpy as np
import matplotlib.pyplot as plt
S1=np.array([2572,2483,2302,2125,1990,1853,1694,1400,1134,982,869,776,668,584,480])*2
#為了把圖做大一點,把圓擴大了一倍
x1=[(3/2)*np.pi+np.pi/(len(S1)+1)*(i+1) for i in range(2*(len(S1)+1)) if i
# len(S1)+1 等于16 , 因為python里計數從0開始,所以i+1起始加一,
# 又因為我們只有15個圓,所以我們生成的位置Y也只要十五個,所以加入限制條件<15
y1=[180 for i in range(2*(len(S1)+1)) if i
# 我們繼續生成15個y值,這樣一來,我們三個參數都確定了,氣泡了x軸位置,y軸位置,以及氣泡大小
# 下面開始畫圖
fig=plt.figure(figsize=(13.44*2,7.5*2),facecolor='w')#建立一個畫布
ax = fig.add_subplot(111,projection='polar',facecolor='w')#建立一個坐標系,projection='polar'表示極坐標
ax.scatter(x=x1,y=y1,s=S1,color=(180/255,204/255,30/255),alpha=0.5,linewidths=0) #不要氣泡有邊框線,我們把linewidth設置為0
plt.ylim(0,220) #限制y軸的顯示大小
散點圖的參數:
1. x,y表示點位置,s表示點的大小,
2. color表示顏色,可以傳入一個元組,對RGB值歸一
3. alpha表示的是透明度第一圈圓
S2=np.array([2028,1976,1962,1925,1904,1833,1730,1577,1524,1493,1475,1589,1511,1505,1524])*2
x2=[(0)*np.pi+np.pi/(len(S1)+1)*(i+1) for i in range(2*(len(S1)+1))]
y2=[130 for i in range(2*(len(S1)+1)) if i
我們用同樣的方式計算出第二圈圓的位置,畫出來
接著我們把柱狀圖也丟進極坐標掰彎
柱狀圖可以用四個參數來確定每個柱子的位置
H1=[56,55,54,52,51,50,49,47,43,40,37,34,31,28,24]
W1=[0.05 for i in range(2*(len(S1)+1)) if i
B=[30 for i in range(2*(len(S1)+1)) if i
ax.bar(x=x1, height=H1, width=W1,bottom=B,color=(255/255,171/255,1/255))
x表示x軸的位置,
bottom表示柱子最底端的位置
height表示 柱子的長度
width表示柱子的寬度
最后我們把 坐標上的線,還有坐標軸上的文字去掉,以及背后畫個網格線,
ax.spines['polar'].set_visible(False) #去掉坐標軸的為外面一層 粗的線
plt.grid(color='gray', linestyle=':', linewidth=1,which='major',axis='x',alpha=0.1) #添加網格線
ax.set_yticks([]) #去掉 y軸上的文字
ax.set_xticks(x2) # 應為網格線是跟著x軸走的,如果去掉x軸的話,網格線也就沒了
ax.tick_params(axis='x',labelsize=0) #因為我們保留了x軸,x軸上的文字會存在,所以把x軸上的文字大小設置為0
最后我們選擇喜歡的字體,然后打上數據標簽,并保存
import matplotlib.font_manager
font=matplotlib.font_manager.FontProperties(fname='D:\\Fonts\\English\\Museo700-Regular.otf')
for i in range(len(x1)):
ax.text(x=x1[i],y=y1[i],s=S1[i],color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)
for i in range(len(x1)):
ax.text(x=x1[i],y=y2[i],s=S2[i],color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)
for i in range(len(x1)):
ax.text(x=x1[i],y=H1[i]+40,s="{}%".format(H1[i]) ,color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)
fig.savefig('D:\\test.png',dpi=400,bbox_inches='tight',transparent=False)
裁掉不要的部分
筆者比較懶惰,就在搞那些文字與標題啦,如果要加文字與標題的話可以保存eps格式的矢量圖文件,放在AI里進行深度的加工和處理哦
就這樣 完結 撒花??ヽ(°▽°)ノ?
基礎的部分可以看看這個文章:Mono Lee:Python入門向:Matplotlib自救指南篇,從此做圖不求人(一)?zhuanlan.zhihu.com
其他在極坐標里的畫圖可以看看這個Mono Lee:用Python把圖做的好看點:用Matplotlib畫個環形圖?zhuanlan.zhihu.comMono Lee:用Python把圖做的好看點:用Matplotlib畫個玫瑰圖?zhuanlan.zhihu.comMono Lee:用Python把圖做的好看點:用Matplotlib做個像麥肯錫一樣的條形圖?zhuanlan.zhihu.com
總結
以上是生活随笔為你收集整理的python画气泡图_用Python把图做的好看点:用Matplotlib画个好看的气泡图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语法详解_解析 Python
- 下一篇: pytorch forward_【Pyt