- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563377 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174236
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
% w: O q( c1 T, d7 N! p
python+matplotlib绘制南丁格尔玫瑰图
) u- V) Z, i5 p+ D实验:绘制南丁格尔玫瑰图0 Q- m: d8 f% Q* A
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
$ Q0 z( Y' C2 Y* W4 x3 B$ T' B, |* L 无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
8 _& `0 W c. P4 j/ a# `; K G2 F* S8 r+ d/ ~, y* E
文章目录
& Z w# C1 j, E5 M% b
" i/ @/ l$ ]! z( ~4 W' E$ S一、实验目的8 a6 J6 D$ V* B' ~6 ]
二、实验内容 \+ `! f) }& I
三、实验环境
# p* J3 o" a/ q四、实验步骤
2 k. m8 c( t% z五、实验代码及测试# S5 E/ F1 N" m/ a2 w
1.源代码
0 `+ p6 N2 u- f+ Y* l8 n7 P, a2.运行结果
5 E" W: X5 D# I8 n% c$ |$ @# T0 |3.excel数据表. z) x5 w7 I% K
一、实验目的) p L( O* k1 Z6 Q! }2 f$ y% r
3 o7 h* j6 {, Z+ V
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。+ _; [& U& L- |* h8 q1 T* m
9 W) f, K: Q8 E- e4 [% S
二、实验内容
$ Z) [2 m8 u U" b/ m |; Y& {. K/ c; w9 A% L- x, C% H' N& _
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。5 v B" z5 Q2 c' k% N/ ~
自行选择一组数据,画出基础玫瑰图。& j8 t! I! C, w. i
# n2 g3 q+ m" d, Q" m: e三、实验环境/ {9 p% A0 ^' _. Y$ b# O7 x0 t& Q
1 a- i' ]0 I7 ? ython 3.8
" y+ H" R+ m$ j# r- \. p; Z# W% B0 t5 r) i/ z/ v ^* d
四、实验步骤+ A7 d v- J" }2 o
0 U+ c0 L# Q" L! t6 A查阅文档,了解南丁格尔玫瑰图的原理。1 ]( c3 H F9 p2 w5 @ j5 \' @& R
选择一组数据,编写程序画出玫瑰图。
( m$ j! t$ g6 o$ F s) q五、实验代码及测试
: \) g, e* U- K4 q7 o# t- w; A) v6 S1 o3 {. P8 ]& ]0 I4 |. V
1.源代码
5 V1 ^; F b$ H0 N1 V
$ z" b# S8 s) y* A4 |+ C; E+ p8 aimport matplotlib.pyplot as plt
8 u6 M1 m2 t& A" Nimport numpy as np/ a7 l; ]" x( {; A9 j
import xlrd
4 C$ ]6 P+ ]( R5 F% e3 w4 d1 l) s. }1 _
'''$ T; v: c- l. c e6 k1 O! W+ ]
按列读取excel文件并存入两个列表+ E; H- W+ q2 W. f, p' k5 e
'''5 p& ?6 D, H# E# T, p' i% } ?
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
! a8 X- M8 r7 {7 R: G2 ~5 T6 ]table = data.sheets()[0] #通过索引顺序获取工作表% C7 g; n+ o: z2 @0 H+ [8 @
cols_n = table.ncols 2 ^' l$ B% z6 H9 i: m
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名- M& _ ~( p9 V
data_list = table.col_values(1,start_rowx=1)
/ B9 u; b$ X8 j* ~; x# print(data_list), _3 W3 c- T1 n4 H( A' d
1 L- P2 v l# y) K8 i
'''
$ o! Y J7 e: S 计算角度
; S; e6 L/ L' w) E- W'''. [7 I- f( Y- \
n = table.nrows-1 #去掉列名" `. B G2 P- ?
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
' J* {- v& R8 ?# b1 w/ v9 `
* c0 ?5 V6 D! H1 }" s9 d! ]+ n& b'''
, v+ u! E p& r- z( q 作图
; K1 |. c: b- g# V; ~3 V& J''', ?% {. ?7 Q) N& y
# 设置画布
2 i. [* ^- ^6 X2 D* ~; f% Z ?fig = plt.figure(figsize=(12,10))
4 H1 M8 K C0 I) N9 w! |# 极坐标
; K' j) Y! p0 g# J3 Max = plt.subplot(111,projection = 'polar')' B4 y2 B" F) T
# 顺时针并设置N方向为0度+ c7 _- R1 u- G. H
ax.set_theta_direction(-1)0 V" h9 f0 q8 c r7 X; o0 \" ^
ax.set_theta_zero_location('N')
+ Q7 y8 }: m; h- c. C! V, t O# D! E9 j' W7 E7 z4 y* I% i% r% v
# 在极坐标中画柱形图4 F+ n/ x, o, q1 V
ax.bar(theta,
0 ^7 [# d+ s& P1 r; ~ data_list,0 j1 N1 z' T6 l5 Q) \0 x2 W
width = 0.33, X$ |/ T# w; O: @9 a' s1 `8 V2 Y
color = np.random.random((len(data_list),3)),
; X1 Q' X- d+ T9 I) k # labels=str(country_list), 0 p0 w; ]/ N- S; W) j4 G
align = 'edge')
0 O; o; ]! P: e''' 4 e: K/ e- Q$ Q5 \
显示一些简单的中文图例& y2 z% H+ j. {
'''
& X' c$ I( o7 }) ^: O4 f/ f4 jplt.rcParams['font.sans-serif']=['SimHei'] # 黑体
0 u6 D/ S6 t# Cax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})% }* r' H# Q2 U- i( I
for angle,data in zip(theta,data_list):
8 B5 d ?6 Q, ^7 T4 \ ax.text(angle+0.03,data+100,str(data))
& }8 z, w. p* L
0 j3 o: |- V5 @/ i, Z) e7 M5 a, S9 y
plt.axis('off')
H( k; g i2 H
) M; {, w" A% h/ d6 C# v. C |' y% bplt.savefig('Nightingale_rose.png')* A ~4 Z1 `: X- _1 l3 ]: g
plt.show()
9 `. _8 _7 X$ W6 s% B% \/ R" c) t& q! [) g) f% _- v
. g4 c* `% m1 _% r1 j
2.运行结果
3 M' ~5 c# `4 u( m k
8 p' F" `4 F& M ^
% P6 @9 X: o" I b
0 K8 T1 j6 U6 v3 z8 o7 T y) F3.excel数据表( L4 F( v: [3 H1 @( h9 H9 q
% L: `* y5 H7 v2 i7 q
& m1 A7 h- O9 r+ o% K# P: S h4.说明 m" ~+ p: t$ @+ E6 T+ @" W$ i
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
' c4 b% E6 O5 y/ L1 K. Q 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
2 Z$ `+ [9 k& @2 x+ S————————————————
; e* m- Y5 T0 w版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ { n- J- G+ u
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852( x* A/ M+ ]0 K( ]2 ?, H
4 T+ C& E2 e3 i4 h# ~( A; ]" ]+ i/ S4 G
|
zan
|