玫瑰圖是弗羅倫斯·南丁格爾所發明的。又名為極座標面積圖,是一種圓形的直方圖。 南丁格爾自己常暱稱這類圖為雞冠花圖(coxcomb),適用於繪製比較、隨時間變化的循環現象。和傳統的餅圖展示形式單一相比,南丁格爾玫瑰圖更加絢麗,給人的感覺更直觀、深刻,因此,南丁格爾玫瑰圖在數據可視化領域的應用十分廣泛。
今天,總結了Python代碼繪製南丁格爾玫瑰圖的方法,代碼親跑無誤哦!
另外,還是老樣子,值得深入學習的知識,添加了對應的官方文檔鏈接!
1. 利用Matplotlib畫南丁格爾玫瑰圖
1.1 模塊導入
<code>from
matplotlibimport
pyplotas
pltimport
pandasas
pdimport
numpyas
npimport
matplotlib/<code>
1.2 設置整體配置
首先,我們需要設置圖片大小:dpi參數的大小決定了圖片的清晰度。
<code>fig
= plt.figure(figsize=(10
,6
),dpi=400
)/<code>
其次,設置圖形位置和投影方式:
<code>ax
= plt.subplot(111
, projection="polar"
) /<code>
更多關於matplotlib.projections的知識,請戳官方文檔鏈接:https://matplotlib.org/api/projections_api.html
再有,規定正北方向:
<code>ax
.set_theta_zero_location
("N"
)/<code>
最後,設置掃描方向:順時針(-1)or逆時針(1)
<code>ax
.set_theta_direction
(-1
)/<code>
1.3 數據準備
以下數據都是我“絞盡腦汁”隨機編的,大家隨後可以自由替換數據。
<code>p
=['西藏'
,'山東'
,'河南'
,'河北'
,'北京'
,'上海'
,'天津'
,'廣東'
,'湖北'
,'湖南'
,'寧夏'
,'山西'
]r
= [10
,20
,30
,40
,50
,60
,70
,80
,90
,100
,110
,120
]theta
=np.linspace(0
, np.pi*2
, len(r), endpoint=False
) /<code>
numpy.linspace(start,stop,num=50,endpoint=True)
start:這個參數表示這個序列的開始值。
stop:這個參數表示這個序列的終止值。
num:可選參數,默認值為50,表示要生成的樣本數。
endpoint:可選參數,默認值為True,此時stop是最後的樣本。為False時,不包含stop的值。
1.4 繪製柱狀圖
<code>ax.bar(theta,r, width=np.pi/6, color=np.random.random((len(r),3)), align="edge"
, bottom=100 ) /<code>
1、np.pi是一個常數表示圓周率π,2×np.pi就相當於2π。
2、align:{'center','edge'},可選參數,默認:'center',控制對其方式。
3、color也可以自定義,只要前面加一個自定義的顏色列表就可以,下一種方法我們用自定義的顏色。
1.5 頂部顯示文本
<code>for
angle, height,text
in
zip
(theta, r, p
): ax.text
(angle+
0.25
, height+120
, str(text), fontsize=9
) matplotlib.rcParams['font.sans-serif'
]=['simsun'
] /<code>
matplotlib.pyplot.text(x,y,s,fontdict = None)
向軸添加文本,在字符串中添加文本s到軸的位置,x,y表示數據的座標。
更多關於matplotlib.pyplot.text的知識,請戳下面官方鏈接:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.text
1.6 去掉座標軸和網格線
<code>plt
.axis
("off"
)/<code>
1.7 保存圖片
<code>plt
.savefig
("南丁格爾圖.png
")/<code>
1.8 查看圖片
2. 利用Pyecharts畫南丁格爾玫瑰圖
2.1 模塊導入
<code>from
pyecharts.chartsimport
Piefrom
pyechartsimport
optionsas
optsfrom
snapshot_seleniumimport
snapshotas
driverfrom
pyecharts.renderimport
make_snapshot/<code>
2.2 數據準備
沒錯兒,以下數據也是我“絞盡腦汁”隨機編的,大家隨後可以自由替換數據。
<code>drink
=['可樂'
,'雪碧'
,'咖啡'
,'奶茶'
,'青島'
,'百威'
,'橙汁'
,'紅茶'
,'綠茶'
,'百歲山'
,'農夫山泉'
,'江小白'
,'茅臺'
]price
= [10
,20
,30
,40
,50
,60
,70
,80
,90
,100
,110
,120
,130
]color_series
= ['#4e70f0'
,'#ffce2b'
,'#00c5d2'
,'#ff812c'
,'#ff5a5a'
,'#f95dba'
,'#a64dff'
]/<code>
2.3 繪製餅圖
<code>pie
= Pie(init_opts=opts.InitOpts(width='1200px'
,height='1000px'
)) /<code>
2.4 添加數據
<code>pie.add
(""
,[list(z)for
zin
zip
(drink, price
)], radius = ["30%"
,"75%"
], center = ["50%"
,"60%"
], rosetype="area"
) /<code>
2.5 顯示標題和圖例
<code>pie
.set_global_opts
(title_opts=opts.TitleOpts(title="南丁格爾圖(玫瑰圖)"
, subtitle="可以添加副標題"
), legend_opts=opts.LegendOpts(is_show=True, pos_top="8%"
, pos_bottom="92%"
))/<code>
2.6 設置標籤和顏色
<code>pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True
, position='outside'
, font_size=12
, formatter="{b}:{c}"
, font_style='italic'
, font_weight='bold'
, font_family='Microsoft Yallei'
)) pie.set_colors(color_series) /<code>
formatter處的 {b} 和 {c} 均為模板變量,在餅圖中,{b}表示數據項名稱,{c}表示數值。
2.7 保存圖片
==第一種方式==保存為HTML格式
<code>pie
.render
("meiguitu
.html
")/<code>
==第二種方式==保存為PNG格式
<code>make_snapshot
(driver
,pie
.render
(), "meiguitu
.png
")/<code>
2.8 查看圖片
大家可以通過評論或私信的方式提出對本文的建議,也可以通過點贊加轉發的方式表達對本文的支持!
感謝大家!!!
如果需要代碼,請大家在評論區留言即可,如果方便的話,也可隨手來個轉發關注噢。
參考資料:
1、董付國:《Python數據分析、挖掘與可視化》
2、pyecharts調整圖例與各板塊的位置間距:https://blog.csdn.net/jerurry/article/details/100660056?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
3、可視化之pyecharts詳細配置繪製圖表:https://blog.csdn.net/miner_zhu/article/details/81949004?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
4、numpy.linspace函數:https://blog.csdn.net/rainpasttime/article/details/79847674
5、南丁格爾玫瑰圖:https://baike.baidu.com/item/%E5%8D%97%E4%B8%81%E6%A0%BC%E5%B0%94%E7%8E%AB%E7%91%B0%E5%9B%BE/19510516?fr=aladdin
6、python科學畫圖——bar()函數:https://blog.csdn.net/beyond9305/article/details/82958683