QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7846|回复: 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 q$ e9 a' n% D8 h  c" o5 Kpython+matplotlib绘制南丁格尔玫瑰图% P, L  _8 m% |5 b9 n, i4 x
    实验:绘制南丁格尔玫瑰图
    . m. K0 {# ?  n0 q  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~$ Q& |. a7 {; l/ x: @
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.3 W3 Y+ W7 J7 l1 x9 u+ u. B
    5 G/ C6 }2 v' y( d' R
    文章目录
    / `9 @. H- l, |+ P. K" j6 e9 Y% R' k7 R* B1 x
    一、实验目的
    4 \6 g$ ]7 Z" m二、实验内容4 u2 A+ n1 S2 q6 n# R# P
    三、实验环境
    " l# ^& f) [. g7 N: t" s, J4 j四、实验步骤' t5 U& P; e' A. |' a
    五、实验代码及测试" O; o, v$ }. Q
    1.源代码3 S# x  b* ~  @( f4 @1 ~
    2.运行结果, b& w1 h* i% p5 b4 V" o+ t
    3.excel数据表& b4 m! {% H3 d, Y
    一、实验目的
    6 r& @$ f5 I2 S4 i  e/ Z) J: g8 [& l8 {9 K% A* h, `9 I- K
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。: E* e7 s& n* s

    . R- g" S* j6 S# X二、实验内容) u9 R7 \9 _/ R/ o9 A- ]
    ; W- n8 R3 v% S$ D" ~4 W1 Z
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。. Z: j4 A1 I4 j$ {1 @2 W
      自行选择一组数据,画出基础玫瑰图。
    ( K8 Y; [% b7 H3 V( u; |
    ' }, m, L- V, o7 @/ l9 s" ?, _三、实验环境
    9 e6 z: X" \# T5 ^
    9 n1 S* A; i5 }5 h& V) N  ython 3.8
    6 j4 l7 q1 k" k, c2 ?3 Z' x' w( S( D! s
    四、实验步骤# R1 D! Q. [: ?9 @

    $ j7 k! e  X: G0 L- O查阅文档,了解南丁格尔玫瑰图的原理。
    % X( ~' u+ y5 G8 U% e5 L选择一组数据,编写程序画出玫瑰图。
    5 C; p4 K. m  K$ C1 j6 D2 F五、实验代码及测试6 T2 b( K' C: q- C, c# m* h9 _3 c- o* Z

    * o3 |* u2 a/ f& L: u, Q2 a1.源代码
    ) B* q! [) h/ `
    ( G1 x- G+ T* @import matplotlib.pyplot as plt
    + L4 m( Y( A2 |- M; r3 I( t* Zimport numpy as np
    , H4 }0 |3 l4 Vimport xlrd- m/ N) S3 x! K! `3 [0 {

    3 J# C$ Q' _' [* K'''
    6 w" L' _3 g5 y+ x7 l% z; l7 f0 Z    按列读取excel文件并存入两个列表& `5 P( Y6 T5 r. H5 n
    '''
    # c8 q, r" B( c9 u9 E" P& Hdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')   ~) y% g/ \! }) L0 w
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    6 m* A. Y+ C2 _' K9 {# @# }* V% xcols_n = table.ncols . B, u$ u# n1 g
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名3 @+ `  h7 t6 m% m) k
    data_list = table.col_values(1,start_rowx=1)' c7 _( f! o1 \( a; X& P0 y
    # print(data_list), }7 A7 M2 J' m* Z7 k

    ! g( O1 L( \( v# Y+ m+ s* P'''
    $ T, u/ i: L/ V$ q& i) l2 }) n    计算角度4 e; Z: m) m4 o3 W' O
    '''
    # }" ~# a) J/ R* R5 Tn = table.nrows-1           #去掉列名
    * c6 Y0 W+ m: f) {6 ltheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    ) `+ f! k- Q6 Z' A4 M7 `. P* R: S7 X- R& i- m
    '''0 i9 e5 c1 [4 N! c; t; S7 v2 `
        作图
    3 W) V9 w) N( t; G'''
    ) h7 ]4 m$ \( R+ R' ?7 n! _( ^# 设置画布) a, T. v; p" [( ?4 h
    fig = plt.figure(figsize=(12,10))
    2 t2 z% X% I$ x. @$ t$ g# 极坐标
    5 o+ \/ \  e  B1 ?0 D- U- M, Sax = plt.subplot(111,projection = 'polar')0 O3 U( U* ?- @" g( R* K2 A" V
    # 顺时针并设置N方向为0度
    * T$ s# o; C. g6 hax.set_theta_direction(-1)
    % ?8 w3 B! i+ U, N, s% R. fax.set_theta_zero_location('N') 4 }! m" g/ I/ C6 X3 Z
    ; X1 s, {( q6 i+ s& s
    # 在极坐标中画柱形图9 J7 a/ s/ Q1 O2 c! Q- O' ?: u$ V
    ax.bar(theta,
    8 N0 ?4 U5 \5 C  j        data_list,6 I: {6 f. q$ e8 l
            width = 0.33,
    ) e/ B8 I! U! G9 B- P) e" t        color = np.random.random((len(data_list),3)),1 s" w+ K! Q6 O& {5 ]" ]
            # labels=str(country_list), - A: d2 [0 h5 s5 {+ m9 K
            align = 'edge')
    3 Q0 t2 z, U; {1 w/ j'''
    ; j" ~8 X9 B5 m! j' O! z    显示一些简单的中文图例
    % k4 c  h- U3 l' C! h, P'''3 B, a$ I, B$ H: |
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体# z  ?1 \2 t# r: X2 F6 }: _
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20}): u; g' O# |( _
    for angle,data in zip(theta,data_list):
    ; A* ^# V/ e7 x( w9 r    ax.text(angle+0.03,data+100,str(data))
    0 F4 H/ g: a% x2 P* W/ o8 T8 P" v

    ( i5 z$ @; f2 xplt.axis('off')! Z- R  s7 V8 w. C5 @% C
    : e- V1 W3 U% C1 ^# j+ \  `
    plt.savefig('Nightingale_rose.png')# S7 r( }, p' c7 X* B8 [/ M
    plt.show()4 p" n! D, B' x$ X  J

    ' H& J' m' z$ |& r; d- _/ T/ j
    " F" K1 F7 L3 ?" M0 I& ]2.运行结果
    & T) [& {* w5 q! d 1.png
    # C) p7 S8 y% V2 N) N
    4 [9 @6 V( W' D
    & M8 H" h  Z/ [3.excel数据表4 y8 Y$ M0 ~8 ?
    2.png & d) T$ R+ i5 A5 e) C
    # X3 g$ }* X5 e. T' n! P$ }% ^
    4.说明
    ' i! t4 V7 b6 I5 m$ M- E  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠./ p5 a" ^( s0 v( O
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    $ q$ i) {' U9 M" r8 D————————————————4 N  B' Z; Z( O! ]1 `4 k1 I- W0 ?
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# Y* v5 O( e, ~) l) S- h4 d8 m, s
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852" s2 b1 g% k0 ^3 n

    7 z/ J# J, D' }/ N( c7 T; \' O6 F, }; C4 i: B3 W4 w: n
    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-25 05:49 , Processed in 0.563687 second(s), 54 queries .

    回顶部