- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564628 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174611
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
9 r4 k: F( x# f7 W) C1 e) f! vpython+matplotlib绘制南丁格尔玫瑰图6 [* f5 _0 {% Y$ f
实验:绘制南丁格尔玫瑰图
! X$ t4 e$ j# S7 ` 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
9 u6 [# T/ ], M- z4 t, v9 N: O 无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
5 w+ T& ^( V Y$ z0 c# e4 o) R& d5 i V; N+ s# H
文章目录# g! f6 `- h* n& k0 j7 ~' A! Z
& ?6 `; Y% w5 T" _' }6 B s$ B, y) J( {一、实验目的
. W" _, P2 u& @/ z6 k9 ?1 L* n二、实验内容
( n- r* h/ p+ t i k0 w三、实验环境
6 ~7 X" z* D3 l0 K- Q四、实验步骤
& |* e' @1 L d4 `3 j) j' ?五、实验代码及测试% f: L0 M+ Y6 }" M. |
1.源代码, ?$ c5 k8 t- ~9 _7 y2 G
2.运行结果1 j$ Y1 V" V! v$ Z+ r, }( c/ O
3.excel数据表* L$ Y: a, c% z
一、实验目的
4 V# \- x. K- d4 b; U' ?5 U4 \( P( E" |# k9 K- A: c4 Q' s
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。- X- {) l, D( K9 Z4 a) }& C
0 i7 N! j3 u- u8 H( y1 O
二、实验内容- p! Y3 ?' W& s+ }7 ^6 ^1 ]
8 k" g7 I3 o! o* {
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
( Z$ k9 a& t" t6 j/ e2 C) U- o6 ` 自行选择一组数据,画出基础玫瑰图。
& r, y5 d4 P! C+ ?- Q) ?) g# @ i8 ^& S! ]: }5 Y+ `
三、实验环境
8 u' w4 O, c4 C0 @0 H' k: [
0 R% I1 a# ]' P% W5 @' U8 \ m3 b9 [ ython 3.8
, U. E3 V! B7 b9 k' d! B- k" J1 E. E; n
四、实验步骤) {2 ]) m( t3 c b% V/ ^, Z5 X' |. L
L5 p* e0 A1 }# z# q) ^
查阅文档,了解南丁格尔玫瑰图的原理。6 b) G d5 b3 X8 d: y& H/ o; f
选择一组数据,编写程序画出玫瑰图。( y! K! c+ {6 L, R" H
五、实验代码及测试8 H( K# _- i* e& X% S2 W
7 f7 @( q$ T8 g, |) O1.源代码
% T9 F. A6 ]; Z. A. a4 K- d$ `6 N: d; j) d
import matplotlib.pyplot as plt
4 {( ]1 K# W3 n8 v' v9 kimport numpy as np
" \1 r. r3 n& a, N0 a1 V, r+ V( d: }import xlrd2 n+ j& y) N8 r4 B/ I
* v U1 n- {& y8 x0 Y! R0 f'''
- [% m5 b$ C" e. q- `0 l, \ 按列读取excel文件并存入两个列表
" r/ G- S0 c0 q6 @5 n7 C t" {% j'''
- n* L2 W" Q4 Q8 y/ c% m- Cdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') ' H$ z* y& B3 `
table = data.sheets()[0] #通过索引顺序获取工作表
# c* I3 a) H6 Ycols_n = table.ncols
2 L8 H$ J, _' ]5 Z# `- ycountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名, ]% j( @4 V* ]9 Y: K( w$ T+ ]! f
data_list = table.col_values(1,start_rowx=1): r" N# s$ V: y0 U6 b% S. H& O4 j$ J* ]
# print(data_list)# r; K! P! ~6 F/ N2 S
# G3 ~4 L7 I* G'''
) c l8 P; H" Z 计算角度2 y# H, H2 f5 Z6 X& d# A. \
'''
& a; H* l4 O3 D u: I4 T7 M: M; f0 {& Xn = table.nrows-1 #去掉列名
; ]8 m8 a+ |" e* M8 @. `# X Ktheta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
6 U' D5 N9 |" N
/ k5 |4 k& Q. r# ]' \'''
7 o, w0 L8 U. B+ {& f# D0 b 作图3 g& C s% E& X- w4 N
'''
$ O1 z1 V1 \/ ]$ H# 设置画布
2 @4 ?7 K% Q8 i- I0 Dfig = plt.figure(figsize=(12,10)), m' t- ^1 v7 x; r8 [! ]
# 极坐标( @4 m# R5 h( k9 L
ax = plt.subplot(111,projection = 'polar')
" D; O5 Y' H. q5 n# x& A0 \& b0 [# 顺时针并设置N方向为0度; c }- b5 W8 R: D3 c
ax.set_theta_direction(-1)
7 [, L3 u/ w/ iax.set_theta_zero_location('N')
- o; b# j/ r& ]3 g& H/ ]& s0 e/ x9 w4 g) m
# 在极坐标中画柱形图
/ Z: D$ V! s e# P }ax.bar(theta,
4 M; J h. n+ w) J& W data_list,
, @. E$ j3 X" f9 U$ v) k/ ~- w width = 0.33,
' `5 d) g4 ~& t5 V3 G `2 X- `3 ^ color = np.random.random((len(data_list),3)),
1 A% M! u3 `( e3 I) Y # labels=str(country_list), 3 C/ i9 m, \3 w
align = 'edge')9 x0 ?# s8 p L. ]
'''
$ ~( r, r& J" M: N 显示一些简单的中文图例/ H- L: T; j5 \2 D# t7 M5 G9 ], a
'''
1 T4 X3 t+ Q: B5 x1 X9 eplt.rcParams['font.sans-serif']=['SimHei'] # 黑体
8 M8 q, P& ?4 @ j+ T1 q+ b" ~ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
* M- ?4 x( }# L! e* V+ ]: l( Ofor angle,data in zip(theta,data_list):
- j5 F1 P1 R, d7 ` ax.text(angle+0.03,data+100,str(data))
8 {$ d) _" W5 g0 e% B3 O+ x# g# a% `' c1 ~0 N8 [; p
_: C" K$ [* ~( o8 l- \% R
plt.axis('off')
5 v# a. w0 R+ m1 q) E& N# B y) B+ [) q. i0 ]% K
plt.savefig('Nightingale_rose.png')$ P2 T8 m3 C2 ~8 f1 |" Y$ d
plt.show(), n% l& ^/ M# H5 z& x1 e' C# ^
7 R# D) y e, V0 `1 p$ j% U. H
% J! l5 {; A: k
2.运行结果2 v W. Y( t/ q( f7 F
5 D) m) r3 r/ z' p
; a9 Q* Q6 q) s% `
( ]( o1 _& R8 j' f/ y9 F
3.excel数据表
4 X; c% A1 t) m+ X4 U. F
$ u0 B V. Z2 q8 [3 r5 \* i. }0 K _0 |% ^0 ]# b2 O Q
4.说明
0 ^. n( p2 e' x/ F% Y3 n; { 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠./ e+ N5 X& D1 u0 E; W
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
- s7 \8 u7 ]# M* W————————————————1 f3 ^9 h& B% G: I4 K, q
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。) I7 S* ]# k+ ?# v) w
原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638526 c! s8 U" t6 S& N( w; O) ]
7 c! {$ G; @: n- Z# H
2 Z9 z6 u1 m. s. }' }. H, Y |
zan
|