- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 567024 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175330
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
1 y$ _ ?: T3 v( f- ^& U
python+matplotlib绘制南丁格尔玫瑰图4 h6 v7 \0 ?( I. f0 G! z2 m
实验:绘制南丁格尔玫瑰图
0 A7 S0 ^4 @/ r* b 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~* O( D. W8 W9 R" ]
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
& ~/ L% ?5 B! ]( Z* a2 E+ @6 Z/ N5 c( H# }
文章目录
) [: q" p# k% X9 `3 b$ l: ]2 O. J) U- J5 j7 U/ P% r$ a+ z
一、实验目的
) q. O" E! o7 O二、实验内容
$ ^" Q! Y1 a* |; `4 D$ ^三、实验环境
; { K7 [3 H+ f m7 z( w4 X4 h四、实验步骤
8 t9 r; g4 a9 V- c. M6 d! e2 e五、实验代码及测试8 F1 z" ~. ~% `& x- B" A
1.源代码
2 _7 i8 b x9 @+ i& w D R( D4 X2.运行结果
, g& \. J3 O) z# z; h# W3.excel数据表
* F) p8 ^" b1 C: s" X6 H; d一、实验目的, F0 T) P& g9 V! g, S
J5 `1 U W( L9 @
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
7 t& ^$ k# p) _3 H2 A7 p8 O9 O; ] o, m1 J/ q+ K- R
二、实验内容
0 A8 |8 ~, l2 N: C* i K* o6 t7 J! v, ]
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
$ U; b" p1 V) O; ` 自行选择一组数据,画出基础玫瑰图。: \+ r* C; k, R0 Z
3 m' v. N- N# d, P5 F( X
三、实验环境
! G3 ^( x5 H4 O
( ~& l3 @0 |) I& g* ? ython 3.86 ~" |9 ]! \( U1 W3 F l
+ O- p+ J b: P四、实验步骤
! c/ v9 T& N' y6 Y0 o0 X, O, M0 d! `+ i8 a: ]& ^2 g+ ^3 t' T
查阅文档,了解南丁格尔玫瑰图的原理。
* `7 y, g5 Q& N8 ^6 A; q8 G选择一组数据,编写程序画出玫瑰图。
" u7 Y* Y5 M# _6 _8 T( A9 i五、实验代码及测试
. m/ D0 ~3 \, t/ l' |+ Y# L; U S! ^9 Q+ r5 K
1.源代码# u1 W0 g: h! ]' i. C9 w+ l$ W( l
. ^3 r7 v0 G( m% g
import matplotlib.pyplot as plt$ r: y8 ]+ Y* |: K7 x; U' T7 T
import numpy as np
3 F! Z) @( V( m2 p1 Nimport xlrd: s% F9 U! n# M9 _" z9 c
& m" @% @2 E) v, I+ @'''
# d3 E. s8 o/ r2 o 按列读取excel文件并存入两个列表
9 S: X& Y+ W6 w( J1 a'''* a- J8 w+ B; F
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') " f7 I8 [% T J' ?. N0 T' s! N
table = data.sheets()[0] #通过索引顺序获取工作表3 }# `) q$ G0 R5 F1 m$ e; j
cols_n = table.ncols
5 ?) s9 z% \( d d' jcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名% F, O( j( x% f6 D# U. Z
data_list = table.col_values(1,start_rowx=1)
# m$ R. t+ C( J; Q$ z# print(data_list)
, w3 i- Q3 }' c. w
; @' R) f- ~' Z/ r'''
t( `! ? Y, n5 z: D 计算角度5 t! X: Q @7 U# q' b/ I* u
'''
; Q# ? [- S& c: B% A0 r3 in = table.nrows-1 #去掉列名- p" [: Z+ ?1 _' e# E3 T
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
$ e# \ q5 k% R9 l' I( Y
/ W5 z& u* L5 a; \1 ^'''
9 }8 |/ B* i7 b/ t. M+ j 作图9 t" P _! h, L( p. B5 [9 }
''': t4 w H' |" j2 a' y1 v
# 设置画布
& R; i( `, u1 H2 q6 z; Hfig = plt.figure(figsize=(12,10))/ K# O4 @8 Q/ I l2 `8 E7 B+ [
# 极坐标
! Z; J6 U X( Y" rax = plt.subplot(111,projection = 'polar')
$ S& L( r$ z/ [# b- Q' s( V# 顺时针并设置N方向为0度& t8 F a; f- U G4 F0 R
ax.set_theta_direction(-1)
4 V& H3 \5 {0 _( }4 `$ ^ax.set_theta_zero_location('N') 4 V& A. O/ |$ \7 K& J+ s
% R$ F4 m( ?% i5 V' R: w! ?
# 在极坐标中画柱形图6 Z0 ~; e( K, d3 w+ o, G
ax.bar(theta,1 v4 b+ T7 b; J* O
data_list,
; Q5 p+ v. c8 ` width = 0.33,
, m' r+ [4 Q; F+ f/ v' v* Q0 L color = np.random.random((len(data_list),3)),
8 {5 g- R* s" ]5 K0 ? # labels=str(country_list),
0 t1 b# `" R% j) l" G& W align = 'edge')8 Y- b( [$ R) ^8 P9 q" x
''' $ C: U1 \) a) p
显示一些简单的中文图例
8 Q6 s5 N& |) x+ z% M'''
) O; v/ ]6 C/ ^8 @3 Tplt.rcParams['font.sans-serif']=['SimHei'] # 黑体
- e. p5 R& R/ u# N% Nax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
/ n' a" I0 G4 J+ W& Z9 H: q: E3 xfor angle,data in zip(theta,data_list):' ]5 ~ d$ ^: I/ u2 {8 R
ax.text(angle+0.03,data+100,str(data)) 1 l9 ^! n6 C- c# i; u! Z
; O9 f" d) g& o/ Q: @
7 D& H1 W6 ^' y7 u6 o) N* m5 s
plt.axis('off')
7 [, H5 t! o# i( ]) z/ |6 `& ?9 w$ T
plt.savefig('Nightingale_rose.png')" V6 z v. ^3 r
plt.show()$ f& v4 n9 Z% _& |
: G3 T' J. |3 g2 O+ _4 C% Q
& }( s ?: R1 K1 V: T) g7 S2.运行结果5 q& `: {7 c8 X/ |5 D% K. \& H3 C
* T |/ E* k3 @ { N1 a
M: F. a& G1 W5 s C3 [/ e' G; t1 U
3.excel数据表* S' u1 Q2 C7 Y' t8 @4 ~* b) }4 G
+ |8 I; }. _- `1 r: Z
% ]* `' |* ]/ H6 R& k0 O) |0 ]$ |
4.说明
+ @" N" V: q& }5 I 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
% G7 B- `/ l$ e. w6 U' c$ E 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.: d2 j Q7 z9 g2 F" B0 G8 r4 F
————————————————" R z& o) Z7 ^3 o
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 }; V/ t3 b( m2 N
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
8 g+ B. A" n9 r1 i, \( Z! U
/ r' b" O6 \6 x: W5 U. B `
% d1 t j+ x" @! V |
zan
|