QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7838|回复: 0
打印 上一主题 下一主题

python+matplotlib绘制南丁格尔玫瑰图

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-30 15:09 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    : O8 B5 g( |. cpython+matplotlib绘制南丁格尔玫瑰图
    1 p( r( c; |* U" Y1 w  Z实验:绘制南丁格尔玫瑰图
    ; e- c  d! e' m  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    4 }9 L9 M+ C" |9 D! {  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.9 g% V$ r2 F# F* g- ?% N# l

    ; @; k! s$ Q, Q6 F文章目录
    % G* A2 L/ j9 c; ?" D2 x( |- v6 A/ i0 U0 w, {' s' o
    一、实验目的
    $ I/ }8 J0 ]4 e) U7 _9 d二、实验内容) k  B: W6 _: r  ^
    三、实验环境
    - E1 T4 D: u! i# q  I- @/ N四、实验步骤- W9 S8 ?2 g  w$ N
    五、实验代码及测试+ ^# [6 F1 d4 k
    1.源代码
    ! G6 _; Q, F# ~2.运行结果7 E: K4 G8 H$ L; Y1 U' z/ J2 F
    3.excel数据表. B" ^1 _% _/ G3 G, E+ `
    一、实验目的' [0 b- o0 p7 S
    9 J. {# b: Y  {1 O
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。$ X; N  F. |! j5 t1 V( u
    9 e' T6 g1 I7 c3 s4 `( J, k
    二、实验内容
    9 ~$ F5 j) v4 _6 T. Z
    7 ~, ~. u1 y: c" d  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。, u. Z; D" ^$ ?' F4 E* Z# j
      自行选择一组数据,画出基础玫瑰图。
    ) S1 a( ]) Q. `0 \; E1 |0 q$ V( u
    7 W7 C6 r0 ]' Q  S3 m三、实验环境
    5 _) _$ }6 H+ ]9 R0 i9 Y. G6 v  y
    3 o8 z" g& b( Q  ython 3.85 T- D& J4 I8 k  |2 ?. X) a
    $ M7 a2 y. t: s5 T4 N+ t
    四、实验步骤. f8 [+ j4 b5 @7 g# p- n0 N) S: t( `
    , Z2 R% R) W) P, N
    查阅文档,了解南丁格尔玫瑰图的原理。4 m. c  N/ g# c( R* f
    选择一组数据,编写程序画出玫瑰图。
    # Y; L8 j/ c0 v五、实验代码及测试
    0 y; p0 L- K. ]. S6 ]6 z9 O
    & b; J1 b/ m9 K5 d1.源代码
    ) }! @1 B' v2 Y* I; I
    % s  _- c. w" ?+ ]import matplotlib.pyplot as plt
    ! B3 M0 R5 V; w- rimport numpy as np. M$ `4 J5 m) M
    import xlrd
    4 m2 y- A/ _0 N4 S4 p/ V( c( _' n1 W
    '''
    6 _1 ^2 x  ?0 O, v    按列读取excel文件并存入两个列表
    ' G! c7 I' n) ~( ~  H7 F0 t0 Z'''
    ' f* H3 i: J5 F8 m4 B0 Fdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') * f3 J2 L+ W: ?% f1 b
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    0 |" w% E: C% {0 e9 A) `2 Scols_n = table.ncols   |0 C: W4 h* B. f9 }
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名0 Q2 M, z' y: ?- |6 \3 [  _$ G
    data_list = table.col_values(1,start_rowx=1)
    . E+ a/ o. W2 E, C( a# print(data_list)& M% i* D+ N3 X7 R( s' {6 n

    ) r' ?- ~: _3 {+ ?: Y'''2 z! g1 P* v% D8 B' N0 v$ {
        计算角度& N. r! v! w) I+ \/ [9 r8 M' ^
    '''0 }/ `& w# i8 d, |* a3 g$ ]
    n = table.nrows-1           #去掉列名, b. @8 W9 u9 v( [9 h' r
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    8 B; H  F% v9 B6 }- F& n/ t) E  R; b# ?8 X& W3 t; T
    '''5 B$ x5 S+ ?' M! v9 {! O
        作图, |+ D/ O2 X& Z8 u0 N: @" R
    '''
    ; T( z* d1 d3 U# v+ \# 设置画布
    " ~. W+ X+ b  H. Gfig = plt.figure(figsize=(12,10))5 O! y4 l. [4 c8 q9 H1 m
    # 极坐标
    % k; K+ s0 [# Z% kax = plt.subplot(111,projection = 'polar')- G6 N- F# @. Y5 h% R% P
    # 顺时针并设置N方向为0度4 C0 y) f( c# q- i; n9 E" _4 h
    ax.set_theta_direction(-1)
    ; f  B. o  _3 N" ^4 Vax.set_theta_zero_location('N')
    " D$ c. c- s  B+ s. n- k" v6 j
    9 M! l: j6 g1 E; g, h  A# 在极坐标中画柱形图2 Q! i6 H+ y; u# \' ^9 }7 k
    ax.bar(theta,
    . X+ b+ I. R( |- |        data_list,
    5 L7 Z6 b& @1 G! s        width = 0.33,
    . H$ Z" w0 [0 M! N1 y& Z        color = np.random.random((len(data_list),3)),
      s' N: m1 P% r$ D% |5 @) J' G4 S        # labels=str(country_list),
    9 v  o) Q! z: u7 n        align = 'edge')
    ) y) O" f6 f: k! s' b& x'''
    ) n2 s! i6 v. }; K4 s' M; y    显示一些简单的中文图例7 Z' S" I+ ?+ D9 ?0 T9 d
    '''8 R$ }' i6 ~* z
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    4 R! Y& C. h7 T+ z9 vax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    # c% T- v$ b! B  K3 @/ Ifor angle,data in zip(theta,data_list):
    - p- A5 P2 y; }    ax.text(angle+0.03,data+100,str(data)) # R. w2 w* t3 D6 t

    9 T: ~+ V. t4 K, E& e+ {, g
    7 Q0 x3 \! r8 B  {# D* ~2 h$ E* qplt.axis('off')
    : K' R3 s! O/ `9 _. x
    & E9 h2 j& I' u( Y: y1 z4 splt.savefig('Nightingale_rose.png')
    2 X5 s. o6 K9 }& Aplt.show()* [  y) B# y1 K* J

    . T1 A6 J5 N. |* W. t% E
    4 u- R6 e( W- T  D# ]) l2.运行结果2 Y* ]8 @. V, b4 I) V9 }
    1.png
    / }) ^9 h1 H0 a! w$ u
    . o3 x- B- C8 _  ^- ~. C% i0 r6 \8 i  |
    3.excel数据表5 G' {7 n# }# w1 N  ?
    2.png
    0 G, E( f9 W( k* u2 e" f4 l/ O, X1 Q5 I- \( a$ S
    4.说明
    6 A4 m8 S2 b( n  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    . X1 x4 n: y8 c  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.& i) U" d7 `- C' O, Z; g* N
    ————————————————! _+ ~- P/ W& C
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    3 ^. _0 [. a1 @( b7 B) _原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    ! r3 g- C/ j7 t3 A+ c6 F$ p2 U% a7 K  F- C
    & M1 Y- l: l& z+ R# Z
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-19 16:56 , Processed in 0.432736 second(s), 54 queries .

    回顶部