QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7848|回复: 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

    ) `9 u. y' T9 Z. Spython+matplotlib绘制南丁格尔玫瑰图
    & b' V  V+ _' S: i5 `实验:绘制南丁格尔玫瑰图1 H! N, r# w* Z* a* L& j
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~/ M7 ~+ Q* p6 j: F
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    7 u6 E% {) P5 [! w' p8 ~( B0 b* z
    : n" x- c& z1 g' o+ R文章目录( w  [4 |/ K5 m" k; T& |; L4 a! b0 V

    , g5 ^& Y' s) o# z- P7 [0 P3 ?1 e' j一、实验目的
    . L: q0 @0 a% A& q% K% m二、实验内容
    2 W  \3 K$ g' q9 c% k三、实验环境( s; H6 G6 |) h' i: u
    四、实验步骤+ ~0 y' r4 [& n: p1 y
    五、实验代码及测试
    ' L% i& ^' V- \" v7 x) {. W4 ]1.源代码
    8 Q- _" X# s7 K. a. B2.运行结果! a) d. s7 M/ _/ N: l& K. b
    3.excel数据表8 P3 K! ]+ w  A7 }, A  f+ [- s
    一、实验目的  Q% c, r+ d* F7 j3 i

    % W6 q; }# K# p0 h8 Y  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    6 O0 t& ]) v! C- Q) `
    7 Z- s; k" H* R4 `3 E" r二、实验内容
    7 [5 e9 |% H# ]5 l0 {! D& b/ L# l; J4 e
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。/ @7 U% l- O& T' F, F) [% f
      自行选择一组数据,画出基础玫瑰图。
    % r: _" _0 [; ^) w% i. b2 h' C3 h: R- ?8 R, ^
    三、实验环境9 Y3 `  s& W4 g9 {3 V* N; p* p( h
    & M. ]3 A. d! f" O, \  k5 t
      ython 3.8
    . |! ^& Q- C: Y! s7 e! h7 X9 Z; X# C  |  @5 ?6 u1 ?0 o
    四、实验步骤4 r- a7 k) h5 w: T! m
    : v& C- O, G$ C- ^& a4 s# U
    查阅文档,了解南丁格尔玫瑰图的原理。
    , S  H2 C+ X  \. M& [" w2 q! X选择一组数据,编写程序画出玫瑰图。, a& S: t* Q  y) n' o
    五、实验代码及测试
    ) Z- F0 u( }' m( ~& u2 T' N' f/ C" D9 l  P: M! d$ _5 U
    1.源代码
    + C- E1 }9 B0 `+ T+ g* X
    # ^8 d/ A: R; C8 Y! W7 Z. `import matplotlib.pyplot as plt7 O( G8 q# x  F& G
    import numpy as np
    * |- y! D4 ^2 ]+ z/ V+ uimport xlrd. w" Y+ p7 L; W% t) N: R9 Q
    4 ^, j8 }9 }4 k+ ~
    '''- u  w- l' c) L0 ]' B: J
        按列读取excel文件并存入两个列表8 k1 i6 \( I% C5 p: y) ?: X: ^
    '''
    : M% X$ M* }$ ]( Rdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 0 l* N1 H9 O% ?
    table  = data.sheets()[0]   #通过索引顺序获取工作表+ c1 G0 @) H$ p4 p; @" x
    cols_n = table.ncols $ ?' r' U" C. {6 N# u$ m
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名2 A" D) _2 \( }5 O! T, m7 j
    data_list = table.col_values(1,start_rowx=1)  H. [: \. y" U) r1 _$ J* k
    # print(data_list)
    : A+ T5 O1 r) F9 d! M- y6 T: C! m! K% {* a, U+ ~( \7 G$ A9 w) f% j
    '''( T* i4 M. K0 U) c" D5 g' V/ y% T
        计算角度- H- y* v: |  B1 d0 W1 b( I0 `. n
    '''
    % d; N! C% Z) W+ p" bn = table.nrows-1           #去掉列名
    " i; ^# r( I. s! I% [/ v9 m  Mtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份  S- W) f( ?; ?  Y. \- ~9 g: b$ Q+ ^
    ! Z2 ], J- K% E7 r+ G9 D
    '''
    4 u' c$ v. X& P! U5 i    作图
    " I& ]" s' m. ]* P'''3 X" v- T& h  ?% e$ d4 p% v$ p
    # 设置画布$ r5 I9 A2 Q: i9 Z
    fig = plt.figure(figsize=(12,10))
    4 G8 t0 y. W4 l; @# 极坐标) S# r( U# m+ S, e
    ax = plt.subplot(111,projection = 'polar'). a/ V2 z/ J0 g+ R! S" l- k0 m6 X
    # 顺时针并设置N方向为0度
    - S& P6 ~2 g' E( q* B$ ~ax.set_theta_direction(-1)- n# X3 f8 _, z7 S" D
    ax.set_theta_zero_location('N')
    - G; `8 d( M: F5 K2 V5 z* {" ~9 d; m3 G3 Y3 O) e0 K
    # 在极坐标中画柱形图" r: r  g  h5 x$ X1 E$ n: D
    ax.bar(theta,1 q- H! J7 W( R9 `) @
            data_list,' Z% L6 v" Y2 `# A2 B  J- n2 v1 a
            width = 0.33,
      G% i: l% i4 ~0 p/ G  r6 }2 w& X9 o        color = np.random.random((len(data_list),3)),  P$ X# U% P; L) }
            # labels=str(country_list),
    ! {* Y9 C4 [8 j. ?+ @5 B8 k        align = 'edge')
    % h0 M# z. K+ V'''
    / v* ^/ n8 V7 d  J    显示一些简单的中文图例( I- d8 L" X5 k
    '''
    0 b4 }. e, x+ [. V/ aplt.rcParams['font.sans-serif']=['SimHei']  # 黑体" b3 v: M$ n, P1 t4 N0 g! m) o
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    2 y, A1 ?* S0 h0 Vfor angle,data in zip(theta,data_list):
    $ l+ H1 l4 X2 _, D0 a    ax.text(angle+0.03,data+100,str(data)) ) m# F- o2 f4 y/ X
    " t8 _$ _, I8 H$ t

    , H( |+ z8 r5 J6 }8 h! G0 [plt.axis('off')
    , |' v: B0 ?1 W3 _% Z# F7 Z6 w* j7 D# g
    plt.savefig('Nightingale_rose.png')
    4 T3 U& M8 U2 C9 F$ j( d; l8 aplt.show()% w# j7 }3 Z! C; B
    - ?( b- ^7 K' O5 `6 A

    1 i: G5 a( Q" l- P0 s* m2.运行结果
    3 l* I# [  y; [ 1.png " I' c- U: W( b
    9 \* M- T: B& N6 ?- U  D
    ( I0 B! M& z" W( m; T" E
    3.excel数据表
    ( n! @1 ^4 q5 i 2.png 2 I) j! p$ O+ D2 }" y

    ( F8 P* c' V9 U& R6 {, B4.说明
    2 i8 I: V# ^: `9 u8 ?  _* ~( p$ d  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.# R; \  E1 W+ Z+ {! \3 H1 r
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.+ n0 f( s5 }. P
    ————————————————
    # K, E9 f6 r9 c* x版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 \! \7 F; w& }1 T
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    # ^) ~5 V$ ?# c2 r- Y8 c
    + S) x4 r% V7 F, t7 e5 z3 z; V! F0 K" ~5 J+ i; q9 A. w( t
    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-27 00:36 , Processed in 0.687843 second(s), 53 queries .

    回顶部