在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 565365 点 威望 12 点 阅读权限 255 积分 174832 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 3 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
. y# @4 V1 r5 H python+matplotlib绘制南丁格尔玫瑰图
! f& [6 S# s4 R" h( a1 E( V& X4 Z 实验:绘制南丁格尔玫瑰图% e$ u5 g' E, P7 c
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~/ m6 l: t# {! {* ^. B
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.% D0 @: o& F% H, I5 i: m
0 [+ M# J$ `2 X1 ~- H
文章目录8 i1 m8 ?' u' g" L6 D; q' i
; c: M, b7 \9 K( b2 O% w
一、实验目的3 r; R& K( M8 t# p/ @
二、实验内容
$ Y, H( `% u! N: F- L/ e. v0 C) K3 O 三、实验环境: G- o" P+ ~* \: d" t: m
四、实验步骤
; [3 `- i. L- M9 e 五、实验代码及测试
5 v- u% _/ q! V 1.源代码
3 s0 x; p0 f5 ]: e0 t9 d( n 2.运行结果2 @) R% j/ ~8 N
3.excel数据表* C: v! v! I& \$ {3 ?* |
一、实验目的5 R+ s6 u) x' Z8 W, H
2 z8 x- m& c6 c- I9 E8 y" ?! s
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。$ A0 H: l- ?( U9 g
6 H! ]; }+ p' E& O
二、实验内容* R& h( u* i# S: l
, g# Q6 o7 |8 C% u1 O
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。2 w L: ~* z6 V4 n5 H: z
自行选择一组数据,画出基础玫瑰图。
# {1 @; n q! [% z) w 8 x+ p. p; U0 c, z+ ^0 u6 E8 V/ [
三、实验环境" E4 B* Q U. |
$ ]1 R8 e6 d6 {4 o, F
ython 3.8
4 g# G: z# \/ i8 y* `
- J$ s" C/ g" O$ F" X4 b 四、实验步骤* n/ T8 O; w! d( d) q, x W
; R7 c* a% I2 T" U& q& {9 j" U
查阅文档,了解南丁格尔玫瑰图的原理。
/ g! N4 k0 e* r# A% s 选择一组数据,编写程序画出玫瑰图。
+ n$ R2 h$ V: a. |+ \ 五、实验代码及测试4 i1 Z5 M3 w" F% ~. x
1 p0 v4 U! v, _& Y 1.源代码& _8 F( F' u% E
) a# x' J- Y, A3 h, W5 t; [ import matplotlib.pyplot as plt
0 O5 g; S7 s# y$ L0 L6 G& u import numpy as np
1 J. t$ ]. F% H import xlrd9 u# G1 Y+ ^7 M t, ]
6 c6 G4 C7 ^' S* S4 T. A+ W4 o2 v
'''
3 e! X) {: }0 i$ }2 t# K 按列读取excel文件并存入两个列表
+ U, E* a5 M: e7 _* t '''3 B8 {4 h {1 v- F4 w
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 0 o4 K# [" k, Y* `* s/ _6 ?
table = data.sheets()[0] #通过索引顺序获取工作表4 P: _$ A* T: C- I
cols_n = table.ncols
) q& w1 Y. q- F2 A) p# [. u: A0 q country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名- e) L6 Y7 [' r1 G; _; @
data_list = table.col_values(1,start_rowx=1)' i, k! y" o+ U. O2 M
# print(data_list)
7 B0 w7 }& q& c" @2 a 1 @/ Y. f6 `7 Y" g3 b8 U; G( I5 k: I! P
'''
U" `6 F7 k# O8 y% a 计算角度, Z; _6 ~+ B1 G( f' ` F/ T# s
'''
% g$ m5 e& `- N! v% N n = table.nrows-1 #去掉列名# T3 P/ w6 K1 E1 V! d {' N$ V, m" \
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份9 m: F. F7 \$ }
1 D8 k3 w+ y2 w6 ]7 I
'''/ x: @% R' o6 G0 R
作图* s' T5 w4 X0 i( ]9 Y5 m: F
'''
" z7 u8 P3 d/ P, D2 r: X # 设置画布
, O7 f9 K: L( ]" E fig = plt.figure(figsize=(12,10))# \! s1 f6 A- O
# 极坐标
7 j0 d2 d. l+ i ax = plt.subplot(111,projection = 'polar')
) [, g& D9 G$ K: [8 a: S) j" [ # 顺时针并设置N方向为0度3 P, S o4 n0 S4 O9 }1 V7 K+ ]
ax.set_theta_direction(-1)
' y/ }" F/ ^0 S0 X ax.set_theta_zero_location('N')
; p' w$ \6 ]* `( L* {' f$ i( ]
2 i( R" Y' n% {/ k2 S& n- g; X2 `* i # 在极坐标中画柱形图: ]! X1 o6 {, |6 G0 d6 f: w
ax.bar(theta,/ t, n) d% r- ?9 b7 R. `( a; [
data_list,
" ]; ]6 z8 A; D- A width = 0.33,
% |# A$ R! j0 d$ d' ?: c color = np.random.random((len(data_list),3))," R' V: z* g/ S& U9 ~
# labels=str(country_list),
5 p0 y% F! Q9 x6 W/ v9 a* w align = 'edge')
( |- X5 T p. L) f- }/ a" p# M6 \ '''
9 B4 X* X! ?4 A: V. t' ^$ {+ K 显示一些简单的中文图例* K$ \9 {; W2 a( O9 Z7 _
'''' b- `9 A8 {5 k5 b3 ~4 `7 O0 j
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
M- o! M$ W6 E5 J ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
1 {8 |6 }/ h7 N for angle,data in zip(theta,data_list):
) Y2 b* U1 i" r+ @7 e- ?" F ax.text(angle+0.03,data+100,str(data)) 3 h& j) k4 l* h6 J
; P+ c; i# y# m3 X- [3 {6 T
. p/ m5 m6 m( I: q: c9 U7 _- _ plt.axis('off'), W/ n Q( P. e6 e( u$ p
& @5 ]" q0 ?9 |1 f plt.savefig('Nightingale_rose.png')( u% a) T3 o3 i R# c# p
plt.show()
M, L2 W+ v& a7 x7 B 0 l# k' P! ]* |; ]7 x T( ?4 w
5 [! [0 x: H& N, o$ A 2.运行结果
5 S+ P. l/ Y' u- a8 g8 C: n* h1 n
) g+ @. a+ e) X: P7 S
, G% \/ B# ~! r1 p$ z, j+ _
- f4 {4 L3 z$ k: b3 C 3.excel数据表; o, X, ^. H+ W1 A' R3 f8 G
8 b& h6 m3 J7 e
' W: J$ }, f4 Y* ~( o
4.说明
$ S0 Z1 Q+ t! h* w6 c9 A5 H i' y 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.5 `, Y8 @" d0 Q2 G F5 n
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.* m, z. |4 y9 D( l
————————————————9 ^: Z7 P' k+ x2 G. N4 f
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。9 y& C1 q1 m. Z/ M k- J
原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638524 ? E1 J- i2 l8 V* N
5 ^4 S" [ t: H
d, n1 w6 d) Y4 E/ B0 k
zan