QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7933|回复: 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
    4 g) _& Y, r! b! P# z" k
    python+matplotlib绘制南丁格尔玫瑰图
    5 H9 m( H/ h0 b5 o" u; P1 J实验:绘制南丁格尔玫瑰图2 C6 E2 Y4 s9 \3 W7 X% n
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~  f9 A0 `! I( g; W# p
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.- @8 s) Z1 E5 v# n) X
    : n$ f8 ]% k( g* B
    文章目录
    & C/ L1 ~8 \( i
    8 W0 ~; X" C9 S0 T2 A6 {% V5 U一、实验目的, J5 a# I: B7 l/ }! d1 `
    二、实验内容
    , W- j1 Y3 H5 A" X三、实验环境2 ]! C' j; |3 R: d% j5 J
    四、实验步骤' \) H% o- u. u
    五、实验代码及测试
    6 V+ j: G" r( ~* f1.源代码
    5 p) @  i/ t! I2.运行结果, J# i4 T0 ], G9 w
    3.excel数据表
    ) s; W6 }5 i" p一、实验目的
    ) h1 x6 l2 f0 x# ~1 V8 p
    0 Y$ f' d: M6 Y* o" @  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。; T) L; q/ N7 @3 F0 ~

    6 ]6 v$ ]0 ?: i8 m二、实验内容1 A, B$ Y# v' R4 D

    1 v5 b3 c* h- p9 y  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。* e4 p9 |& |/ u  |8 |7 V
      自行选择一组数据,画出基础玫瑰图。
    5 V3 {# R, V7 u  K$ Y, \# l  U
    / ~4 j- [: D" y* a8 J0 k三、实验环境0 h+ }3 m0 a8 q) R
    5 [, }% L7 V6 U( V" m
      ython 3.8
    ( ^5 d( D: Q% V% w9 u' b8 J1 q3 q6 F( ^
    四、实验步骤4 u, u( T" H7 x+ E- ]1 p
    & R1 l. D2 ~" a
    查阅文档,了解南丁格尔玫瑰图的原理。
    % F+ L$ Z8 u# Q. H选择一组数据,编写程序画出玫瑰图。
    / x7 k: C8 x7 R: U6 i1 J8 D五、实验代码及测试
    9 M/ f8 ~0 e+ [' y& |/ }! p6 Y
    7 ?2 j$ }& `3 J6 r% e9 {' G( m5 H1.源代码! R; i5 J* S7 Y0 h! r) q

    % z  N: }5 M2 v, q4 fimport matplotlib.pyplot as plt
    * D( n( A( E8 k3 J) M- o" simport numpy as np
    # g) f9 S/ _/ Nimport xlrd) _# X& q/ _1 X  x# D5 ^

    - ]; b7 I$ z) b  c9 k% w6 D8 X'''/ L1 S* _* f5 ~, K6 A" q
        按列读取excel文件并存入两个列表
    , R5 N" P$ T- J6 Y9 i'''
    0 T: k! \, L- t7 F& jdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') , L8 \9 B8 ?; Y4 |$ A3 y) T
    table  = data.sheets()[0]   #通过索引顺序获取工作表5 t; B; W) C; a
    cols_n = table.ncols
    $ y/ X% p: ^. {# @1 tcountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名2 g+ V% v5 d, {& T" K2 w4 P2 {
    data_list = table.col_values(1,start_rowx=1)$ I  n8 ]. V) \- Z+ e7 v" p* }
    # print(data_list)  D5 Q% Q( y* @' j$ G, G
    + Q) H& T+ s. N# }
    '''2 l& T0 T5 F# y8 O
        计算角度8 ~6 A5 @2 L4 r) a
    '''
    2 [: Q  R2 z) P9 an = table.nrows-1           #去掉列名
    2 Q9 Z7 i4 y8 I+ Qtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    6 |7 O* J. X$ K0 `1 f! b9 C9 A) o2 K$ j( X% Q
    '''
    & ?6 p: s) \' s( q    作图8 A) U% Z! ]" e9 L! Q  K  K3 D
    '''$ G  C4 X% q7 L/ ^# ]& R- E( `' l
    # 设置画布
    + ?! A! l1 I; M# ifig = plt.figure(figsize=(12,10))
    / ]% h  t  a; F+ X' X# 极坐标- N: H4 S4 o: Z: z( B
    ax = plt.subplot(111,projection = 'polar')1 @2 U2 b  O/ K8 c5 C" c' T2 Y
    # 顺时针并设置N方向为0度* i6 l& U) M5 z1 O3 D
    ax.set_theta_direction(-1)6 G% e3 T' P$ x1 V' ]% B
    ax.set_theta_zero_location('N')
    0 }( c  w' ]' Z9 [5 {6 J. `: h
    . C! B) I1 |8 x  v# }, d+ J# 在极坐标中画柱形图. l' H# {$ m9 P% j8 F  A# h
    ax.bar(theta,
    5 F/ f7 ^) o! I- `        data_list,
    " t1 d8 i1 J3 i        width = 0.33,! D0 h  B5 ]6 H0 `
            color = np.random.random((len(data_list),3)),
    0 O+ O+ v3 b+ @) x1 D% j        # labels=str(country_list), * e8 W: ~% J' d' P
            align = 'edge')5 E/ v/ F& Q9 p: e: [/ K, Y
    '''
    , F: K) q: _( Q: f7 M    显示一些简单的中文图例2 |5 h' C& Z; m7 o2 I
    '''
    5 T. L0 N; a9 ?. }plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    . b2 [+ q. }1 H# [- U2 f5 {; Q* ]ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    4 r7 x- i" o. B! ~, efor angle,data in zip(theta,data_list):# J; S$ B* u. ]* h
        ax.text(angle+0.03,data+100,str(data)) $ C- [4 A' \! k

    ' a  h: `1 S. a0 e. @2 y/ Q# \" l8 [! a7 M# Z
    plt.axis('off'). z4 K; O5 x% l+ X

    / j# S! [! {7 ]plt.savefig('Nightingale_rose.png')% ^4 v  _! M+ g. I! O; _' D/ e& c
    plt.show()
    $ X* B/ ^$ `! R6 J& X5 F) d' Q4 @
    % a5 ^9 [0 r0 X2 S; x' J- P' j  I, B
    2.运行结果
    * ~% _; k% ?1 ]8 X 1.png
    6 u1 y' K& @5 r1 ~0 \" p; @9 a7 y, p! t0 \$ W% D7 L' p( O
    4 u% ?  n8 |, }( Y
    3.excel数据表  V3 X& `6 ]- a! `  r
    2.png
    * V0 b+ t& I. w. u8 C0 r; ^$ J: T
    ' u3 g* F- t2 N7 u7 Y4.说明, l* J  G' ^  V( x& \  s
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    # R6 {6 D2 p- N  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    1 E* L& N) n) ?' R————————————————- T2 U' t8 R5 L; g
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( o" c, r) s% O+ I  T, \8 [原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852* k: i$ m; a( V4 |1 z7 M
    # q0 G) _" [4 k5 U
    : q* Y# k! @5 X! Q; _$ \
    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 13:58 , Processed in 0.421113 second(s), 54 queries .

    回顶部