请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5868|回复: 0

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

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

5250

主题

81

听众

16万

积分

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

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

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

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    发表于 2020-5-30 15:09 |显示全部楼层
    |招呼Ta 关注Ta

    5 y* h; s- ?& T0 K' bpython+matplotlib绘制南丁格尔玫瑰图/ @4 s% o  {/ Z8 `/ z6 W2 Y
    实验:绘制南丁格尔玫瑰图* L, \6 U4 Q' }  q  a$ D# _
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    : U* m7 x; ?; I8 a  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    % ]% x! c' g+ k7 a$ X0 H
    ; d0 \/ B$ u  m. L" _文章目录
    3 ?0 s8 T% \4 I. z  V( {& O7 K+ Y2 B" F  q
    一、实验目的
    % o% `, u9 v7 `5 b二、实验内容4 f% ]/ `! c  i: \. E* u
    三、实验环境/ s, f2 y4 @4 |; O7 L
    四、实验步骤
    5 q1 B( P, q" @6 J2 x五、实验代码及测试
    $ j: ?& |7 d$ y; R! L! P$ x  `  a* K1.源代码' ]" u3 p* h0 l9 I' l" s3 Y2 ~/ a
    2.运行结果
    6 x; g( q& y3 [: P3.excel数据表
    " a+ c' B! d# I% K) t8 L一、实验目的
    0 }6 l) W: J& Q* `. E  z  Q- D% ?5 ^$ M7 g
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    6 n+ g" k# _* \. K) y' \1 s' ^( V& _0 I/ f# L) I3 I7 [
    二、实验内容
    3 _6 C" |' [# l# I8 h: B" q
    1 q3 w: c8 }$ s, h9 B  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    ; S/ ?& [) u7 Q% ~% `, o  自行选择一组数据,画出基础玫瑰图。' S+ i" X. n/ H! b" @- _
    ; E& ?8 V. F0 r8 R
    三、实验环境
    5 G+ k2 J/ {9 q5 g9 v
    ) e% T. _' [+ q4 J6 y. S  ython 3.8
    ! J1 c2 a: H$ W; b6 {1 Q( C
    $ ]0 X$ D6 t  |4 g! \1 Y$ V四、实验步骤
    7 K, m, @& W. u5 n& V7 W7 Q5 k. o. E) C+ @  e+ y
    查阅文档,了解南丁格尔玫瑰图的原理。' g  x5 _& b% H0 |$ {8 O
    选择一组数据,编写程序画出玫瑰图。
    : j7 e* K) |" I) E2 C  ?五、实验代码及测试2 f1 S% l0 v5 E2 B; u9 b
    3 f2 t% W. z7 D- B
    1.源代码
    # O! J) |  u* ?" u  I4 ~5 k& n1 c3 P
    % I! {+ f! C1 e' Y6 Q/ o* cimport matplotlib.pyplot as plt/ C" G$ H6 x. y8 m* C
    import numpy as np
    # |1 \9 q! S+ O8 d  Uimport xlrd1 \% I3 i" H1 U) q1 \$ i

    # C( D9 D& }8 K7 z7 y+ E$ R'''
    8 o. A# x1 z: ~1 o) y& j& s    按列读取excel文件并存入两个列表
    % k& q9 c2 e" C* b9 ?0 [# U+ Z'''7 R3 @! ^. l- A) }; d0 b
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    $ S1 O% C  ?4 c: btable  = data.sheets()[0]   #通过索引顺序获取工作表% r, x5 a7 y7 A: }6 o, ^! h" V% o
    cols_n = table.ncols
    5 S1 l$ j) d  A- w( B$ {- ^country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名) b2 e' {7 g/ l1 O, k" o8 Q5 E) N
    data_list = table.col_values(1,start_rowx=1)
    2 i- o. K7 ~0 Z" v, S* |; u3 A# print(data_list)
    $ g+ d/ D' Y: Q4 J! B+ B4 m5 E* l% J5 \
    '''" G3 n3 W8 m& ]: c2 Q( N
        计算角度/ o0 c1 c' H- R2 w7 Y" S
    '''
    $ V, U( v( `, Z2 S$ bn = table.nrows-1           #去掉列名
    ; u# b( m- R) u! j8 atheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    6 t5 g8 L5 B5 G2 N, Y6 {, C$ J- a  a1 a, M& d1 G6 Y
    '''
    7 }) X- P" b) g6 q9 P& S    作图6 Y2 h8 E) b. g
    '''& p9 G5 G. P: H9 @# o% f$ {
    # 设置画布
    : d: E9 }; h/ p/ yfig = plt.figure(figsize=(12,10)). J5 h- P9 ?( P' X7 M- V) Y
    # 极坐标
    ( q, `  z) e6 s0 H9 c0 `0 ~ax = plt.subplot(111,projection = 'polar')
    # Y; g3 I$ v) d( V5 _6 [# l# 顺时针并设置N方向为0度
    3 f# H! x6 I( I9 T7 w5 U2 Qax.set_theta_direction(-1)4 b- t- y& e- z! l
    ax.set_theta_zero_location('N') 5 ~% O# E/ S* {. v* ~5 D

      e9 j# Z7 Y: E# 在极坐标中画柱形图, G' H. e& O+ o
    ax.bar(theta,* h( O% A* B5 ?6 ]& |
            data_list,7 D# S4 @, P1 `  K7 a  z
            width = 0.33,
    " K$ m  Y9 v. n7 N( ~5 h4 w        color = np.random.random((len(data_list),3)),
    6 [) s1 R) S  q        # labels=str(country_list),
    " S+ g) l5 d* A- C& b        align = 'edge')
    ) Q7 z3 m! V/ z''' ' \% ~( w" M5 q' {7 }, m' r
        显示一些简单的中文图例$ L' D! L6 p" S5 u: G
    '''
      h! M4 `+ J. v+ A" `( Rplt.rcParams['font.sans-serif']=['SimHei']  # 黑体. @3 W/ Z  h9 o+ ]2 m6 g3 l# l+ \2 e
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})0 A( e( ^' w( \5 ?) Y4 L, Y. y
    for angle,data in zip(theta,data_list):; A( u0 P$ m4 ~
        ax.text(angle+0.03,data+100,str(data)) 7 h) H  l8 N  t5 R$ x% E7 U

    # c( x) V& \$ {+ R" [
    0 B' ?) q) D7 Q7 O% p5 C0 S; wplt.axis('off')
    * z" r, v  I( H& w. J9 R3 Z4 G9 {7 u" R1 R
    plt.savefig('Nightingale_rose.png')
    ; f5 `. l& Z# M& rplt.show()3 m) _# I* {7 k- M8 \

    7 H0 N* ]! Q6 ^- W, Z+ i# ?
    + O% K9 ]. Z( l" E" j* a/ r2.运行结果% Y, R! m6 {; q5 V6 t/ `
    1.png
    7 ?( _! k3 ]6 E( a+ m3 l4 W, G

    / k- F0 F! r/ n9 q+ ?5 `1 Q7 P
    ) h8 ^% [! \1 r: J8 Y, y( W3 f3.excel数据表+ S: R3 e/ y6 N3 T0 f
    2.png
    $ q, N* J/ K9 w: x0 u/ z& R
    , S# H2 N; k4 ^; N7 ^: [
    4.说明9 _* k6 V0 G9 A0 V% q
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    1 b7 v: O! b( V& J9 s. l  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    ( q- w8 [7 \4 ?% s  v————————————————9 X4 f  ^% a* ?# f8 K" x
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  {: y, b* }7 }2 Y4 Y0 O
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    8 K* q" E+ u8 g  `
    # H9 W0 e- ^, R! p* c9 R: J( w- a9 u5 t- F" o4 t' ]5 a
    zan
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2024-3-28 21:08 , Processed in 0.425006 second(s), 54 queries .

    回顶部