- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 556009 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172176
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
( d& J. V' C9 G0 j) Q. \8 K" B2 U
python+matplotlib绘制南丁格尔玫瑰图& b# d7 u) g; ^# Y
实验:绘制南丁格尔玫瑰图: f+ Y1 _! G: Z% \9 E V
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~5 F+ |3 [) ~. y5 U$ v! b
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.# A1 @" k5 L4 A0 T) f
& |8 { {6 {1 b1 h5 n
文章目录
9 B, q+ P, d5 I6 U. E1 x; ~6 E( O
: e3 e) E+ `+ U* l一、实验目的/ ~8 N( f. L# c8 _. _6 j
二、实验内容+ d) Z( M9 b+ U! p9 u
三、实验环境
1 ~' C: n' \' E1 R9 Y) A6 a) S四、实验步骤
$ y+ |2 y! K# p# K五、实验代码及测试
3 ^8 Q2 p3 k# b8 D, n8 o( M1.源代码, z7 b. U A8 X' U8 M- U: h
2.运行结果
3 Y n! d8 ]) v$ I [3.excel数据表
, P5 a( o+ P: A3 t ]5 `一、实验目的
* v! G7 r% h9 t# F; |& q
( O) e$ h5 H7 u% @4 ^5 U; G 了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。; e2 x: S! [% [
1 @9 i: g; I- P* E1 R6 D3 {2 T0 p
二、实验内容, l$ P0 l9 P) ^. D
( z9 C7 l% m& v% q7 x& A" M
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
: x2 `( b, ^5 f9 S 自行选择一组数据,画出基础玫瑰图。4 d; G0 m7 D3 \
1 o* M; U2 {3 X; s三、实验环境+ L( b2 L# f1 X: o2 b- g% C8 s
. J5 Q9 K' o- e1 [8 m7 N ython 3.8
1 ~9 ~& P( D3 L( Q2 W2 A/ J4 q
5 I5 N7 I8 W) W% z8 U- W四、实验步骤' {3 {0 u6 s% v! N9 O) l3 p
9 C* a, b8 O) r查阅文档,了解南丁格尔玫瑰图的原理。
' f \3 c$ B, H- B! E选择一组数据,编写程序画出玫瑰图。
- y- o7 j# w% z( C* f: j五、实验代码及测试: |3 Q4 j6 p$ q. Z6 k# k' \9 N
q$ t& M. E+ J! y) A- D2 A8 o
1.源代码
9 i8 y0 P- g" R" v7 x1 I9 h% w J% `* ?
import matplotlib.pyplot as plt4 u! F' q% d; h- Q9 d7 a( Y0 R/ h
import numpy as np% P l' a1 o! ^
import xlrd4 R6 ~" Z8 M; G4 m
J* `: _$ g+ F2 C* H, Q, w. M! r
'''2 n' k; B" r1 G
按列读取excel文件并存入两个列表# A+ p6 U' v* p4 h
'''
5 T* L* q: B0 G8 {data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') N, k4 {9 i9 z) V3 z9 n% j
table = data.sheets()[0] #通过索引顺序获取工作表3 s$ }# H! n( q$ w+ Y
cols_n = table.ncols $ s" n* j# U% X: z. X/ M: A+ y
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
1 T: |- u R* z6 Edata_list = table.col_values(1,start_rowx=1)# O+ X+ o, {& D5 K( }6 z
# print(data_list)
# x' s/ t; t* x7 M; v
8 A/ T4 ~6 L4 Q% W$ @+ A1 J, j'''( Z* m- f( i- h9 s
计算角度: |- `$ r, O: q
'''3 j8 ~# z9 W1 h- h: l' z) H
n = table.nrows-1 #去掉列名" {! T1 q3 X j8 T2 Q
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
' v% f7 e+ s$ B2 f) e0 d' }1 U
2 t% j$ Q: ^) o& h& N4 m'''
4 [& Z- O6 F* M* X' G/ h- ] 作图, |7 Q1 B& v. {$ n. F8 M0 J* p
'''
% k3 u* t4 x8 u- C# 设置画布
% U& M4 N, j3 [/ v- o* h1 y: }% S! Zfig = plt.figure(figsize=(12,10))3 M; \) m0 p# a, M' L# r3 A
# 极坐标) [5 l) m4 c3 j+ B$ ^
ax = plt.subplot(111,projection = 'polar')9 w C$ l0 r( A! D+ Y
# 顺时针并设置N方向为0度5 j. K- M8 ]( N+ C
ax.set_theta_direction(-1)
- u! c k! F* C$ _+ kax.set_theta_zero_location('N') 4 E& Y$ m6 y8 t; Y- ^
2 s' `/ {: d/ ]* r3 T2 q5 W: N
# 在极坐标中画柱形图7 t$ h; W0 l; B4 }7 Q; W
ax.bar(theta,
% F, o6 t5 {) T. }2 a# b data_list,
. o3 \9 t2 T( d) Z6 ~ width = 0.33,$ p5 X' \ G1 L D
color = np.random.random((len(data_list),3)),5 j0 f# I. Y7 \8 ?
# labels=str(country_list), 5 d% o& B: P6 H4 O9 ^0 p
align = 'edge')6 D( ]0 b$ B! Q2 k% L
''' ) Q7 ~; N2 u" w; U9 d
显示一些简单的中文图例
6 X" h1 M1 l1 a# a'''1 Y* P- S1 l, R
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
& K3 l! Q; R6 I. g) Tax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})1 s( r) w; Q6 T- ^+ a2 m* S
for angle,data in zip(theta,data_list):
1 }. u0 u" ~7 o2 H; z9 [ ax.text(angle+0.03,data+100,str(data))
2 @4 C& f5 }* [$ g4 _/ R; H/ c4 ^# j1 N5 \( j
$ B0 x0 d* I2 L/ _+ Oplt.axis('off')3 _5 q8 n# L- A$ S3 ?0 ]' g
@% Y. _' Q7 Nplt.savefig('Nightingale_rose.png')
, R* V7 z! Y5 {4 _$ Y. u& Nplt.show()
8 u8 d; L( Z; q$ c; q* S
: ^2 Y+ g4 r; c, w; t5 ^
8 O6 p% U9 u6 K' d" d6 T, y0 l; t2.运行结果
% s3 V7 t& i& ]+ z2 ~" J: ]
1 g2 d# C& [5 P8 k k4 A9 K
! A" T; j& e' i8 U
# v( S' ~% }) e) p6 X# f) c. r3.excel数据表. k# T# X% `0 x1 U; ?
* _/ E4 B# d" Q. R' ^& U
/ B5 x" o! Y9 Q% h4.说明- n% N' P( J1 w9 l1 u6 ~* x
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.! P5 p/ L; S/ f
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.# u3 b7 X. k/ U# T, Y. ~3 Y
————————————————: ^& n3 d) U0 K! V8 r5 J
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。/ f$ H6 G" d1 v4 _* J. q* {
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852: ^; c( [0 c& b& R+ ?; Q+ n
. f. r7 J& ^$ O2 n( Y* ~, r# |, o1 _) q
|
zan
|