QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7934|回复: 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
    1 y$ _  ?: T3 v( f- ^& U
    python+matplotlib绘制南丁格尔玫瑰图4 h6 v7 \0 ?( I. f0 G! z2 m
    实验:绘制南丁格尔玫瑰图
    0 A7 S0 ^4 @/ r* b  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~* O( D. W8 W9 R" ]
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    & ~/ L% ?5 B! ]( Z* a2 E+ @6 Z/ N5 c( H# }
    文章目录
    ) [: q" p# k% X9 `3 b$ l: ]2 O. J) U- J5 j7 U/ P% r$ a+ z
    一、实验目的
    ) q. O" E! o7 O二、实验内容
    $ ^" Q! Y1 a* |; `4 D$ ^三、实验环境
    ; {  K7 [3 H+ f  m7 z( w4 X4 h四、实验步骤
    8 t9 r; g4 a9 V- c. M6 d! e2 e五、实验代码及测试8 F1 z" ~. ~% `& x- B" A
    1.源代码
    2 _7 i8 b  x9 @+ i& w  D  R( D4 X2.运行结果
    , g& \. J3 O) z# z; h# W3.excel数据表
    * F) p8 ^" b1 C: s" X6 H; d一、实验目的, F0 T) P& g9 V! g, S
      J5 `1 U  W( L9 @
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    7 t& ^$ k# p) _3 H2 A7 p8 O9 O; ]  o, m1 J/ q+ K- R
    二、实验内容
    0 A8 |8 ~, l2 N: C* i  K* o6 t7 J! v, ]
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    $ U; b" p1 V) O; `  自行选择一组数据,画出基础玫瑰图。: \+ r* C; k, R0 Z
    3 m' v. N- N# d, P5 F( X
    三、实验环境
    ! G3 ^( x5 H4 O
    ( ~& l3 @0 |) I& g* ?  ython 3.86 ~" |9 ]! \( U1 W3 F  l

    + O- p+ J  b: P四、实验步骤
    ! c/ v9 T& N' y6 Y0 o0 X, O, M0 d! `+ i8 a: ]& ^2 g+ ^3 t' T
    查阅文档,了解南丁格尔玫瑰图的原理。
    * `7 y, g5 Q& N8 ^6 A; q8 G选择一组数据,编写程序画出玫瑰图。
    " u7 Y* Y5 M# _6 _8 T( A9 i五、实验代码及测试
    . m/ D0 ~3 \, t/ l' |+ Y# L; U  S! ^9 Q+ r5 K
    1.源代码# u1 W0 g: h! ]' i. C9 w+ l$ W( l
    . ^3 r7 v0 G( m% g
    import matplotlib.pyplot as plt$ r: y8 ]+ Y* |: K7 x; U' T7 T
    import numpy as np
    3 F! Z) @( V( m2 p1 Nimport xlrd: s% F9 U! n# M9 _" z9 c

    & m" @% @2 E) v, I+ @'''
    # d3 E. s8 o/ r2 o    按列读取excel文件并存入两个列表
    9 S: X& Y+ W6 w( J1 a'''* a- J8 w+ B; F
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') " f7 I8 [% T  J' ?. N0 T' s! N
    table  = data.sheets()[0]   #通过索引顺序获取工作表3 }# `) q$ G0 R5 F1 m$ e; j
    cols_n = table.ncols
    5 ?) s9 z% \( d  d' jcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名% F, O( j( x% f6 D# U. Z
    data_list = table.col_values(1,start_rowx=1)
    # m$ R. t+ C( J; Q$ z# print(data_list)
    , w3 i- Q3 }' c. w
    ; @' R) f- ~' Z/ r'''
      t( `! ?  Y, n5 z: D    计算角度5 t! X: Q  @7 U# q' b/ I* u
    '''
    ; Q# ?  [- S& c: B% A0 r3 in = table.nrows-1           #去掉列名- p" [: Z+ ?1 _' e# E3 T
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    $ e# \  q5 k% R9 l' I( Y
    / W5 z& u* L5 a; \1 ^'''
    9 }8 |/ B* i7 b/ t. M+ j    作图9 t" P  _! h, L( p. B5 [9 }
    ''': t4 w  H' |" j2 a' y1 v
    # 设置画布
    & R; i( `, u1 H2 q6 z; Hfig = plt.figure(figsize=(12,10))/ K# O4 @8 Q/ I  l2 `8 E7 B+ [
    # 极坐标
    ! Z; J6 U  X( Y" rax = plt.subplot(111,projection = 'polar')
    $ S& L( r$ z/ [# b- Q' s( V# 顺时针并设置N方向为0度& t8 F  a; f- U  G4 F0 R
    ax.set_theta_direction(-1)
    4 V& H3 \5 {0 _( }4 `$ ^ax.set_theta_zero_location('N') 4 V& A. O/ |$ \7 K& J+ s
    % R$ F4 m( ?% i5 V' R: w! ?
    # 在极坐标中画柱形图6 Z0 ~; e( K, d3 w+ o, G
    ax.bar(theta,1 v4 b+ T7 b; J* O
            data_list,
    ; Q5 p+ v. c8 `        width = 0.33,
    , m' r+ [4 Q; F+ f/ v' v* Q0 L        color = np.random.random((len(data_list),3)),
    8 {5 g- R* s" ]5 K0 ?        # labels=str(country_list),
    0 t1 b# `" R% j) l" G& W        align = 'edge')8 Y- b( [$ R) ^8 P9 q" x
    ''' $ C: U1 \) a) p
        显示一些简单的中文图例
    8 Q6 s5 N& |) x+ z% M'''
    ) O; v/ ]6 C/ ^8 @3 Tplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    - e. p5 R& R/ u# N% Nax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    / n' a" I0 G4 J+ W& Z9 H: q: E3 xfor angle,data in zip(theta,data_list):' ]5 ~  d$ ^: I/ u2 {8 R
        ax.text(angle+0.03,data+100,str(data)) 1 l9 ^! n6 C- c# i; u! Z
    ; O9 f" d) g& o/ Q: @
    7 D& H1 W6 ^' y7 u6 o) N* m5 s
    plt.axis('off')
    7 [, H5 t! o# i( ]) z/ |6 `& ?9 w$ T
    plt.savefig('Nightingale_rose.png')" V6 z  v. ^3 r
    plt.show()$ f& v4 n9 Z% _& |
    : G3 T' J. |3 g2 O+ _4 C% Q

    & }( s  ?: R1 K1 V: T) g7 S2.运行结果5 q& `: {7 c8 X/ |5 D% K. \& H3 C
    1.png
    * T  |/ E* k3 @  {  N1 a
      M: F. a& G1 W5 s  C3 [/ e' G; t1 U
    3.excel数据表* S' u1 Q2 C7 Y' t8 @4 ~* b) }4 G
    2.png + |8 I; }. _- `1 r: Z
    % ]* `' |* ]/ H6 R& k0 O) |0 ]$ |
    4.说明
    + @" N" V: q& }5 I  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    % G7 B- `/ l$ e. w6 U' c$ E  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.: d2 j  Q7 z9 g2 F" B0 G8 r4 F
    ————————————————" R  z& o) Z7 ^3 o
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 }; V/ t3 b( m2 N
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    8 g+ B. A" n9 r1 i, \( Z! U
    / r' b" O6 \6 x: W5 U. B  `
    % d1 t  j+ x" @! V
    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-9-11 21:26 , Processed in 2.041507 second(s), 54 queries .

    回顶部