乾貨收藏 | 用Matplotlib和Pyecharts畫南丁格爾玫瑰圖(附代碼)

玫瑰圖是弗羅倫斯·南丁格爾所發明的。又名為極座標面積圖,是一種圓形的直方圖。 南丁格爾自己常暱稱這類圖為雞冠花圖(coxcomb),適用於繪製比較、隨時間變化的循環現象。和傳統的餅圖展示形式單一相比,南丁格爾玫瑰圖更加絢麗,給人的感覺更直觀、深刻,因此,南丁格爾玫瑰圖在數據可視化領域的應用十分廣泛。

今天,總結了Python代碼繪製南丁格爾玫瑰圖的方法,代碼親跑無誤哦!

另外,還是老樣子,值得深入學習的知識,添加了對應的官方文檔鏈接!

1. 利用Matplotlib畫南丁格爾玫瑰圖

1.1 模塊導入

<code>

from

matplotlib

import

pyplot

as

plt

import

pandas

as

pd

import

numpy

as

np

import

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 查看圖片


乾貨收藏 | 用Matplotlib和Pyecharts畫南丁格爾玫瑰圖(附代碼)

2. 利用Pyecharts畫南丁格爾玫瑰圖

2.1 模塊導入

<code>

from

pyecharts.charts

import

Pie

from

pyecharts

import

options

as

opts

from

snapshot_selenium

import

snapshot

as

driver

from

pyecharts.render

import

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

z

in

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 查看圖片


乾貨收藏 | 用Matplotlib和Pyecharts畫南丁格爾玫瑰圖(附代碼)

大家可以通過評論私信的方式提出對本文的建議,也可以通過點贊轉發的方式表達對本文的支持!

感謝大家!!!

如果需要代碼,請大家在評論區留言即可,如果方便的話,也可隨手來個轉發關注噢。

參考資料:

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

乾貨收藏 | 用Matplotlib和Pyecharts畫南丁格爾玫瑰圖(附代碼)


分享到:


相關文章: