- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565568 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174893
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
) `9 u. y' T9 Z. Spython+matplotlib绘制南丁格尔玫瑰图
& b' V V+ _' S: i5 `实验:绘制南丁格尔玫瑰图1 H! N, r# w* Z* a* L& j
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~/ M7 ~+ Q* p6 j: F
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
7 u6 E% {) P5 [! w' p8 ~( B0 b* z
: n" x- c& z1 g' o+ R文章目录( w [4 |/ K5 m" k; T& |; L4 a! b0 V
, g5 ^& Y' s) o# z- P7 [0 P3 ?1 e' j一、实验目的
. L: q0 @0 a% A& q% K% m二、实验内容
2 W \3 K$ g' q9 c% k三、实验环境( s; H6 G6 |) h' i: u
四、实验步骤+ ~0 y' r4 [& n: p1 y
五、实验代码及测试
' L% i& ^' V- \" v7 x) {. W4 ]1.源代码
8 Q- _" X# s7 K. a. B2.运行结果! a) d. s7 M/ _/ N: l& K. b
3.excel数据表8 P3 K! ]+ w A7 }, A f+ [- s
一、实验目的 Q% c, r+ d* F7 j3 i
% W6 q; }# K# p0 h8 Y 了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
6 O0 t& ]) v! C- Q) `
7 Z- s; k" H* R4 `3 E" r二、实验内容
7 [5 e9 |% H# ]5 l0 {! D& b/ L# l; J4 e
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。/ @7 U% l- O& T' F, F) [% f
自行选择一组数据,画出基础玫瑰图。
% r: _" _0 [; ^) w% i. b2 h' C3 h: R- ?8 R, ^
三、实验环境9 Y3 ` s& W4 g9 {3 V* N; p* p( h
& M. ]3 A. d! f" O, \ k5 t
ython 3.8
. |! ^& Q- C: Y! s7 e! h7 X9 Z; X# C | @5 ?6 u1 ?0 o
四、实验步骤4 r- a7 k) h5 w: T! m
: v& C- O, G$ C- ^& a4 s# U
查阅文档,了解南丁格尔玫瑰图的原理。
, S H2 C+ X \. M& [" w2 q! X选择一组数据,编写程序画出玫瑰图。, a& S: t* Q y) n' o
五、实验代码及测试
) Z- F0 u( }' m( ~& u2 T' N' f/ C" D9 l P: M! d$ _5 U
1.源代码
+ C- E1 }9 B0 `+ T+ g* X
# ^8 d/ A: R; C8 Y! W7 Z. `import matplotlib.pyplot as plt7 O( G8 q# x F& G
import numpy as np
* |- y! D4 ^2 ]+ z/ V+ uimport xlrd. w" Y+ p7 L; W% t) N: R9 Q
4 ^, j8 }9 }4 k+ ~
'''- u w- l' c) L0 ]' B: J
按列读取excel文件并存入两个列表8 k1 i6 \( I% C5 p: y) ?: X: ^
'''
: M% X$ M* }$ ]( Rdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 0 l* N1 H9 O% ?
table = data.sheets()[0] #通过索引顺序获取工作表+ c1 G0 @) H$ p4 p; @" x
cols_n = table.ncols $ ?' r' U" C. {6 N# u$ m
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名2 A" D) _2 \( }5 O! T, m7 j
data_list = table.col_values(1,start_rowx=1) H. [: \. y" U) r1 _$ J* k
# print(data_list)
: A+ T5 O1 r) F9 d! M- y6 T: C! m! K% {* a, U+ ~( \7 G$ A9 w) f% j
'''( T* i4 M. K0 U) c" D5 g' V/ y% T
计算角度- H- y* v: | B1 d0 W1 b( I0 `. n
'''
% d; N! C% Z) W+ p" bn = table.nrows-1 #去掉列名
" i; ^# r( I. s! I% [/ v9 m Mtheta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份 S- W) f( ?; ? Y. \- ~9 g: b$ Q+ ^
! Z2 ], J- K% E7 r+ G9 D
'''
4 u' c$ v. X& P! U5 i 作图
" I& ]" s' m. ]* P'''3 X" v- T& h ?% e$ d4 p% v$ p
# 设置画布$ r5 I9 A2 Q: i9 Z
fig = plt.figure(figsize=(12,10))
4 G8 t0 y. W4 l; @# 极坐标) S# r( U# m+ S, e
ax = plt.subplot(111,projection = 'polar'). a/ V2 z/ J0 g+ R! S" l- k0 m6 X
# 顺时针并设置N方向为0度
- S& P6 ~2 g' E( q* B$ ~ax.set_theta_direction(-1)- n# X3 f8 _, z7 S" D
ax.set_theta_zero_location('N')
- G; `8 d( M: F5 K2 V5 z* {" ~9 d; m3 G3 Y3 O) e0 K
# 在极坐标中画柱形图" r: r g h5 x$ X1 E$ n: D
ax.bar(theta,1 q- H! J7 W( R9 `) @
data_list,' Z% L6 v" Y2 `# A2 B J- n2 v1 a
width = 0.33,
G% i: l% i4 ~0 p/ G r6 }2 w& X9 o color = np.random.random((len(data_list),3)), P$ X# U% P; L) }
# labels=str(country_list),
! {* Y9 C4 [8 j. ?+ @5 B8 k align = 'edge')
% h0 M# z. K+ V'''
/ v* ^/ n8 V7 d J 显示一些简单的中文图例( I- d8 L" X5 k
'''
0 b4 }. e, x+ [. V/ aplt.rcParams['font.sans-serif']=['SimHei'] # 黑体" b3 v: M$ n, P1 t4 N0 g! m) o
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
2 y, A1 ?* S0 h0 Vfor angle,data in zip(theta,data_list):
$ l+ H1 l4 X2 _, D0 a ax.text(angle+0.03,data+100,str(data)) ) m# F- o2 f4 y/ X
" t8 _$ _, I8 H$ t
, H( |+ z8 r5 J6 }8 h! G0 [plt.axis('off')
, |' v: B0 ?1 W3 _% Z# F7 Z6 w* j7 D# g
plt.savefig('Nightingale_rose.png')
4 T3 U& M8 U2 C9 F$ j( d; l8 aplt.show()% w# j7 }3 Z! C; B
- ?( b- ^7 K' O5 `6 A
1 i: G5 a( Q" l- P0 s* m2.运行结果
3 l* I# [ y; [
" I' c- U: W( b
9 \* M- T: B& N6 ?- U D
( I0 B! M& z" W( m; T" E
3.excel数据表
( n! @1 ^4 q5 i
2 I) j! p$ O+ D2 }" y
( F8 P* c' V9 U& R6 {, B4.说明
2 i8 I: V# ^: `9 u8 ? _* ~( p$ d 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.# R; \ E1 W+ Z+ {! \3 H1 r
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.+ n0 f( s5 }. P
————————————————
# K, E9 f6 r9 c* x版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 \! \7 F; w& }1 T
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
# ^) ~5 V$ ?# c2 r- Y8 c
+ S) x4 r% V7 F, t7 e5 z3 z; V! F0 K" ~5 J+ i; q9 A. w( t
|
zan
|