数学建模社区-数学中国
标题:
python+matplotlib绘制南丁格尔玫瑰图
[打印本页]
作者:
杨利霞
时间:
2020-5-30 15:09
标题:
python+matplotlib绘制南丁格尔玫瑰图
/ S. U! q/ _$ D
python+matplotlib绘制南丁格尔玫瑰图
+ o. g3 m3 E+ P* A5 c! Q
实验:绘制南丁格尔玫瑰图
' Z* [- x' @8 S! J7 M
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
* @- r' O/ _. W/ l
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
5 f4 m- m- [: v6 o
% M8 r9 A* p% X: K2 ~
文章目录
& T( Z2 u" Y% u7 Y8 X
3 v* u3 i7 y- A4 T, e2 N/ C S& S3 V
一、实验目的
! F/ j* R9 o J. {, {+ W; E* H) p$ n7 N
二、实验内容
! c0 h5 E. q$ |0 a. |
三、实验环境
7 R: L u M& _5 N
四、实验步骤
( `2 F! }% v3 o
五、实验代码及测试
" A+ @, I/ X" P+ D
1.源代码
5 Y" f, Z$ n, @8 ]# n
2.运行结果
6 n2 k/ ]+ ~/ X, P# U; ]
3.excel数据表
% o) w0 k, w# R2 |. P i. z. B2 T A
一、实验目的
) P$ A$ j- y: B+ a/ Z* W, z9 S5 w a
; S' r" P: c6 X- p/ p
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
6 y2 l% A! B( V5 ]7 v3 X
" a6 v" r) }& q0 \7 y
二、实验内容
6 t# [' V* ^" X& d
+ f" N+ y% c) h5 i8 {
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
! w* y. l5 o( ]
自行选择一组数据,画出基础玫瑰图。
5 q; P) G. c3 v3 h. c
# ^- h; M3 l' R
三、实验环境
. d2 G% N' [9 j5 O
- S u1 r9 m# P6 B9 \
ython 3.8
1 o6 U7 U$ L% W
+ o5 O& ?/ S( K5 i* p
四、实验步骤
- F' p& F r, p) j9 i( a
; w7 W: V0 B7 y# B
查阅文档,了解南丁格尔玫瑰图的原理。
2 q) J* l' [: ]2 w9 [
选择一组数据,编写程序画出玫瑰图。
x; O B0 \) T! E5 e5 }/ c
五、实验代码及测试
8 [' ]5 m. T- j8 G
0 W( i- O1 Y3 I X) ]
1.源代码
5 G3 i* m/ P. B |
6 ~9 [% D" U: \" O+ F/ D, y1 c( f
import matplotlib.pyplot as plt
& D# y9 s! R% u2 u
import numpy as np
, {. i! k9 r, j o" \
import xlrd
0 Z( G. J, M5 i
4 v5 a/ u* |+ B. r6 S
'''
F" d+ V" [# Z+ v
按列读取excel文件并存入两个列表
" z: d4 [8 t3 {9 c! w3 T
'''
& H" s/ f. Y9 F# W+ X6 h" \. L$ t1 I
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
q) H6 I6 ^! o
table = data.sheets()[0] #通过索引顺序获取工作表
" c6 f8 O+ U6 C# F
cols_n = table.ncols
8 K! `# ~) J# S/ r4 D; A4 T$ D
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
1 m( {/ P- M9 ~, ~2 S* x" ?3 B
data_list = table.col_values(1,start_rowx=1)
G2 H* K4 n* m) ~
# print(data_list)
2 b; b0 ~: b& w% _
- X; j) G( H, p% W. e# I6 h
'''
1 @8 W" N. S8 z; b
计算角度
$ M1 i. K) R" W0 t
'''
* z9 Q( R7 F# C5 g6 X
n = table.nrows-1 #去掉列名
. l* f0 H- g6 l3 u1 S
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
2 x2 e, M+ x6 j6 ^3 p& C; N
! k ?' T, \: W
'''
3 k& S! u% H! _
作图
5 _& s* D5 W4 B2 |
'''
8 J) c4 T9 S9 j1 O+ F% r
# 设置画布
4 v7 Q( y- j% y: ~
fig = plt.figure(figsize=(12,10))
+ f4 B3 R$ c; `0 l/ Y$ s; ?1 J
# 极坐标
0 \& V$ {! W5 N! c
ax = plt.subplot(111,projection = 'polar')
* |# R/ ^. u6 b, `
# 顺时针并设置N方向为0度
5 X/ V" O4 B0 K5 D2 ?- _
ax.set_theta_direction(-1)
, W8 O/ r1 I! }
ax.set_theta_zero_location('N')
6 z$ l+ g* a# ]9 W z2 G
( d) }7 [, `# T6 o8 p! M% G/ a
# 在极坐标中画柱形图
2 S6 K$ @- W0 r* a: W
ax.bar(theta,
: @% U; m$ d3 l+ Y# F% R
data_list,
' ~! U% z; x1 n3 r* _) e! u4 o {
width = 0.33,
% ^7 W5 p- x2 u- Q
color = np.random.random((len(data_list),3)),
9 u; H4 s2 h- x+ G8 A K& E
# labels=str(country_list),
4 x' r& P' y. b
align = 'edge')
/ _- t6 D" C! p" R9 C
'''
3 q# \. h I2 E$ N' Q0 o
显示一些简单的中文图例
6 u' ?3 ?/ t% ~- t' I/ d4 M" S
'''
; ]8 x0 g, u% W
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
* I$ [: L& b' q! q% n
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
2 x1 {7 B& Y9 x6 x
for angle,data in zip(theta,data_list):
0 T/ V' m2 T+ V u4 j$ \
ax.text(angle+0.03,data+100,str(data))
! B' d6 d. q4 P# ?+ K1 B6 R" R
i x' ?3 G" c- q
1 E: \8 ~, g9 R2 L6 ~
plt.axis('off')
' x( M/ R2 X4 ~) G8 ]! m5 }- e
4 F2 d. V4 x# }6 a8 v1 B
plt.savefig('Nightingale_rose.png')
, z! h% E3 h" c* B, M8 c5 o$ l
plt.show()
6 g) j& u8 N/ G7 Q8 t7 J
! L! ?, t9 e. p" Z3 d2 P5 ^
/ E: B1 g$ b" Z% Q/ m# A
2.运行结果
`# O* o# j" {, b" w4 W8 l# ~
2020-5-30 15:08 上传
下载附件
(191.55 KB)
% @2 ^# Y# t' F* B1 z+ l
: N* `' A2 ^) A' j! }
. H2 X& n o; k/ b- m
3.excel数据表
$ T7 F" w$ F N* B
2020-5-30 15:08 上传
下载附件
(23.8 KB)
$ x: u# Q/ C) R( C; ~
/ F* U" j* ?1 E- q. ~* p
4.说明
* y9 J( @8 I( k+ \4 L4 w
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
* w+ V s* Q5 @8 u: v
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
. }& W' d9 u, C
————————————————
6 E: S' H. O/ w% h+ O
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
: J% t. B/ {& `4 a9 c; v, B
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
1 |/ S9 y3 k9 F
5 R" u$ N* E1 O7 p b3 @( v
- q" V* y) C3 h+ v% {% R6 N
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5