数学建模社区-数学中国

标题: 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 d2.运行结果
9 c! L/ z: C! b) h  P3.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: n8 ^# v( Y" d/ M3 r
三、实验环境
) \- V2 c+ r! _% H. `/ V7 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 Gimport 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 Ecols_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- [! }. }* Tdata_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 kn = table.nrows-1           #去掉列名
, W- G+ M* h- j! n" T1 c+ dtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
1 o. B$ ]: O5 o# C4 S$ b5 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 Tax = plt.subplot(111,projection = 'polar')
; p6 R& Y5 p7 f4 x  |& U; Q* ]; V# 顺时针并设置N方向为0度
5 i1 O) o  R- L, f# a% jax.set_theta_direction(-1)
# {: G' Y" |4 v5 L6 }+ d& Z7 Q" e" zax.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 rfor 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  g2 ^: 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 Aplt.show()
1 p: E2 X" W3 w5 v' w) j9 M
' @5 C2 E7 g/ K* D7 \# B; u
* Z  M& L* [& p5 J2.运行结果0 r4 b5 b+ l9 A% ~
1.png
! 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
2.png
+ O% F5 r6 W# g* y6 i& @6 K1 M' S0 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/1062638520 S% g9 L/ S: L; g. D  w& {

% Y; f2 ^; o5 J3 h- f; z2 p! ^2 |+ n" H. p+ M( S





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5