- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563393 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174241
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
2 Q+ W9 w, f* m2 E& K) J. E* }
python+matplotlib绘制南丁格尔玫瑰图5 L b8 n0 P: D/ F9 j; u
实验:绘制南丁格尔玫瑰图) @ [* |+ n( _! a) Y8 `, f
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~1 E' `" _% c- s5 ?
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
7 J0 a) }% p8 V. C( l8 |4 T4 c5 j% ? ^- h( ~. ?; w
文章目录
5 Y' p, i. r A7 M9 |
9 ^9 f8 j7 _7 Z; ?一、实验目的
7 Q! l5 V0 R1 a4 y二、实验内容
1 X9 d& ~3 g. I5 {' {6 l三、实验环境
7 P2 C' {! ?: L( ?- G2 \; i" w3 P5 r. m四、实验步骤
9 ~- q0 t& Q+ U/ Y9 Z U. c/ g五、实验代码及测试& F' J0 X" ^: f1 M7 M
1.源代码
: E: b1 Z" P8 A, K& d a! X* o2.运行结果& h5 ~$ a& E6 K. Q" \# \ h
3.excel数据表
& o) D* v3 _9 W+ Q3 \: g1 X8 Y! h6 ?$ @一、实验目的
+ Y) y( |$ i% }& i' J6 G( w0 j' P: ]+ B' d( s" t6 P; {
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。2 P9 j! S# A( I! ]6 y* U
& p6 H' a) ~- K) ~
二、实验内容
0 ~ _5 X8 g6 V7 w, x y
" a3 O5 R, K( ]) G3 x 南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。: z+ c) J- L- n. L% Q6 E
自行选择一组数据,画出基础玫瑰图。
" S! e: t- w& A! x+ q% k% c7 ]* y% u c& V. c) t
三、实验环境9 O4 f5 t ^. y6 j( Z( @
; I* g; w( s+ b6 Q
ython 3.8
5 t' v/ s9 e* z; i+ j& j- d
, u, u9 J' a" A7 q" U0 Q四、实验步骤5 s& K* i0 r* n2 y* g& K1 w' w
# e% a u9 t" h
查阅文档,了解南丁格尔玫瑰图的原理。
. H$ ~4 J9 P: \/ M$ T# x) |选择一组数据,编写程序画出玫瑰图。1 \0 [& w" b" b7 _0 \: h
五、实验代码及测试
7 g1 |$ R) }( I/ p2 L+ X
: H, t: O$ U3 B1.源代码2 H% O* A) p) L) |
/ b/ S2 V- P6 E- F/ C: _
import matplotlib.pyplot as plt
! U$ ?2 O g& J( eimport numpy as np
. N2 ?6 z. n2 _) _. m: J, Aimport xlrd5 z0 ^4 N/ V. I6 _2 K* d9 m4 d
6 E. V( z- L: e5 m
'''4 |! V4 n3 N/ S4 B. h1 _# B
按列读取excel文件并存入两个列表
& S/ G5 L; G, |) X8 y- `1 y) g'''
. l1 Y6 `- A6 }: U0 A, Hdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
1 d: d9 [# h1 z7 p stable = data.sheets()[0] #通过索引顺序获取工作表) V+ _7 o. C8 ?+ E1 I
cols_n = table.ncols 2 a6 y [& P6 S, Z& }* H; ~
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名3 Z+ ` \! K; H+ m6 p, C `
data_list = table.col_values(1,start_rowx=1)
% }# Q' H' _0 c* }" k' ~# print(data_list)
( a* S4 v$ \+ J* C; L% n0 B7 a0 g
'''8 N& \6 k3 p# p/ E* M
计算角度( d( I5 T# C# M- c$ ^
'''
) Y1 j4 D6 t. f( L( bn = table.nrows-1 #去掉列名7 g6 a$ `/ y- S
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
9 J9 m& C' _7 o* y' z' w: \ |: L% _9 ]; Z3 B& r, z: C
'''! ]# R2 E( u' ?0 g4 Z. S7 T
作图8 k; O7 v2 J. `6 Y$ i% ^
'''$ r1 ?. {+ r7 n: f# G9 P: J
# 设置画布* ?/ y5 _# d7 S9 l4 o9 t
fig = plt.figure(figsize=(12,10))
7 f# F5 `# `6 H# ^# 极坐标9 c6 {" o, i6 d# @5 z3 _3 ^
ax = plt.subplot(111,projection = 'polar')+ _) @' P, y4 G+ n, ?
# 顺时针并设置N方向为0度
$ l" m0 W3 j& b4 `( R5 j d' Pax.set_theta_direction(-1): H8 k3 o v) _) F" T
ax.set_theta_zero_location('N')
' d3 S& c$ A: ?; L: N `
6 U6 ~, s: m2 h8 ?6 @8 ?8 w# 在极坐标中画柱形图
$ P8 B) `3 \( {7 B; T# Tax.bar(theta,
1 L1 p- k! G/ a( ^7 C4 @" n* B data_list,* {' U% [! D, m) T x1 N& k0 ?
width = 0.33,
* B2 E# K( `& ` color = np.random.random((len(data_list),3)),
5 f' ~8 S* I/ L9 G5 | # labels=str(country_list), 6 z% c% w6 G6 p
align = 'edge')) p; @$ J; i1 t
''' : s9 B" b8 {; U! \8 A: f
显示一些简单的中文图例1 |: N5 ^( \ @2 L3 @# L
'''6 i6 S2 w& Z. {7 W5 I. ^0 N
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体/ G6 Q- Z% P0 y Z1 Q
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
% T( g. A( V+ j5 j1 k3 Afor angle,data in zip(theta,data_list):# G v7 `( w& Y: ~5 X
ax.text(angle+0.03,data+100,str(data)) % b& U# @2 u% }: }
' t# H/ ^) m) x9 }; h: A7 \
5 r5 h; P' N# ~- l4 _0 M
plt.axis('off')- N- f3 g. \8 ~8 @0 n
% x; } c. a- P- ]6 L& y
plt.savefig('Nightingale_rose.png')
# J$ J: Y) G. J+ jplt.show()+ O! j5 @/ @; n' g. R+ S" R* J
, C( M6 I1 G# z/ h8 N0 f. a6 a
0 {3 ]: p$ ]( j: B2.运行结果2 j* W3 C; h6 q6 r9 ^
* b" p* }- | i
3 h0 c; B; h6 j3 n, S& |
R2 R+ J: X1 k: `3.excel数据表9 O+ E" a- T3 G
& r! c1 {* [: N
- q' X) n. G0 S" }' R# y! c2 d4.说明7 Z9 _3 Y5 i8 \6 y- n
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.5 Y, |' j2 T( r4 `, ]% o9 M
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
7 K% F( i# P/ ^) s5 j; g3 x$ W————————————————
4 D3 {1 O9 n) X$ l/ t: [版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 k7 o: i7 D+ h$ H& ~, V" g1 p: C
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
" ~# D0 m/ \% I5 Y! e; T% N$ P& o" k- v/ @6 L4 b
; \+ b$ E W: U: T+ N |
zan
|