- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558805 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 173014
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
* o- T8 O' k- w' j% g3 [python+matplotlib绘制南丁格尔玫瑰图7 k1 ~7 h% a W8 g" |0 d6 k) e
实验:绘制南丁格尔玫瑰图
; w& E8 |" O. k8 p' g 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~* ]$ h5 l2 e+ {, R
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.: J" ]" F9 x. e7 h$ r0 C
@& g$ h( a+ }/ O" E8 w, w
文章目录" |- L9 K* k# @, o$ k- V& \2 K
3 n) Q' K9 g# j& |& M3 l一、实验目的
1 U3 E) o% v3 ^; C二、实验内容 n2 w/ `( e- [' y2 Q. _
三、实验环境
, E" S# G, F$ l$ _: \: }四、实验步骤: t ?4 Z' g, |" L
五、实验代码及测试
7 M6 W. Q# N. x7 f) M+ D1.源代码
1 N: M' M& D7 l% b2.运行结果
6 n* h! G4 l* i8 g7 i. Y9 H9 b2 T3.excel数据表
/ {! A* z& z. B- A" _, E一、实验目的1 V& ^, Y* l. @6 D
8 e: U0 m& K3 e x! n
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
9 E6 @! A0 i" Y) G1 f4 [/ E1 `8 P- J8 c2 ]' M1 X) d
二、实验内容
: G. E$ u/ I$ G H6 M
1 E/ @3 b, p H7 W. K P; p% G 南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
8 X9 [' n: y( a7 } 自行选择一组数据,画出基础玫瑰图。4 p" x+ \0 p% S( B5 V
, ?( ^0 {+ h0 B三、实验环境
H0 h9 ]$ V* m) m+ @ Y3 x3 Q) d. h; D
ython 3.8
% A* v5 D8 w$ X1 D% a0 m* R) @+ p# B3 W; A: X3 |& A
四、实验步骤5 \; X; r- J: X. ^6 c# m
/ o( P* v$ [ D5 ^! _% X! y5 a
查阅文档,了解南丁格尔玫瑰图的原理。3 J9 W- N2 t5 U- X* y$ V* f+ \# u
选择一组数据,编写程序画出玫瑰图。
( A5 O* D7 W$ F' H4 J% j五、实验代码及测试6 F5 U' j% Q& G7 s' {/ a; A) a5 a
X' f2 p9 u5 q( |* I/ j1.源代码6 `2 ~7 A+ O2 p: `8 z5 D D
$ {7 B2 c8 E( H% x
import matplotlib.pyplot as plt
) |/ y. G) p" d2 E7 nimport numpy as np
( P4 ~) u7 K3 z3 \& i% A0 pimport xlrd
! p+ {/ W1 G% O7 b. p" m, y: V
5 N6 H; L) D; X) A& }/ ~8 c' Y6 u'''
0 I0 j0 f3 M/ o" t, _: V: q 按列读取excel文件并存入两个列表
+ A4 `8 t- N7 n1 }. p9 u+ w" P9 h'''
* @$ w8 e7 e3 N* j( Bdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 8 k0 K+ x' q: C- K" e0 S; B) J
table = data.sheets()[0] #通过索引顺序获取工作表7 E. a2 |8 K3 ~! _. o& F6 E
cols_n = table.ncols 8 u; l5 I* m: I! p! j& y
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名, n- Y5 M+ _% Y7 {, s0 `& L( b' F% o
data_list = table.col_values(1,start_rowx=1)
& ]* w) q* d" [6 D: N# print(data_list)
; I" H- \: G3 H* Q3 X% P( l- y8 V& V, o8 {
'''( ^! y+ k; f) X6 s1 J: ]
计算角度
/ }- @8 o( O- ]4 H X'''4 `* A5 w9 o: F) t
n = table.nrows-1 #去掉列名2 l$ t- M! r% \$ a3 i- I
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
5 H$ t" [; `' z% G
, m( A2 A$ u% M, ?6 s'''
# U; J) C# \! h0 z$ H( o5 H 作图8 @% M; o, G5 N
'''
1 G( Q8 V2 X8 j1 ?9 \. G+ A# 设置画布, Q( g+ T: {) d' ?+ Q
fig = plt.figure(figsize=(12,10))( H) a- s% i; I% _ `5 g
# 极坐标
" I0 }7 j' A5 [( r1 `( U' V5 dax = plt.subplot(111,projection = 'polar')
" x( ]/ N: g; X5 G# Y i# 顺时针并设置N方向为0度% z! S+ U. Y {$ k. Z- S
ax.set_theta_direction(-1)
. w" D0 n) ?; M; m: c5 b% _7 Yax.set_theta_zero_location('N') . l) j+ E: G% o) l3 i1 G* V
9 O( y; e, x. j' j
# 在极坐标中画柱形图* e) b' p: D. h
ax.bar(theta,2 B, f1 H0 C3 M, Y
data_list,
1 U/ W& R" [! ]& k width = 0.33,3 \5 s9 ^ w. K e. x) _
color = np.random.random((len(data_list),3)),( p& p8 g& r0 l; N i5 M
# labels=str(country_list), ' }) `" x" {* m5 C, q! [! o2 o1 p0 H* h
align = 'edge'), [. S% _: y5 Z
''' 8 _' {5 D& _# x2 G& M. a) v
显示一些简单的中文图例
8 c8 j3 z/ Q0 V$ u1 h; Z# j1 { K# |''': G7 h0 L) x9 R
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体 w$ y, g1 y7 x/ I" w$ O1 k
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})* ?1 z( D: W0 j+ y
for angle,data in zip(theta,data_list):" J4 |) n& u" E
ax.text(angle+0.03,data+100,str(data))
9 T( j! R: k. |% Y
+ G h5 s* K: _1 t) g& u( t% ?) @5 l+ F. g
plt.axis('off'). l/ S, m# M- ]; e# b
9 S% w( H( i+ P, g4 m
plt.savefig('Nightingale_rose.png')( I6 I# d8 i8 Y s% M
plt.show()
( H' X' {- J. s/ }) u* p5 K( y+ z
7 s4 ?8 f* |0 |8 r- `; f2.运行结果7 f: o0 z/ Z0 ~9 Q M( Y# r
0 v, n9 c/ N# {) Z
" [6 X; M1 \: G4 P( w! I# q. Z6 x- D+ |, R. _. q
3.excel数据表! y& [) ~0 k1 i( l' j6 s8 H
( d, g0 H3 K2 |
8 c$ K+ |0 I2 o1 l4.说明
& @& H) s1 }8 j: u4 T 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
2 D2 {& o: h0 H4 S/ Q. R 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.# I# y0 q' g% }
————————————————) I; X) ?) Z3 y/ p# ^7 v8 }
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' q5 g+ d, d& R ^$ A
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
1 ?" ^' N" |+ i( U0 n! F6 O- S- o4 M/ C- k6 C
$ D' L$ r8 k) C b J' n5 k |
zan
|