- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564636 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174614
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
- U: O- R$ n- Z. }( V5 `3 ~1 x
python+matplotlib绘制南丁格尔玫瑰图1 [ ~6 ` y, Y0 u
实验:绘制南丁格尔玫瑰图
" e9 L% \5 k) Y9 Q% d/ r, f! L 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
" M5 R3 L' ]# g2 h1 |0 A( K 无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的./ T* ]8 k9 c* ?" m7 E5 u
9 [: A+ |6 d- p9 Z$ ]文章目录. D" Z" h# p, }& z
# f+ p y8 }0 h9 m8 u2 f一、实验目的
4 o% N& n2 N0 L! q4 s二、实验内容
- }2 k; z- |3 f" Y三、实验环境) H6 i- I7 m5 b! x* _2 Y
四、实验步骤
+ I! o. g* ~' Z+ ?4 K1 _7 i五、实验代码及测试6 K" j& o' | L6 H" g
1.源代码
- d" R. k0 |0 x: p1 r! {2.运行结果- k) P1 m4 I( O
3.excel数据表
6 H. L9 E' O& ~ P" S一、实验目的9 D8 P0 F2 n' R. T: T
; V4 {# v* j: x8 l2 {0 C
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。) Y+ P' f" C7 U! c6 s
% ^$ \) Q' M. s5 x+ ]$ x4 Y二、实验内容 G' X' W* X% U8 h
8 i7 l* H8 q& t
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
( X9 M) E0 s- |! H2 S 自行选择一组数据,画出基础玫瑰图。
9 i+ r2 R; H5 r4 T% e) d( t2 f; C9 i( h% e
三、实验环境, [# g7 |- b' L' Q: S9 r, a- |
, W& v, D4 v4 O/ E7 h# Z
ython 3.8, L2 T ~8 `9 V4 ?
- N8 I; H- _8 Y/ t8 f. S四、实验步骤
) u8 h) ?$ i% r) f4 d! ~ I* ~) q0 n+ P
查阅文档,了解南丁格尔玫瑰图的原理。6 A! T; |) ^8 N' s1 k' J9 ]
选择一组数据,编写程序画出玫瑰图。
7 U9 N+ S' p' k: s五、实验代码及测试$ e" V7 P/ z V, H$ n
# X) @8 M. T' s( ?* B. j, `, \+ o8 Z1.源代码
) n) H- G( G) r+ C8 q+ H. Y/ t# B) I7 r4 }
import matplotlib.pyplot as plt
8 q; S1 b6 q3 [" j. [import numpy as np
# q: V. p g L! r+ y8 V3 Q( Dimport xlrd% W. ~; G" {0 I# p, g
7 B* n3 i R) [- Z! Z
'''
( d$ N' w d( z5 S 按列读取excel文件并存入两个列表$ z7 V3 F- R7 i5 q. | D' d
'''
; z3 s/ p; Q+ N# n- k+ G. Qdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
1 \3 l' {. P4 _- d, G! O! Ytable = data.sheets()[0] #通过索引顺序获取工作表) G L. _) I# F% O" b1 }2 j7 z
cols_n = table.ncols
# j) Q5 }4 D+ d* l; a. Q5 t% ccountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
9 S5 ~( k& v) udata_list = table.col_values(1,start_rowx=1)/ Q$ G0 j- @2 d7 r3 O
# print(data_list)
$ g/ F4 T U0 ~% j3 X5 p6 ~6 p. u8 z+ f" r d4 c2 m, a
'''
" o2 R# g2 ^4 a 计算角度
' J1 o. x! p9 A Y+ u'''. Q& e+ e( _6 [, k) U
n = table.nrows-1 #去掉列名
( j& t+ c5 m: m$ w6 N t8 Otheta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
4 u% l# M/ J: ~: `
2 V4 T0 F+ B+ w( H9 H+ h- b. W& G5 i'''% G7 I) t+ _6 ^: }! \% M
作图
7 f. Q5 y- c- ` [) u8 E'''
- S+ s+ n. \. t# 设置画布$ t3 y3 O1 N% }9 i: D4 I5 H
fig = plt.figure(figsize=(12,10)); W* _' S) ?& O" e
# 极坐标5 ~* p* W+ @9 d9 [; A4 z) `5 S
ax = plt.subplot(111,projection = 'polar')
) a; ~3 U6 J& E- @) {7 R. |# 顺时针并设置N方向为0度
4 j# |& E @ W4 }ax.set_theta_direction(-1); D! G8 p$ i2 q2 N" Q
ax.set_theta_zero_location('N') " ?5 D' {$ Q1 G5 S7 s0 J* w
4 d, w9 l9 J5 E# D. t. K# Z% k2 e# 在极坐标中画柱形图
5 S6 M8 Y, ?6 W9 Vax.bar(theta,
" I' m/ X( r/ ?: h( j1 t4 \ data_list,
+ l6 }5 l+ S7 c: H% G' j) p width = 0.33, x0 U' N1 R' y% U8 O5 @' a; B
color = np.random.random((len(data_list),3)),
0 k, b2 X6 E& z: Z # labels=str(country_list),
$ S* \: S3 ]$ d9 J l align = 'edge')+ B( h- e4 ~7 z7 f
''' . `( M9 Z" @5 Q* A. }
显示一些简单的中文图例) E @( ~; Z! H2 y6 ]! r
'''' [' m& D- [ Y& t% A
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
1 z$ F: [5 a( l' c( m$ f& K# Tax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
+ C# e* [9 Q. @+ O6 nfor angle,data in zip(theta,data_list):
# H9 l7 I% S1 L( P0 | ax.text(angle+0.03,data+100,str(data))
9 G# A' F# u( G. F o7 t5 L9 {) d: T# W2 S( A' b) m# |3 p* o
+ [( _- p- ^8 Y6 m, Splt.axis('off')- D& }8 f; N; \/ q5 @
3 t) N8 I* i3 `. j
plt.savefig('Nightingale_rose.png')
# G8 b4 x; c% g, ~4 p4 w+ n7 w- i( }plt.show()$ v k/ \# T: L
$ a5 ^( J# y0 b( A- g1 ]5 F( K L: T9 t: i; e
2.运行结果
3 z! ?) b! K) K3 j- n6 z" C8 a- V
% i, m9 Z8 a% c2 c( N' N. h
: }! p' y( p; P6 v' l! I% ^
( L s6 }6 z0 G; f. o" L$ u* Y6 h3.excel数据表6 @$ Z# k% l1 k8 @% K9 W" R: Y: W- l
- O( F, Q" M" V9 L( B7 O- v; h) b
4 n+ i3 e7 z% C: a# r4 P# n4.说明/ S F3 v) c/ k: b8 l+ `, ^
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
' z3 C$ o+ ]7 I; `0 Z 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
5 P8 D: [1 {) i1 |————————————————
& S3 K, s) X% r# p( u) ]版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: x) m0 J1 `* g8 x" J
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852# l- Y3 B7 P# a( a1 s: N
6 x2 Z& Y6 j( O- D4 d. d' T( I
2 L! y, R. B! Z |
zan
|