- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564631 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174612
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
% E) S# g1 }2 I, j) f1 Ypython+matplotlib绘制南丁格尔玫瑰图% r# S- x8 |8 g2 s
实验:绘制南丁格尔玫瑰图
' B. i2 b0 l8 W; g( c5 ` x. a' y: t 本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ ]1 E1 P. [9 ]7 W7 I! U
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
, p; U" @& D1 b1 \( D9 @ c
& q+ q& f6 I+ q! t文章目录% N* f6 Y( G P* |1 [
% j9 h {6 o4 ?6 g8 {: U一、实验目的
. ]" @1 T5 C0 v8 C; h9 Z二、实验内容( ?2 t5 o3 `* S# t1 A8 h+ F: D
三、实验环境
- R, `* {. @+ K; T* n/ c四、实验步骤
8 V4 f4 _( H$ r$ l, r U' s五、实验代码及测试
7 w; p3 e2 z3 q0 p1 v1.源代码
2 g% t. f1 a/ ?2 V `7 Q2.运行结果
( P- `# f5 v( A) c# w3.excel数据表
@5 {$ }/ ?' n一、实验目的. R$ d& v, ]( i( j; x* p8 M
' k4 D+ y$ f( P) m
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
, C3 `; J1 s' i3 `9 T5 h
1 N' Z5 H- J$ j+ S$ g二、实验内容5 Y6 F) o! E! N7 w, q
. j% ]- K! t- u8 k6 }' K3 c
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。1 A" L( t, V1 ?, C
自行选择一组数据,画出基础玫瑰图。
. ]$ O! T5 A' f" D
/ e7 r& x6 }3 w三、实验环境- K4 t. |! F7 _7 x
% i0 B; s8 H2 B8 F: n
ython 3.8
2 o# G% \: f% `8 _
- \7 P: X" B2 N! S/ X四、实验步骤 `" u4 T r0 b
) o# q8 v; x/ \: C9 b3 H* a8 c6 `
查阅文档,了解南丁格尔玫瑰图的原理。: Y& m1 N6 F# E1 l3 Z7 H* k+ n! i
选择一组数据,编写程序画出玫瑰图。7 A4 N+ ^2 ^5 Z/ T$ H. \0 b- e
五、实验代码及测试
x6 i9 x0 N- w8 q5 o$ F% t9 q
( c, M' }5 A' K+ [; X1.源代码; D' e) V4 z4 {9 u
- x' x9 Z, ]% A8 d
import matplotlib.pyplot as plt; P9 s3 g2 O3 N. I* F
import numpy as np3 w0 Q# \: W3 N! F, Q
import xlrd5 u8 v: T p, H' c% }5 e J, A8 ]
2 D5 A8 g* l& E: C'''" ?& }6 i2 n0 J* N
按列读取excel文件并存入两个列表
5 X& p% t# u/ e' O- x# X'''' {2 }" y9 `7 a
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 9 g+ g& |& ?8 f2 g
table = data.sheets()[0] #通过索引顺序获取工作表
" g8 V: G. u( M+ e _) ~cols_n = table.ncols * D; n0 H1 N" }$ G$ ^* g9 f9 E
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名2 R( B* G% J, A- ]2 P3 d
data_list = table.col_values(1,start_rowx=1)
# B, V6 T" T4 ^8 \% D- V; a# print(data_list)3 ?( }2 k3 s$ w8 K$ o+ }8 {
1 s' g$ O7 D1 d; I: F'''5 P. K! T: P: b$ P0 o
计算角度. S5 O! J* n: [
'''; ~/ e, g9 ^, l! W
n = table.nrows-1 #去掉列名
8 b' Z9 \. k( l' {theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份+ K5 ?' n- G5 w) ]$ x7 m, Y) y2 ^
9 f( N! U, a. _7 N6 A
'''+ u# y# r2 E3 T' I
作图
# y y& c$ `$ u2 X'''
- M4 ]9 |9 E# p. A( O) a+ |# 设置画布. o; j* a! i- G3 A4 ~$ L/ P
fig = plt.figure(figsize=(12,10))
5 R, P# N H% I+ |' v+ p# 极坐标
: F0 v& J. I6 g, H+ `1 ]1 N) m6 {) ]ax = plt.subplot(111,projection = 'polar')
( J6 @' ~; E. L- D6 E# y# 顺时针并设置N方向为0度; R% `1 c# Q/ @2 x3 a% W5 t
ax.set_theta_direction(-1)
5 o% K$ r7 q. N4 |+ L6 Bax.set_theta_zero_location('N') e8 f6 J8 k/ X( k0 \6 X1 [$ V9 m
" Y) u. w" b z# X" s7 y
# 在极坐标中画柱形图
" S0 y! b8 j& V9 c4 g- Gax.bar(theta,/ D5 T' }" I9 d8 u
data_list,( X. r, {4 i- @6 H, }
width = 0.33,, h# r: B+ v+ H U
color = np.random.random((len(data_list),3)), Y) y( B0 t% Z8 B& M: D
# labels=str(country_list), , k- k, R' O; W ?! U
align = 'edge')# ]) J. i6 _# k( s7 ^% P7 c1 P- W
''' ( M. W1 V* d5 Y& d# O4 c2 e0 U
显示一些简单的中文图例
. W3 z8 s$ m$ l5 t3 O'''# U+ j' o% E2 S6 Q
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
; b2 m- \. P- l$ Oax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
3 B) ^+ F$ k# Hfor angle,data in zip(theta,data_list):6 U5 p7 ?% L0 w: ?* l9 _
ax.text(angle+0.03,data+100,str(data)) 2 ]. ?( b0 a& T( I( a) K! w, }
8 s& L: L: n3 k. l
. ~+ W. U* G5 } g, Uplt.axis('off'): G3 o* s0 S. R: h4 F5 @
1 ]: _: p) O/ Q' j6 V0 ` V2 \% T
plt.savefig('Nightingale_rose.png'); d7 O1 @ K2 Q1 n9 O" u2 w) @
plt.show()8 |& f+ c3 J4 s) C! n
3 c6 ~( j7 U' O2 ?
7 m( c+ `6 ?7 a1 n2.运行结果+ C2 [& R/ d1 x3 x) I C& C
" r! m+ v* T- p4 v8 _2 {8 T8 _# `* s& R5 p, a1 w: }
6 E! @( w# {+ p' J& R- y
3.excel数据表4 g; o4 {( S+ Y& E
" i; p+ w! T9 r, Z$ j, G# _6 S0 e- e' @+ f/ C. l4 v
4.说明
+ \# K: p- |9 l S* G& k 四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
b% r( P5 t; [+ S6 A- d 实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.. q$ T# Q% Q* f, P3 {2 _, @3 |3 Y; q
————————————————
9 |2 Z: i. k3 U( c$ V; `3 ?- _版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( ]' P! _+ I- F$ H- T% `原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638528 M5 R$ U- W! Q2 c4 m% t, X
, e7 I; t& t, M1 l
! Z7 ~1 g0 T. S) ~+ A; r |
zan
|