数学建模社区-数学中国

标题: 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) W7 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' N1.源代码
5 v+ Q0 T# m! M1 O1 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& Oimport 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* Qdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 5 o; H! R4 r. Q5 M
table  = data.sheets()[0]   #通过索引顺序获取工作表
: g' y) o  r1 qcols_n = table.ncols
- c6 r1 U' g1 p& H2 p- |: \. n3 Xcountry_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, On = 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: Gax = 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" Vax.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' |. qax.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- Eplt.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 Gplt.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 [: d2.运行结果
* C5 D' F: Z3 V; K; ~  Y& A 1.png $ 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 P3.excel数据表
- S; P0 A, ]3 `1 c) j- L/ H 2.png
- A; v# |* q, ~9 s& X5 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/1062638525 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