数学建模社区-数学中国
标题:
python+matplotlib绘制南丁格尔玫瑰图
[打印本页]
作者:
杨利霞
时间:
2020-5-30 15:09
标题:
python+matplotlib绘制南丁格尔玫瑰图
# u5 y) H4 O+ k5 u7 I7 `
python+matplotlib绘制南丁格尔玫瑰图
9 e- F; H) F; c3 p1 l; {$ ~; d
实验:绘制南丁格尔玫瑰图
7 m4 W4 j- Q( o! X e8 }) w' o) X
本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
+ `$ t3 T5 y$ j, h6 |! I! B
无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
3 a8 t" V$ E7 A9 Y) u4 D! z# d
; N2 m2 p) n* u4 [1 z! V, i$ j
文章目录
. S: R6 D; n3 f- h* o
- a* _5 K+ g8 _
一、实验目的
+ E% U C) @8 ]% p: J" f6 o) U- |
二、实验内容
3 Q: i4 T, T+ U3 r$ l$ Q$ P
三、实验环境
5 s; G" \: G- ?+ }* K
四、实验步骤
: J! [7 f4 |2 c: t
五、实验代码及测试
# D5 `9 z m8 R
1.源代码
, t3 z" w% R& C0 c5 g# P; x
2.运行结果
9 P+ ~' u+ R$ S v7 Y/ T% s' d9 |
3.excel数据表
3 a. p8 L$ b" Z- M
一、实验目的
/ {& h6 A6 a% C) q
0 G+ r# O9 e# y! L- j1 m0 W# w# l
了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
4 s$ z" R8 f( R) p7 _+ ^
+ q2 E6 f. z/ Y* g& {
二、实验内容
. H5 c6 d& w7 L. m* L/ i9 [
, m+ H, U7 J, M. R
南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
: [+ d2 }6 u7 N: M: h: l
自行选择一组数据,画出基础玫瑰图。
. D/ k X/ Q, R- P
" C" r/ m5 \7 M4 I
三、实验环境
4 l+ D' N6 t L6 v! x0 p
; }, U$ e3 l; |+ w: C V1 t7 N$ T
ython 3.8
* E1 L% G/ r% V" x" `* P) W
7 T) x `5 k" h- X
四、实验步骤
7 e5 R' O# C, u2 I$ g
9 L H) T! _, a8 {) D
查阅文档,了解南丁格尔玫瑰图的原理。
9 @$ [/ A; r6 U3 V2 [' P9 S
选择一组数据,编写程序画出玫瑰图。
7 ?: O8 ?% G2 x: e0 d+ Y/ I
五、实验代码及测试
- ^) J! B. t' M; m4 D
; C/ w- v2 N6 H' N
1.源代码
5 v+ Q0 T# m! M1 O
1 X" q% o/ q! Q5 ? H
import matplotlib.pyplot as plt
1 l$ G3 T" H- i8 E# ^
import numpy as np
$ `- e( B7 e" R0 b* q. r5 u- g& O
import xlrd
+ v4 @& H, Z/ n# P) x H- P
& w _! C3 e& l9 j4 d( c
'''
6 }5 J l8 h7 Y9 V3 [2 ~
按列读取excel文件并存入两个列表
5 k0 k& S% O1 j6 g& `; D5 v
'''
+ O6 L: X! ]- m. r* Q
data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
5 o; H! R4 r. Q5 M
table = data.sheets()[0] #通过索引顺序获取工作表
: g' y) o r1 q
cols_n = table.ncols
- c6 r1 U' g1 p& H2 p- |: \. n3 X
country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
" s) T' D- q1 T, c2 L+ @
data_list = table.col_values(1,start_rowx=1)
e# Q) N5 @1 O6 g; e
# print(data_list)
% |6 L6 Q9 }; m+ A) {
/ A4 p& W) m c( R: @: y' ]
'''
7 K; z4 N. S+ `( \' `$ C
计算角度
4 T S! [7 v& h- U1 i: J4 m3 j
'''
% O# x# i( m8 Z3 z7 M* i, O
n = table.nrows-1 #去掉列名
& S& t- q7 u* w: n) H* \% Z3 E
theta = np.linspace(0,2*np.pi,len(data_list)) # 360度等分成n份
% o# y. V% x L. Z; ?; n( p
( O% |4 F7 y2 V$ J3 \, Y
'''
" @/ c! N7 f* ^
作图
7 o$ n7 ]7 t2 X" w- D
'''
% c- { c4 u! ~1 B+ ^
# 设置画布
( L6 o; g4 d% ?# }- p/ |4 v
fig = plt.figure(figsize=(12,10))
1 r& u/ N! o. j' p
# 极坐标
; q) V% t1 g; M: G
ax = plt.subplot(111,projection = 'polar')
8 \$ K u ^3 y) l" L9 R- g+ A' e
# 顺时针并设置N方向为0度
$ O/ o4 B# N' Y- P
ax.set_theta_direction(-1)
j. Z+ e: U( E1 Y5 V/ u" V
ax.set_theta_zero_location('N')
( }5 i% ^2 K% Y, ^8 @+ j
6 D4 _1 B3 v4 ?# S+ y
# 在极坐标中画柱形图
' \% R: A8 B2 w' v0 @8 H' |. q
ax.bar(theta,
6 n, c$ H L& L) e* ^1 b* a
data_list,
+ l8 j7 i6 ]4 Z# M2 E. d
width = 0.33,
' n* A! D5 R* F- Y) l' E
color = np.random.random((len(data_list),3)),
9 v( ]0 d" j2 K# P; `' ^
# labels=str(country_list),
( e% m8 P2 i$ h8 M. y
align = 'edge')
& E; h m2 U4 \6 Z
'''
0 W6 }8 K4 `* T% s6 ~5 n
显示一些简单的中文图例
; b/ C# ]5 S1 Q" ~! K/ O
'''
0 S! V# C9 z1 J* w* R- E
plt.rcParams['font.sans-serif']=['SimHei'] # 黑体
( q* c, @5 n4 \' {
ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
! b0 E9 t* F0 E7 p& k6 V
for angle,data in zip(theta,data_list):
; t! o6 x$ w) w
ax.text(angle+0.03,data+100,str(data))
8 v F9 Y, W) B( o, C& B, T. @
& O. T$ {9 M6 k' R$ O
- H( {* u& ?7 D1 H
plt.axis('off')
! b- `! v' X/ C# W! h
' M& H- _ g5 p( Q8 a3 G
plt.savefig('Nightingale_rose.png')
8 X, \* s, {/ {
plt.show()
1 @& g4 ^6 z& S B, a
! M& Y# I: {* p f; E
W q9 g5 A1 [: d
2.运行结果
* C5 D' F: Z3 V; K; ~ Y& A
2020-5-30 15:08 上传
下载附件
(191.55 KB)
$ s% p k, L) n# y2 O( r) ~* N4 k
3 N" }! F$ A' \0 `4 g8 C
0 S& @' x& b9 T! @8 f' D) U4 |9 P
3.excel数据表
- S; P0 A, ]3 `1 c) j- L/ H
2020-5-30 15:08 上传
下载附件
(23.8 KB)
- A; v# |* q, ~9 s& X
5 J3 A1 b2 l* J2 u8 W# h0 c& F; @0 {2 |
4.说明
: W9 W( G5 a! o% U) X+ ~: ]! N
四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
& v" z# X# w' I9 a# _& ?0 J7 B& C) A
实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
3 m0 I( U. `2 U& K& r
————————————————
$ B4 L( W" ] I' Y& J. j
版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
; j2 M& }; t: S
原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
5 Q; ]4 p3 W. X! }
+ b7 ~5 S o; u# X; t; m0 J9 u4 E
6 }( s3 e7 b5 J1 v, C# b. ^. ?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5