数学建模社区-数学中国
标题:
python+matplotlib绘制南丁格尔玫瑰图
[打印本页]
作者:
杨利霞
时间:
2020-5-30 15:09
标题:
python+matplotlib绘制南丁格尔玫瑰图
- s% X2 t7 n8 s# O1 G `+ i% ?
python+matplotlib绘制南丁格尔玫瑰图
7 Z, K2 y6 Q& L0 j; D: \
实验:绘制南丁格尔玫瑰图
& j! ^; `( c5 u9 a1 j
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
6 v) D3 T9 K1 ]) t
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
; n- R- y3 }- O) ^/ C( D
: t& \, X! z7 \9 R! W
文章目录
( ^2 y- N" `8 l V3 E
' d, t1 B% z! s! s1 @9 ]
一、实验目的
! X+ }$ j! m- y; C
二、实验内容
2 Y8 i1 H0 A& }7 ]8 Y1 B
三、实验环境
' j f5 Y9 U* [) I
四、实验步骤
0 x7 D# l6 F3 R3 C/ b( l7 p
五、实验代码及测试
; e3 b! M8 z/ c$ }# z; [9 B! t( X! W* m5 k
1.源代码
7 k, Q: {6 c% O8 X) c7 n, c
2.运行结果
( z: J2 S0 H) d3 h
3.excel数据表
6 h+ \* P3 a( X* `! H- t
一、实验目的
' W/ A2 O/ V/ r" f, ]+ k
( `8 c7 `& ^! T7 `$ v% `
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
* V" z) ?- C# }2 w& W
3 ]7 p% h: Y! I* i
二、实验内容
1 J; I: Q" L/ [1 B* C p1 |
8 w; B! G8 a4 y
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
0 t' K+ F8 z4 [8 B, [$ e
自行选择一组数据,画出基础玫瑰图。
/ |) H0 q6 [- y
+ p% @: N. l2 a$ q9 m
三、实验环境
6 F+ z ^4 Z. }
; O# {$ r: g7 z
ython 3.8
# ~6 S1 C5 M5 h; i
6 J$ O0 R- T: a! |
四、实验步骤
) S4 @5 `5 A# B1 R7 f
4 x3 Y7 ]& o8 b2 B% \4 j
查阅文档,了解南丁格尔玫瑰图的原理。
+ A0 i$ L/ w+ a" R6 H% l
选择一组数据,编写程序画出玫瑰图。
9 H$ d+ K# C9 b8 o6 {- w9 A u
五、实验代码及测试
% p5 O* O( k# f4 k6 _# R! }8 O
! r, k: D- {- U# @9 Q
1.源代码
# P d1 m3 @$ ]
: \6 [) G' L, L- X
import matplotlib.pyplot as plt
( G7 i+ _% F3 ^" M
import numpy as np
, @0 V P! o( @) \, R
import xlrd
- o9 ]0 a5 M2 R
6 i2 k1 W0 t5 E9 m; M, J c
'''
9 s3 c0 v+ |$ H
按列读取excel文件并存入两个列表
5 C% h9 M B y, V1 ~) [4 O
'''
! J- A7 l6 @" g0 O& Z/ K
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
$ w6 }3 d. }5 ]
table = data.sheets()[0] #通过索引顺序获取工作表
; \6 t- w* }7 N$ E
cols_n = table.ncols
( [1 c1 s$ b) J2 d3 h
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
2 N& A* t& { k* d; }) x( T
data_list = table.col_values(1,start_rowx=1)
+ G @$ [- v N! x
# print(data_list)
7 z0 }# J- k6 {
5 ]+ F! D3 X/ G! {/ j. v; o
'''
. Q5 _1 }" x% A6 d: U/ p1 p/ I- {
计算角度
' F# D9 r; T* l1 F( ?
'''
6 |* C& t3 r/ W8 m8 t1 }& F
n = table.nrows-1 #去掉列名
: U' r) v$ J, }/ A
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
4 f% I- i4 G% ?4 E6 i0 X
# \" ~: {/ r0 L, a# H
'''
& v' b) I$ Q/ l: M$ b( j
作图
! ]. C: I* q6 i3 k
'''
% O R! p( ?- R# R' D& S
# 设置画布
, r$ q( H+ f$ m. s8 |% _- b" i' M! }+ C
fig = plt.figure(figsize=(12,10))
5 d* t8 ^% O* D1 Q) g3 u
# 极坐标
" |; Z1 {4 x+ N$ g8 A3 h
ax = plt.subplot(111,projection = 'polar')
# j0 q! w4 j0 l2 t3 K
# 顺时针并设置N方向为0度
3 \& ]8 p; Z2 C
ax.set_theta_direction(-1)
' o: C7 \. v" O5 c) [
ax.set_theta_zero_location('N')
; K9 n, x# k. `% n& F
7 _( L% C5 O1 d3 b* N" l4 C
# 在极坐标中画柱形图
4 x% ^! C7 K8 M2 x% R
ax.bar(theta,
0 J, \9 l) F4 Z' t9 m9 {9 ^
data_list,
' Y }# f" u0 A$ j J4 ?
width = 0.33,
4 Y6 w% H1 s" X/ L9 ^
color = np.random.random((len(data_list),3)),
7 e% K/ v) E- w/ O/ W
# labels=str(country_list),
8 N, |# k( i* q9 p
align = 'edge')
3 S6 ~4 J' g) ?. t$ T
'''
5 N8 }2 I6 E1 k) g+ p: C
显示一些简单的中文图例
( M+ O5 r( j, E
'''
0 n* v! Z1 g8 a, r/ E: Z) G/ g
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
: s l: T, q8 x) s/ B
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
. D3 o2 T' q8 H) A2 A
for angle,data in zip(theta,data_list):
& d% O. A$ y- K. f3 B
ax.text(angle+0.03,data+100,str(data))
, z8 Y' J6 u. Q2 S* a
8 U5 |$ ~+ b& S8 n' `
0 M I5 G) g8 J7 n" H/ w5 |" I
plt.axis('off')
" ^$ ?. }. H! M6 `% ]. I- f2 N2 Y. Y
/ ?& S5 Z5 h' m0 T1 n |
plt.savefig('Nightingale_rose.png')
: v# h9 B" [+ R/ J
plt.show()
! @( G) e3 j5 v% X! L
% H4 \9 A; c2 b
3 z( p6 T4 B8 Q5 P$ o9 X
2.运行结果
0 |8 A6 b) b; l7 o: I
2020-5-30 15:08 上传
下载附件
(191.55 KB)
+ G6 j1 X0 \# }" s. C& b- z) B' c
5 f7 {1 p2 e1 a6 Y+ w8 s5 d& j- F2 ~1 r
' O# A. X: L. ]- D4 {
3.excel数据表
6 r- @" n% l3 V8 m9 L+ D1 W# e
2020-5-30 15:08 上传
下载附件
(23.8 KB)
: C. I" o& G4 e. I2 H, R" k3 \
7 Q4 }( I, r0 O8 y# [( Y" J8 k
4.说明
0 K& o& p+ {$ a5 R8 N& T) O
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
& e3 t+ a2 n2 U5 U# S
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
5 f5 E' @; q! h& W% W4 z8 u4 G9 a
————————————————
' n/ b+ [+ h ?6 ?5 I
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
) D" [& f: D1 ~# z9 B# W
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
4 a, b0 b j' x7 N. X2 u
/ O: b& g7 M0 b d! D! f3 c6 k/ B
3 p W% S) c# V1 j
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5