数学建模社区-数学中国
标题:
python+matplotlib绘制南丁格尔玫瑰图
[打印本页]
作者:
杨利霞
时间:
2020-5-30 15:09
标题:
python+matplotlib绘制南丁格尔玫瑰图
4 Q1 V+ S3 H& z" N; K( V* G; [ ]
python+matplotlib绘制南丁格尔玫瑰图
# {+ N) x7 b% A
实验:绘制南丁格尔玫瑰图
$ H* w- q8 T4 X3 e! n
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
) f: n- o1 K9 P7 g0 e1 i) [& K) J
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
. z4 t/ \9 Q, U) R
0 K- D/ n/ ?) ?; G4 U& W' b
文章目录
' i1 _9 v) x9 D/ X: A) W
9 P8 V7 h0 ^" B/ B
一、实验目的
- I4 Y$ `1 x4 G. s5 D' j6 n; o1 {. t
二、实验内容
2 S; f) N7 I. E# c
三、实验环境
$ {$ a z% d- ?! J( |& G. _% y
四、实验步骤
/ s/ s% T$ r$ F! T8 z
五、实验代码及测试
' D* {: O4 D7 f/ ?/ k+ K$ _
1.源代码
9 c+ ], H' o! I5 d
2.运行结果
9 c! L/ z: C! b) h P
3.excel数据表
0 N2 {1 S0 O- l \% H. j
一、实验目的
' H! g3 R! _# n
% G: K/ \1 S# L
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
) I( ?( w: a) V
( d- W* s; N5 G$ f+ h- k- m& P4 c& N
二、实验内容
( f# z; w' `- q2 ?0 U
2 e/ k! C% T% h* @& O; n; @
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
# Z6 N! _3 v/ h! E8 J# R! e
自行选择一组数据,画出基础玫瑰图。
, M' w( i$ N, L% W( v J: n
8 ^# v( Y" d/ M3 r
三、实验环境
) \- V2 c+ r! _% H. `/ V
7 k) v$ U8 @3 X$ K' {) v/ q
ython 3.8
+ \' k( |( J3 m& c
1 g& d3 o7 @4 y( l5 V4 C9 h
四、实验步骤
" [$ K# P7 c9 h v- y
. u W8 }. E. o5 f" j0 A
查阅文档,了解南丁格尔玫瑰图的原理。
W/ j' i! q6 T4 E) F( a' S
选择一组数据,编写程序画出玫瑰图。
; _0 _3 P, u. t1 R9 R9 i) X
五、实验代码及测试
! ?1 v) A9 u* G+ j! `& p+ N
' V+ s4 G* k$ |: Q4 Z4 A& P4 \
1.源代码
# R% G7 B+ _. h& @1 s! U( `4 m
# p, N3 {5 c S/ e$ O+ N! b/ ]2 G
import matplotlib.pyplot as plt
# ^6 p# y: t, } b
import numpy as np
. ^: q: J8 p5 C' W
import xlrd
7 i+ N* ?; Y: u9 h6 t: [
/ L( N, {2 V- \( E
'''
1 f/ D5 G7 ?0 Y2 A( T
按列读取excel文件并存入两个列表
9 H( b6 C/ ~1 f/ @
'''
& x2 F' t% d; t, g
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
0 _8 t4 n# w ~0 T: Y3 J
table = data.sheets()[0] #通过索引顺序获取工作表
; g5 U. ]7 o+ {) G7 E
cols_n = table.ncols
2 Q+ }$ l/ I# M. j* L2 `
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
4 _2 d' D' d8 T- [! }. }* T
data_list = table.col_values(1,start_rowx=1)
1 f* x% C! {1 S* s, l' `7 \
# print(data_list)
4 C, _6 R8 ~7 d1 G8 m# }
, x* J" |2 i5 I L) x' ~& i
'''
& B# ]4 }( Y3 T! ?0 g6 h: K9 i% V( n
计算角度
8 O4 a( W$ ^! H
'''
0 `, F( b3 b9 t3 T9 k
n = table.nrows-1 #去掉列名
, W- G+ M* h- j! n" T1 c+ d
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
1 o. B$ ]: O5 o# C4 S$ b
5 p9 w! T0 s* }0 O
'''
4 v2 z7 Y! W0 j6 {. A5 l3 }
作图
2 ^, K5 M7 d M
'''
9 E& h% `; S! P7 ^& j+ G; s" h
# 设置画布
' Q# ]$ f9 w: f+ c5 b# f5 K$ ?
fig = plt.figure(figsize=(12,10))
$ U3 C& g3 ~' M- B3 U- Z, H
# 极坐标
8 U2 A6 e, }) X. b3 T
ax = plt.subplot(111,projection = 'polar')
; p6 R& Y5 p7 f4 x |& U; Q* ]; V
# 顺时针并设置N方向为0度
5 i1 O) o R- L, f# a% j
ax.set_theta_direction(-1)
# {: G' Y" |4 v5 L6 }+ d& Z7 Q" e" z
ax.set_theta_zero_location('N')
! |) A0 Y5 e# c, m4 a- Z
: }# t% J( N2 L$ i: M
# 在极坐标中画柱形图
$ B9 Q u/ L0 N% e5 F: d* s
ax.bar(theta,
. e/ a% d. j0 ^& k4 M
data_list,
: G2 {4 K* u* i) M, }3 z- {
width = 0.33,
0 w! K& b( N. x% B) S/ v
color = np.random.random((len(data_list),3)),
2 B3 I$ U. D3 R* d3 H' }3 B. ?" k
# labels=str(country_list),
$ s# N1 Q U; U: o9 j, B0 F
align = 'edge')
: t1 `% t$ t/ H9 o" L( U" I
'''
2 P9 [- r: \. d l4 `
显示一些简单的中文图例
9 V2 T1 n! a4 h4 h0 e+ U
'''
# n; Q! Z& J! V5 r' d
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
. [) m0 p0 W, G6 n- |4 c
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
0 p$ p" Y5 d- A' y+ E! e$ b! @ z( @6 r
for angle,data in zip(theta,data_list):
, b+ c _" x! w& E2 i
ax.text(angle+0.03,data+100,str(data))
* h% x( X! }4 d# u g
2 ^: p% y; |$ m5 E" V* {5 u. b
- D" w3 b4 u4 y8 Y+ R/ v' z
plt.axis('off')
/ y& `$ ?1 w6 N# S
( k. N4 U4 t3 x2 d3 [, R- R, V
plt.savefig('Nightingale_rose.png')
: O" m& q5 i! p$ X2 a w' a9 A
plt.show()
1 p: E2 X" W3 w5 v' w) j9 M
' @5 C2 E7 g/ K* D7 \# B; u
* Z M& L* [& p5 J
2.运行结果
0 r4 b5 b+ l9 A% ~
2020-5-30 15:08 上传
下载附件
(191.55 KB)
! u7 B8 k& O% ]
& B9 I9 s0 O8 K& W! w: n9 W
( H& v. l2 d1 l3 H& E' {. c
3.excel数据表
( ~6 m- x j4 u# F0 e
2020-5-30 15:08 上传
下载附件
(23.8 KB)
+ O% F5 r6 W# g* y6 i& @6 K1 M' S
0 r* U- U) \) B# v8 V8 O
4.说明
5 D2 Z2 w' l9 z' I& e3 M( F
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
1 s1 x a! ~* J7 w3 o' |2 p' N
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
2 Z' A+ i* {# E* ^+ e0 X5 W
————————————————
1 [: F/ }% G/ Y* }, F
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; v0 e: E. P( ~
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
0 S% g9 L/ S: L; g. D w& {
% Y; f2 ^; o5 J3 h- f; z
2 p! ^2 |+ n" H. p+ M( S
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5