QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7798|回复: 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
    7 E6 N- U6 h# N8 \9 g
    python+matplotlib绘制南丁格尔玫瑰图) K- N: \% v8 x9 u) X2 t
    实验:绘制南丁格尔玫瑰图; J5 S: X- B* v! p
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~! i& S6 K: f$ K+ [( O
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    # P! N( C; U, w' y( L. ^; }3 J: z6 S3 u. ?4 l' f6 ^
    文章目录" _* Z1 E- R* c
    3 D: A- z& r1 `7 s0 p# ?
    一、实验目的0 y0 [' O& @7 P0 c- ?
    二、实验内容
    ( N3 a* a/ g  z三、实验环境" g+ E7 |  V' E4 n( ]
    四、实验步骤
    4 }) `; u* L' c: D五、实验代码及测试3 T% x7 `6 s: K( S* j( M1 _3 r0 e
    1.源代码
    % Q  T$ M6 U+ ]$ K2 \$ s5 f2.运行结果) ]9 m* r# e6 i/ g( g. S
    3.excel数据表4 u# z, `2 k) v4 x+ C; [& X
    一、实验目的8 M4 G2 `8 v& Y6 ~7 y: J$ B; f

    ' x- O, I" o4 {6 \7 D5 ^! P3 O/ D2 p  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    ) B* `% D+ j$ R+ X# `4 b* v& G4 ^3 w* t3 F& p8 Z- G
    二、实验内容- {- d! H! k' y( q5 u! l/ |

    $ N+ Y9 Q6 b0 f) e2 Q  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。) X" s. B% ~; A% f& [9 x$ I
      自行选择一组数据,画出基础玫瑰图。
    2 y" P$ o2 {' i$ N  s, \' A% b* K6 C0 Y1 j6 d, |% P" V  m5 g! ^9 D: I  Y
    三、实验环境
    . B2 Y3 _* d7 o$ a- k0 [; H% C2 I2 d
      ython 3.8( z; y+ ?/ _/ l: t

    2 A6 Y& ^8 [7 O/ u" q四、实验步骤8 ?8 c. M$ x& b

    $ _( s$ ]! k) t" _" P9 l6 Y( G* U查阅文档,了解南丁格尔玫瑰图的原理。" k7 ^6 ^2 E* Z) _# ^
    选择一组数据,编写程序画出玫瑰图。
    ( ]- d6 H7 x: m6 S五、实验代码及测试
    2 p* |. m5 p( [) g) c, R0 c6 ^" Z; S- D' }
    1.源代码
    , ^( q- R, r( P- P9 K+ P, Z- [6 ?. y
    import matplotlib.pyplot as plt
    9 I5 ]: H2 E3 eimport numpy as np' o- @7 f8 M% |1 k) _$ e) n
    import xlrd2 p- k& p: F. e5 B. S6 s: w
    ' F- G! [- l8 F' C( d9 M8 m. b
    '''2 ?5 K. r( a% i+ v& k
        按列读取excel文件并存入两个列表
    & _, n2 p0 y; s4 u( t'''
    * b( h7 B  N+ T# l, Gdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    9 L& r" D% `- M" u" Ptable  = data.sheets()[0]   #通过索引顺序获取工作表
    - v) W8 R: @, s. [0 zcols_n = table.ncols ' O  W+ {! [' s. O& B
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    & W1 W  U! S0 B) U( r( Ldata_list = table.col_values(1,start_rowx=1)
    ) h, [' `$ ~1 j- Q1 a( U0 Z# print(data_list)
    " i6 H$ D; q  K1 L2 S3 _
    ) P2 P& x/ }" n  W. _( B2 N* b'''
    1 \5 h( T* K, N2 w! X% V6 f    计算角度1 M$ x/ S& m: U+ V9 p0 u$ D! u
    '''
    ! ~) t7 O$ T1 y  Fn = table.nrows-1           #去掉列名
    5 T- O7 h8 U0 r$ ftheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份% e& Y: }$ w2 t1 w) \* M# \" m1 r

    # F; N0 f9 }; M'''
    8 K, F/ e: c- g7 \7 H    作图1 i" e9 p2 `9 K$ u" M' {! r' `; l6 L
    '''
    + z5 F2 U, s7 I5 [# {# 设置画布7 i$ K% w; v$ I* }2 M( a7 p" S* w% U
    fig = plt.figure(figsize=(12,10))+ \/ C* z3 Z  |4 m  X. _
    # 极坐标/ c1 |$ F3 U) K# J( _5 g
    ax = plt.subplot(111,projection = 'polar'). o& u" c* c1 B, w7 Q( c6 n
    # 顺时针并设置N方向为0度
    , y( u, C% I& H$ C9 Zax.set_theta_direction(-1)) q% m- ]5 v7 I8 Z- f9 k; y
    ax.set_theta_zero_location('N') - w3 i& k) K- P% Z7 r7 [! ~3 E
    ! x0 P+ x: i8 T) s! ~/ @
    # 在极坐标中画柱形图- w, z: b4 J! u' @( P
    ax.bar(theta,% Y: D6 R, \2 f( W& k
            data_list,
    # }/ v9 N$ a0 k; p6 n( b        width = 0.33,
    6 ]* y# r  Y" S, K0 j8 j        color = np.random.random((len(data_list),3)),
    - j4 s, ^6 N& u8 w1 v1 J$ s        # labels=str(country_list),
    6 `* e3 F( \. Y        align = 'edge')3 ^6 X; v: N( e) a/ [+ P$ V
    ''' $ j& l* m. }8 x4 V/ n
        显示一些简单的中文图例
    $ U6 \9 g6 Y; @; B( e'''
    + J9 l+ ^- z+ G% {$ v& k- _plt.rcParams['font.sans-serif']=['SimHei']  # 黑体. F' L3 D" i, F
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    ( q7 f  l) }' ~" q( B% e/ N! ~for angle,data in zip(theta,data_list):' C. l6 `) e; }9 `8 I7 T
        ax.text(angle+0.03,data+100,str(data))
    ( }9 ?+ ^1 @% N+ C2 z
    # G: R. T; I! k! J) ~/ Z3 J0 R* O; D% r: R; |
    plt.axis('off')
    % H: O5 B8 k6 D: N- X
      D& j  o% |: _, v6 U" W3 z: Xplt.savefig('Nightingale_rose.png')
    - j5 A! o9 A3 \; ?( @plt.show()) z9 s6 @2 f0 J/ u5 K" Z

    - p3 l8 `+ P' Z3 t: D. b4 ?. P* ^. u  i8 A' X
    2.运行结果
    , @* f! Q/ d+ N% P2 _9 z: g 1.png
    : Q# @. O- s& g3 r" v" k* q4 D4 W
    ! d) [# N7 t! Q1 o" T$ }
    - J2 f/ C6 ?! A0 q% I: |! h/ o; [3.excel数据表6 y# p6 ?+ T2 }. }) J4 @5 A
    2.png & c0 Y+ F3 M) e5 _3 f" Z9 W( K
    - o  I. p- {9 g/ b; s8 N$ _9 A( @
    4.说明
    ! W6 V7 }0 b. ~: z- f# @4 K  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    : a' w0 _4 {2 g: h; w2 t  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    $ j* h7 E9 r4 p8 z6 s————————————————
    / q  B/ E6 a2 T& g7 X& Q# y版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
      ^8 A3 @6 O7 e$ F3 s9 |" d' }: T原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638526 i+ y. r9 V' P2 R! J

    4 N8 E# p) ?/ ~, r. k6 J% e, m8 F: D4 w$ K: B* x9 u
    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-6-9 06:43 , Processed in 0.485740 second(s), 54 queries .

    回顶部