- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564627 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174611
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
* \0 `! K* u' k9 @
python+matplotlib绘制南丁格尔玫瑰图
/ d4 X. g' f3 ]) g( C( Q; c' _实验:绘制南丁格尔玫瑰图
- a! p1 n# s+ a8 T, }$ C) ^ 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~: t) A$ K+ [: Z* x; O: A
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.) I& R" v4 P9 w# z
/ ^; N( ]: W. p9 R/ B( u文章目录
9 u! V4 j0 r" n% p! ? M3 [6 k# y$ a- v, i9 U# u
一、实验目的
! M5 I4 C0 i0 b8 m8 {! v二、实验内容
+ m* f5 J& e) @& [三、实验环境. i) Q/ V1 k9 C4 t% s/ ?$ h: J
四、实验步骤6 f& ? ]5 A6 K# U
五、实验代码及测试
3 W( G$ Y, d% D4 W# A2 l1.源代码2 [: T0 H( x& n' v* t
2.运行结果: B, Z0 q+ L9 x
3.excel数据表* ]5 B# v8 L! u3 v
一、实验目的
E K# J- j' [( V) T) i$ h0 S( P% A4 i& D
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
# F$ E* y+ C, A/ v% V% U9 j9 J6 S F& g) z
二、实验内容# s! L3 T7 W4 K/ @: G5 P
# X6 R% W7 [6 h9 u6 x
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。# i2 }, _# R1 I5 J: h+ \) |
自行选择一组数据,画出基础玫瑰图。) l- V$ f: p7 V' U: ~
M2 i; U2 K$ z7 Z2 \
三、实验环境6 ]% T: d7 d3 B; v, O Y2 q* Z
8 X; p0 z% H0 a3 V ython 3.8
" O5 g6 N7 B9 @" R
$ N5 [( e1 D- F: n; o1 P; { ?四、实验步骤
$ M" ]. `$ m9 x+ G( w/ Q
" s& r! \0 W0 O' l% o5 a查阅文档,了解南丁格尔玫瑰图的原理。
1 ~+ b- [( }* H8 z6 J# }选择一组数据,编写程序画出玫瑰图。
6 }5 V0 K) f% i. Y) b$ o' X4 z7 A五、实验代码及测试
, p& e2 r0 d7 g' L# u4 S; p3 c# N! t* Y
1.源代码
s \) e" E n+ x0 r0 N
; m; g* w6 ?9 \import matplotlib.pyplot as plt& U- F# }9 a4 |. w6 ~
import numpy as np
8 ?. b% c+ h/ `7 U1 `0 s" |0 jimport xlrd
) D% f0 x v4 @1 l9 Y6 O+ C
8 o+ L" c8 M$ N'''1 X1 E6 Z; t) T @
按列读取excel文件并存入两个列表
7 l$ V% {2 s. |; ]3 [, |'''( o d" U f0 Z/ W$ D! l: c7 T: @! P
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
0 ], R0 o( J$ w/ ]2 F8 Q& S$ D% Etable = data.sheets()[0] #通过索引顺序获取工作表 b8 z( s4 D9 z* m3 Y
cols_n = table.ncols 1 O) x& D) e( N% w9 O9 s
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名& G+ x9 o3 e6 Q) v$ F
data_list = table.col_values(1,start_rowx=1), u w# x9 ~9 c1 V
# print(data_list)
5 K5 t Y6 ~0 C8 {& O' h) k8 e- D Q5 G6 _
'''
. l5 a( J! f' g7 j4 G 计算角度: }# G0 R, c+ K# D
'''
" U; k' t% V6 a% un = table.nrows-1 #去掉列名6 s4 W7 I7 @7 x7 N- j
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
0 m H# |% t; j; k' W
`; y; k' M6 E'''
$ Q9 u/ X4 }. c% L/ z5 T 作图8 I: c% d$ G E/ m& f3 u
'''" E. D6 w* @# g6 u, u ]! e
# 设置画布- W# s( k/ j# j8 y
fig = plt.figure(figsize=(12,10))4 _1 l: {: f3 k* Q8 z5 G; L
# 极坐标$ A( M9 A# ^% C1 ^
ax = plt.subplot(111,projection = 'polar')
3 P1 ^; h& g2 h5 O, `; z* J) t8 u1 L# 顺时针并设置N方向为0度- F9 j0 V4 f: [ k0 l' |
ax.set_theta_direction(-1)
2 _' Y/ f8 o9 R! z ?/ Pax.set_theta_zero_location('N') 0 ?" \0 O, P- K4 m
( Z0 b5 M9 \: x3 {; g# 在极坐标中画柱形图5 }& u6 R {3 A# z/ w, R
ax.bar(theta,% Q; P' {3 q7 i! e5 M& U+ p
data_list,4 d$ p _; B' C; n
width = 0.33,
8 N& L& \4 E9 G% x6 X color = np.random.random((len(data_list),3)),
! w( m6 m7 t( U4 F6 q0 X # labels=str(country_list), 6 }8 O0 Y( [9 U5 H$ \2 M) t
align = 'edge')
/ i: G* F+ w( f s9 {''' : k. g4 O4 L! i. h/ h
显示一些简单的中文图例; |1 U4 h) a7 A) ^0 j" X7 Z1 G
'''2 x. w+ ]2 |! N* M1 l3 I
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
' E' z7 s4 a, |9 h [ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})% K+ p. |0 w1 Y( h# ?7 H* M( p
for angle,data in zip(theta,data_list):0 E7 ^" }. e3 Q, O& M5 X
ax.text(angle+0.03,data+100,str(data))
; f. B: `: w! p' W2 c) V/ g# g) N5 ~. E. P% g8 `6 S! g% A) P
6 ]4 x9 f- F6 N$ U: S0 A" q- T$ Z
plt.axis('off')0 h" o! K9 T5 \8 q* T+ Q3 t! O
& r7 ] Y% h- B& xplt.savefig('Nightingale_rose.png')9 }4 P; n1 P( |# R: j. [ M) I
plt.show()
) W6 [* I3 l/ H+ O' O; ^- c7 ^0 |0 V6 m' v
2 V& k( N# h/ s+ D: m( H; M
2.运行结果6 v2 i1 }8 I' [9 ^% E; f8 Q. p
9 G) ]: b. t% f9 C, Z( q! @& E
( G+ K- H1 ]" P! v/ {
3 y9 W; ^2 B9 V$ F; q$ X; g7 O2 b% h3.excel数据表
' B6 H( z8 J9 v$ T/ {3 {
1 d- p6 P" i9 N! B/ }
6 u, ?9 V/ r: x" F P; L6 y, N4.说明
: Q1 L5 Y* p# O6 r, |9 l9 A 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.: H) N# {( p( g% v L/ k2 H% @
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
8 p. u1 I. B, C————————————————
" j/ Y2 ~1 u6 E) \' n0 r! {版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, d3 [0 ?" s8 O, n9 X原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852# M, z# L2 O; e8 H/ H: g& r
5 x- Q# E9 {2 v( ?8 F
5 y+ |1 W! P2 D: [9 T8 ^' y7 N; g' C
|
zan
|