- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558425 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172900
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
4 J$ r1 h. o! ]$ F
python+matplotlib绘制南丁格尔玫瑰图
# O- j$ s, [# p7 N6 K& c实验:绘制南丁格尔玫瑰图' v" b' r: } ]- K* U- u
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ _8 `) W5 m/ C: Z7 Z
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.6 R3 ~9 ~ ]& ]3 l6 D, l" r7 E
1 N. ^7 K0 n8 J9 v4 G: q文章目录0 Y: l' ]* ]* e4 Q j) n
! H6 q% A9 X& ?, Q2 \$ y6 O一、实验目的
4 Y, [' X8 y1 H8 @4 p0 B' X2 w二、实验内容
% O0 j7 e1 |$ n9 O0 {三、实验环境
& Q7 o) y% ?' J) D/ [$ A四、实验步骤2 P! w7 L8 L- n$ {
五、实验代码及测试
9 u" w% v, {' L2 C1.源代码
2 `& j* u2 Q% i. f2 L6 X# D2.运行结果7 [6 y9 m* T: X" l2 m( V
3.excel数据表
& w% o" [% F; G1 ^- h* F' t, {% k一、实验目的# A+ F4 c* t) l2 O E0 w
( w! n9 \+ Z3 w @ 了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
* ?2 c: n( _7 r4 [
8 x; p4 u. z/ V二、实验内容$ C5 j2 l4 n k
4 }, d. A% {8 D% r4 P: i& C
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
& t0 ~4 V8 A' w1 ?0 p! q 自行选择一组数据,画出基础玫瑰图。
+ a! p+ c2 L5 d6 d4 Z: J: A" L% {& z9 m6 y" @' o8 y0 q/ t0 E
三、实验环境2 L8 I5 J; }3 \7 U: U+ s
* k( R J6 o( s ^; u' t& W ython 3.8
6 i' }# V. |$ ?! v, U9 R( j- u: }: R$ e; s
四、实验步骤
. A$ K6 J4 X# e1 }. o0 A; K% b T9 f* |/ i" l- p# h0 U& X
查阅文档,了解南丁格尔玫瑰图的原理。, s7 N9 t* C9 N
选择一组数据,编写程序画出玫瑰图。0 S8 X4 v- ^3 A
五、实验代码及测试# {, I; B3 _" e% i( o, ^) @
1 J [, X$ X! _2 `" d2 L
1.源代码
7 p/ l4 \2 e& D+ t+ p6 c) j
& t4 A. ^2 _' F# _# himport matplotlib.pyplot as plt# R8 z- R/ Z" ^ q- i( g
import numpy as np, @* K+ j% W# u5 P- b% C1 k
import xlrd9 q; O6 n) b/ k. W8 Z, j/ U
& x( G- l/ l# t u
'''
3 i9 ]) O- [- n) }$ w$ \ 按列读取excel文件并存入两个列表' B! r. X. U7 G/ n2 X
'''. }$ J1 m- S3 K( M1 s K0 r
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') ' A( b' m+ s) O
table = data.sheets()[0] #通过索引顺序获取工作表9 c3 [* i# f5 P& `
cols_n = table.ncols
+ T8 M. G: Z* P* p4 jcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
3 r' m+ b/ A$ h9 {8 T! N9 ydata_list = table.col_values(1,start_rowx=1)+ d. K5 u5 Z1 S t W
# print(data_list)- j# @ g2 L( C! X
, B4 r9 s/ P& N" ?+ X& k" U a& d'''
2 ~, Z) _! E1 K1 S8 @9 x/ L! a/ P5 Y: t+ } 计算角度( F/ b w+ T' O( W
'''
+ K% l3 ]: N7 nn = table.nrows-1 #去掉列名$ A2 j8 F: L& o0 G
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
2 J% X6 n7 u# m
2 }% T! F5 L( L7 d( i1 F- t'''9 y. z0 q/ U+ {4 j3 b
作图4 A* {" q A9 J* Y1 w' k
'''
2 Z+ M9 E8 D) F' Y9 [- ]# 设置画布
+ u( {3 H C7 Z) U5 Sfig = plt.figure(figsize=(12,10))
5 C- x4 B1 p9 e/ [# 极坐标
4 ?! V! K% M, n9 x+ Z: a% x% S; uax = plt.subplot(111,projection = 'polar')
& b" ?; U/ n; }- M1 i* A4 a# 顺时针并设置N方向为0度( S+ ` M( M7 B( G6 D& S1 G
ax.set_theta_direction(-1)
7 w3 l6 o5 x" j# u4 f+ n; Q9 h. lax.set_theta_zero_location('N')
) y3 P: `, K2 u0 p
5 I$ B( X! R& N4 T- m$ S! h9 b# 在极坐标中画柱形图
: N/ G! j" r! `4 iax.bar(theta,' I2 [8 F3 I: ~9 A2 X: Y4 E
data_list,/ t+ c+ [, W+ |8 r' m- Q
width = 0.33,
% A$ s, ?4 a* A color = np.random.random((len(data_list),3)),
8 F% f3 ]% l: R9 `( u # labels=str(country_list),
- S) t" f. t" t align = 'edge')- u! H' l5 ~9 `; R6 C4 H
''' 3 p/ V4 T2 }3 l3 C9 ?
显示一些简单的中文图例$ {; _) l' W( ]; Y" q
'''! z' S4 x/ ~9 B) q
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体4 ~4 Q6 @# N8 R# X8 X
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})0 W$ O0 @; B+ I; F9 _4 ]: q) R
for angle,data in zip(theta,data_list):
8 K2 }3 P) |4 }# R0 A/ t6 H ax.text(angle+0.03,data+100,str(data)) * |5 P+ t9 D) p" [
. r2 Z# m0 n1 b! r; F; J0 \- s6 Y* k3 _5 n- R
plt.axis('off')
4 g: @+ \7 ^) e
/ k# Q" }" X; {' B$ _plt.savefig('Nightingale_rose.png')
" o) r& u6 V6 f1 n0 P, Eplt.show()% R8 [2 O5 Z2 `/ f, N9 x
0 a: h c3 o2 i' a7 ?$ ?
& k4 _9 c1 f5 a0 |" H8 W1 b2 v0 S
2.运行结果
) E8 b1 Y5 d6 h+ V) I: U: c
( g5 R- @( Q8 g2 b
& _' k0 ^# k3 z$ R& L+ j
9 A- {2 {* N/ Q, |
3.excel数据表, \& v+ Q) `; u8 D" z+ d
: a+ Y' F9 n6 W2 @
" Z) j7 v8 Y9 E$ s; D. w
4.说明
4 ]7 C% @5 M. C- R. R# o& h" Q 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
, f/ M9 `: [ |, x! t: K# X 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.3 [) P: R1 s0 T4 |- p o
————————————————0 y$ E5 A8 u1 x" u/ G' Q
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ x; c) x! {# r) c r7 f9 u2 r- v
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852* _' h& s2 o5 J$ h7 d- b
! W: P4 [, c& y
' p; V( y6 _7 o7 x( Q
|
zan
|