数学建模社区-数学中国
标题:
python+matplotlib绘制南丁格尔玫瑰图
[打印本页]
作者:
杨利霞
时间:
2020-5-30 15:09
标题:
python+matplotlib绘制南丁格尔玫瑰图
* u( _; ], O' o% T
python+matplotlib绘制南丁格尔玫瑰图
2 j/ f$ J: C0 e. y! I
实验:绘制南丁格尔玫瑰图
) i* k& V: j9 _7 O+ ?
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
' J/ m& x+ [( d
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
) [9 d! r: V+ X, D* X0 v
+ y5 j" U+ c3 U- h- T- c
文章目录
* `; S1 t' w) Z1 }7 }
* j2 Q: ^# _( P q2 [( L1 V8 w
一、实验目的
: U/ K3 A1 H+ `6 s) O/ U$ [
二、实验内容
! K7 Q0 r! N6 l3 Q9 C
三、实验环境
2 z; U% W7 x: }7 ~6 r* Y
四、实验步骤
j# N" @- D. L' G7 Q1 F+ }0 M
五、实验代码及测试
0 ^* a. ~1 d' A+ [1 s
1.源代码
2 [- w3 U1 X) P8 y; A# M0 J
2.运行结果
& h2 H( G, W1 U: d+ ~8 ~: Q9 o
3.excel数据表
! B5 t i8 l; {8 u8 c* Q
一、实验目的
! N9 O! Z2 M/ y
& e% J8 i& k5 z
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
- y, T7 C; x" W0 ^* p' M
. {; L( \9 A9 j$ y5 u/ _! ]( f& q" w
二、实验内容
, w% W/ n f) ?$ B8 _. o5 _: O
' D$ c3 U1 o6 a# U' L# v4 {6 N
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
# W& f, d# p4 T; L* ?8 ^
自行选择一组数据,画出基础玫瑰图。
0 P x6 G3 A0 t! q M
4 H" p& N8 Y( `' \9 L
三、实验环境
; h3 t) m N2 L5 m' k% W
5 r2 n6 r) F' d/ M/ y7 b# \7 |
ython 3.8
! |$ r$ j# F% s8 k' X) s# i9 i6 s
( q. m# N6 W4 Q* q
四、实验步骤
- Z z- r4 k, j7 Y- Z' {- N2 e
: Z1 ]! f- K, b0 d" j
查阅文档,了解南丁格尔玫瑰图的原理。
3 u2 L+ V- T1 X, Y1 Z6 j: H& E8 g
选择一组数据,编写程序画出玫瑰图。
Q$ ^% b3 R$ I$ l0 |
五、实验代码及测试
' J$ ]4 s: L2 G- N; {% f/ O- T
o f. o' l/ v$ T+ l
1.源代码
8 @+ E& _; }7 [0 k! U( V/ p3 e* U
6 T' B9 [6 v: I; _0 T! [
import matplotlib.pyplot as plt
/ s( U/ ?0 ~8 z3 H8 b
import numpy as np
, [+ L% f: A1 \! e% p9 N
import xlrd
! m9 \( P/ l1 z4 r( q2 o7 X5 p! |
! T7 a( T/ ~3 `- ]
'''
2 ^1 P$ A3 h8 l+ `; q2 z* M& ` D4 o
按列读取excel文件并存入两个列表
5 X# n1 |; k, N( h
'''
f5 O; R. M) I$ h) j
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
. I k0 W4 ?' N* U$ z2 e
table = data.sheets()[0] #通过索引顺序获取工作表
; E- k* _4 W4 n
cols_n = table.ncols
9 \6 z; K# _) z- \6 M" X; v
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
) f. J } U8 Q1 a0 G5 B! y
data_list = table.col_values(1,start_rowx=1)
# r+ c6 D! J0 M' L! n
# print(data_list)
$ D* V7 f+ W9 p$ b5 ?
" a6 l0 p4 y6 T; U7 a
'''
& O. Z& R+ s) x3 B
计算角度
* Y1 }& M$ E7 Z
'''
, K7 e! J& P- q/ L* _& g
n = table.nrows-1 #去掉列名
4 V8 G# Y) F8 e8 Z. U
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
- y" |; K0 J, e% Y/ V
5 d, G- s; w+ K
'''
3 J. i) @* ]& S) Q
作图
C! O( i/ A. {7 T% e! [
'''
7 t) n- k1 p% Y; o( ^ F
# 设置画布
+ }; r; G; f2 l9 P
fig = plt.figure(figsize=(12,10))
7 g( ~ J1 q5 p& Y: T5 ~. G# ` A
# 极坐标
4 E) M8 z+ l8 w. J6 U a* N
ax = plt.subplot(111,projection = 'polar')
8 S& ]' H1 v7 W0 Q$ P5 {
# 顺时针并设置N方向为0度
h& u, h# g) ~* K1 ~
ax.set_theta_direction(-1)
2 s$ a' k) Y4 i. n# Y- V6 ]3 }
ax.set_theta_zero_location('N')
. Q! B4 g9 z6 s# W
" V. d F% l* x8 ~$ n
# 在极坐标中画柱形图
7 O- B9 |) Q( M
ax.bar(theta,
9 c' d7 x W) z- @
data_list,
: b( f! R! \ h
width = 0.33,
; ]+ ?8 {; C U) B
color = np.random.random((len(data_list),3)),
[2 b* n- w/ h! v7 W
# labels=str(country_list),
. N: c. F& F& E$ b1 q
align = 'edge')
; q, g x5 ]! ~3 \1 I9 d
'''
: |7 P, d$ N/ v* J% D# [1 s
显示一些简单的中文图例
" F. w8 p* `7 u" ]. h! c
'''
2 w8 h, O9 p3 N4 f# c% B
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
3 a' \" P( I7 n2 f* O
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
2 T$ D: o3 ~- V# K$ D- e& w
for angle,data in zip(theta,data_list):
: ~+ W5 C0 D$ d3 H0 z7 v; v
ax.text(angle+0.03,data+100,str(data))
$ h( `5 E! K- N% i+ b. q
9 N* F0 D0 Q, D0 C$ T
9 }" B5 B2 ]* k. g; n3 j
plt.axis('off')
. y4 Z: r* K+ ^" R% v
+ I7 o6 I0 U$ @# \" y7 D
plt.savefig('Nightingale_rose.png')
3 O5 r% C8 ^. I) R! F
plt.show()
; k8 f. X( d+ v& K
2 T; {9 R ^0 k% C$ f+ E. Z6 i1 K
6 q0 c8 c! z1 W% M
2.运行结果
# I9 L2 q9 c( ~6 u
2020-5-30 15:08 上传
下载附件
(191.55 KB)
5 k3 }% a; C2 x7 {5 y! P
" v9 Z" E7 g5 l; a! X
& l. f! l ^9 I- m6 f* H
3.excel数据表
8 d$ \6 l# V2 O2 s
2020-5-30 15:08 上传
下载附件
(23.8 KB)
y* B. P2 Q D# P: ^7 R
1 K% t5 v" X9 ?
4.说明
7 x! v2 M& {" k% z% M5 T$ e
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
# u2 y1 _. J4 ^ j- h! L# S
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
`# i# o+ J' Q8 Y
————————————————
6 t* v7 s" U4 H
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
! w! _. x& F7 ~
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
J. @' f& H0 m/ z7 y
% J8 s4 t* p( r: k
9 v- @7 E; \8 }, I) a' |: D$ T
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5