- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565542 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174885
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
) P+ p% B$ j4 l" q0 Cpython+matplotlib绘制南丁格尔玫瑰图
1 e% x3 ]; L# Q; K- }- s/ W实验:绘制南丁格尔玫瑰图8 U9 b9 T! d j
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
: j, C$ e( F$ [1 M- Z3 b 无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
9 s* E% u4 a! D2 j
# e3 w, n7 u1 x _文章目录! ]" _! E0 z/ z) i
# }5 y+ J% A1 t. H* ]/ _) @( Y
一、实验目的
1 q! Q: M, `, u; B7 J二、实验内容! j& A8 k6 m s. b
三、实验环境
3 W+ Y5 b4 u0 u( I四、实验步骤
! B4 Y' X( k8 d w# r$ O( g五、实验代码及测试. P* q9 B* o# d: Z6 P
1.源代码
+ H3 I1 _6 R" h3 r2.运行结果! O# J8 G; X6 q! t0 M. o, {
3.excel数据表
% h, E2 D0 D. ]$ m! D0 h" t$ m: d, u一、实验目的9 d) w+ I1 d2 U9 P2 S: `% D
' j2 n2 h) v, S$ A0 v) i, q
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。3 s$ x4 i1 I$ v8 h
2 J' k6 g' W1 f8 i) Q
二、实验内容4 v* R7 F% V) }( z: V
7 h9 u; Q; \2 T. L 南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
8 R0 }3 _2 L( P3 h# r 自行选择一组数据,画出基础玫瑰图。
0 \/ i7 u- l( a, ]0 ?/ h0 @& Z4 {& [
三、实验环境
+ ]: B/ ]0 A5 b W. V0 g* |: k5 v0 v# k' A$ J, j" N" C
ython 3.84 u( U) [5 l$ ^2 I# H7 E
. r( ~7 f6 i* m+ i3 y- d$ `
四、实验步骤; u4 W* P) n8 d- a; _
5 _+ ~! b/ R ^$ V* c查阅文档,了解南丁格尔玫瑰图的原理。
/ n8 @' ?$ [* g/ t9 U0 g选择一组数据,编写程序画出玫瑰图。* g9 H( B& i' ?% X* {4 b# D
五、实验代码及测试
. }# a, a1 G3 s/ R6 x3 D/ K
/ i6 G# H& p: Q# t1.源代码
8 v8 T t0 m, n" k* ?9 i! ]1 E2 i
* m9 h7 |- E7 I, B- Bimport matplotlib.pyplot as plt7 L" N; t, V/ p y9 Z3 l
import numpy as np
- J- P) F1 M5 O+ @3 Qimport xlrd4 ?+ s6 d. z! `
5 c4 Z' w) V7 H9 W( g) E; J'''- x* g/ A, C3 A- G2 }
按列读取excel文件并存入两个列表9 E- P0 l# F" u2 {0 D4 n
''': o4 F/ f! h! Q. J
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
2 [5 f+ d0 Z+ k3 F! otable = data.sheets()[0] #通过索引顺序获取工作表+ |) U6 g: R! c2 s
cols_n = table.ncols
% f0 A9 r, K+ p+ }1 u# M2 r ecountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名: C8 x0 P2 w0 ^4 p9 q# o) U
data_list = table.col_values(1,start_rowx=1)
3 l0 X. G: k4 Z$ _# print(data_list)
9 D1 z' Q/ K g. P/ I6 ?; [
3 |& j" [) l% e4 i! _( W# |''') C, y9 g: z9 P$ x. C# x7 { ^
计算角度
7 q$ K0 _) s( a8 L- M'''$ h! I* T4 a7 T, o9 U# S! I
n = table.nrows-1 #去掉列名% \+ x( ?/ p d/ u* Y6 W) C* ?
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份" o$ D8 p! {: E$ Q# @$ [
* |3 U* M5 `9 e
'''
/ v; b* A2 n$ Z' i: _; q 作图& E2 e# M3 ^1 f
'''5 B9 m( S! ~% U
# 设置画布
1 F. p2 p& {% R. g' t ofig = plt.figure(figsize=(12,10))# s& y, n6 k4 ^) f
# 极坐标
% g! k- f; x! h. \0 Lax = plt.subplot(111,projection = 'polar'). [4 `6 B4 y. W7 m7 H5 e$ R0 g
# 顺时针并设置N方向为0度7 q( P- ^! ?4 O+ Z+ f' W, m* A5 m
ax.set_theta_direction(-1)
! I. K+ n4 G4 u8 Y! i6 pax.set_theta_zero_location('N') " W: V6 w( Y5 A$ ~) E! T
2 V' ?4 _/ m" ?' a6 |% k2 X3 u
# 在极坐标中画柱形图
4 S5 w7 j9 d: {; t$ Rax.bar(theta,2 {. T* H+ \0 k* B/ q5 n
data_list,
- ], ~2 k' F4 g7 F& W width = 0.33,' G: `4 J; b- M8 F
color = np.random.random((len(data_list),3)),
: x, t* F9 V. p, _5 K6 D; G # labels=str(country_list), ; X1 A2 I& R( K c! Z
align = 'edge')
' k9 p) k( g _6 {7 R+ F''' . g2 G% _( L2 c% e
显示一些简单的中文图例
" V4 b1 z d4 s: J'''1 _ z( i" c4 @
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
4 X+ ]8 F7 [8 L" ]ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})# m9 _1 l0 T* Z7 E# p! V
for angle,data in zip(theta,data_list):* D" h6 v% x8 a; B. a7 u
ax.text(angle+0.03,data+100,str(data)) * I. |5 E8 N7 x. F4 w ~1 Z5 H& Q; R
. B8 D- y3 u3 C
: ~8 \" A. @' X( Jplt.axis('off')
" Z3 U1 k: _ g$ ]% _+ \) G
: s( w, z4 \6 W& Xplt.savefig('Nightingale_rose.png')$ G$ M6 h# T$ e2 y3 j: p1 {2 a
plt.show()
4 h% j, Q( s. [) S, l% L1 b8 O2 n
' ?% B0 T* @; m% T- k: F3 A$ s* H, C
2.运行结果- T) v, B. ?# ^6 x0 o; K" S
% t5 a: d4 [$ c* ]/ c y0 x" o8 g, N' X6 B& r
# v. x2 T' F8 ], w {& q3.excel数据表
: B, a- ^! ]: Z. U$ ]. |7 R
5 q- L8 q. Q4 W3 V' K7 w
) `8 ^, O! Z1 [6 ~: E" r8 s4.说明
) l3 i2 s$ G1 P) l+ g: e4 H; k 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
& Y9 P" D" N) F- { D 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.: l3 |3 C! m) R, J3 L3 ~% P
————————————————
# G$ `# B/ K7 a) i6 ~4 y( G版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。- h8 T8 {/ ?. E" N' g
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
" Z6 c: g4 N* B& g1 _2 x: } t* \* E- c; l6 q' ^
2 i# x, M) c: @) s% W4 y
|
zan
|