QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7737|回复: 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
    2 Q+ W9 w, f* m2 E& K) J. E* }
    python+matplotlib绘制南丁格尔玫瑰图5 L  b8 n0 P: D/ F9 j; u
    实验:绘制南丁格尔玫瑰图) @  [* |+ n( _! a) Y8 `, f
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~1 E' `" _% c- s5 ?
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    7 J0 a) }% p8 V. C( l8 |4 T4 c5 j% ?  ^- h( ~. ?; w
    文章目录
    5 Y' p, i. r  A7 M9 |
    9 ^9 f8 j7 _7 Z; ?一、实验目的
    7 Q! l5 V0 R1 a4 y二、实验内容
    1 X9 d& ~3 g. I5 {' {6 l三、实验环境
    7 P2 C' {! ?: L( ?- G2 \; i" w3 P5 r. m四、实验步骤
    9 ~- q0 t& Q+ U/ Y9 Z  U. c/ g五、实验代码及测试& F' J0 X" ^: f1 M7 M
    1.源代码
    : E: b1 Z" P8 A, K& d  a! X* o2.运行结果& h5 ~$ a& E6 K. Q" \# \  h
    3.excel数据表
    & o) D* v3 _9 W+ Q3 \: g1 X8 Y! h6 ?$ @一、实验目的
    + Y) y( |$ i% }& i' J6 G( w0 j' P: ]+ B' d( s" t6 P; {
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。2 P9 j! S# A( I! ]6 y* U
    & p6 H' a) ~- K) ~
    二、实验内容
    0 ~  _5 X8 g6 V7 w, x  y
    " a3 O5 R, K( ]) G3 x  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。: z+ c) J- L- n. L% Q6 E
      自行选择一组数据,画出基础玫瑰图。
    " S! e: t- w& A! x+ q% k% c7 ]* y% u  c& V. c) t
    三、实验环境9 O4 f5 t  ^. y6 j( Z( @
    ; I* g; w( s+ b6 Q
      ython 3.8
    5 t' v/ s9 e* z; i+ j& j- d
    , u, u9 J' a" A7 q" U0 Q四、实验步骤5 s& K* i0 r* n2 y* g& K1 w' w
    # e% a  u9 t" h
    查阅文档,了解南丁格尔玫瑰图的原理。
    . H$ ~4 J9 P: \/ M$ T# x) |选择一组数据,编写程序画出玫瑰图。1 \0 [& w" b" b7 _0 \: h
    五、实验代码及测试
    7 g1 |$ R) }( I/ p2 L+ X
    : H, t: O$ U3 B1.源代码2 H% O* A) p) L) |
    / b/ S2 V- P6 E- F/ C: _
    import matplotlib.pyplot as plt
    ! U$ ?2 O  g& J( eimport numpy as np
    . N2 ?6 z. n2 _) _. m: J, Aimport xlrd5 z0 ^4 N/ V. I6 _2 K* d9 m4 d
    6 E. V( z- L: e5 m
    '''4 |! V4 n3 N/ S4 B. h1 _# B
        按列读取excel文件并存入两个列表
    & S/ G5 L; G, |) X8 y- `1 y) g'''
    . l1 Y6 `- A6 }: U0 A, Hdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    1 d: d9 [# h1 z7 p  stable  = data.sheets()[0]   #通过索引顺序获取工作表) V+ _7 o. C8 ?+ E1 I
    cols_n = table.ncols 2 a6 y  [& P6 S, Z& }* H; ~
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名3 Z+ `  \! K; H+ m6 p, C  `
    data_list = table.col_values(1,start_rowx=1)
    % }# Q' H' _0 c* }" k' ~# print(data_list)
    ( a* S4 v$ \+ J* C; L% n0 B7 a0 g
    '''8 N& \6 k3 p# p/ E* M
        计算角度( d( I5 T# C# M- c$ ^
    '''
    ) Y1 j4 D6 t. f( L( bn = table.nrows-1           #去掉列名7 g6 a$ `/ y- S
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    9 J9 m& C' _7 o* y' z' w: \  |: L% _9 ]; Z3 B& r, z: C
    '''! ]# R2 E( u' ?0 g4 Z. S7 T
        作图8 k; O7 v2 J. `6 Y$ i% ^
    '''$ r1 ?. {+ r7 n: f# G9 P: J
    # 设置画布* ?/ y5 _# d7 S9 l4 o9 t
    fig = plt.figure(figsize=(12,10))
    7 f# F5 `# `6 H# ^# 极坐标9 c6 {" o, i6 d# @5 z3 _3 ^
    ax = plt.subplot(111,projection = 'polar')+ _) @' P, y4 G+ n, ?
    # 顺时针并设置N方向为0度
    $ l" m0 W3 j& b4 `( R5 j  d' Pax.set_theta_direction(-1): H8 k3 o  v) _) F" T
    ax.set_theta_zero_location('N')
    ' d3 S& c$ A: ?; L: N  `
    6 U6 ~, s: m2 h8 ?6 @8 ?8 w# 在极坐标中画柱形图
    $ P8 B) `3 \( {7 B; T# Tax.bar(theta,
    1 L1 p- k! G/ a( ^7 C4 @" n* B        data_list,* {' U% [! D, m) T  x1 N& k0 ?
            width = 0.33,
    * B2 E# K( `& `        color = np.random.random((len(data_list),3)),
    5 f' ~8 S* I/ L9 G5 |        # labels=str(country_list), 6 z% c% w6 G6 p
            align = 'edge')) p; @$ J; i1 t
    ''' : s9 B" b8 {; U! \8 A: f
        显示一些简单的中文图例1 |: N5 ^( \  @2 L3 @# L
    '''6 i6 S2 w& Z. {7 W5 I. ^0 N
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体/ G6 Q- Z% P0 y  Z1 Q
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    % T( g. A( V+ j5 j1 k3 Afor angle,data in zip(theta,data_list):# G  v7 `( w& Y: ~5 X
        ax.text(angle+0.03,data+100,str(data)) % b& U# @2 u% }: }
    ' t# H/ ^) m) x9 }; h: A7 \
    5 r5 h; P' N# ~- l4 _0 M
    plt.axis('off')- N- f3 g. \8 ~8 @0 n
    % x; }  c. a- P- ]6 L& y
    plt.savefig('Nightingale_rose.png')
    # J$ J: Y) G. J+ jplt.show()+ O! j5 @/ @; n' g. R+ S" R* J
    , C( M6 I1 G# z/ h8 N0 f. a6 a

    0 {3 ]: p$ ]( j: B2.运行结果2 j* W3 C; h6 q6 r9 ^
    1.png * b" p* }- |  i
    3 h0 c; B; h6 j3 n, S& |

      R2 R+ J: X1 k: `3.excel数据表9 O+ E" a- T3 G
    2.png
    & r! c1 {* [: N
    - q' X) n. G0 S" }' R# y! c2 d4.说明7 Z9 _3 Y5 i8 \6 y- n
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.5 Y, |' j2 T( r4 `, ]% o9 M
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    7 K% F( i# P/ ^) s5 j; g3 x$ W————————————————
    4 D3 {1 O9 n) X$ l/ t: [版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 k7 o: i7 D+ h$ H& ~, V" g1 p: C
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    " ~# D0 m/ \% I5 Y! e; T% N$ P& o" k- v/ @6 L4 b

    ; \+ b$ E  W: U: T+ 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-4-19 22:04 , Processed in 0.447260 second(s), 54 queries .

    回顶部