QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7796|回复: 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
    - U: O- R$ n- Z. }( V5 `3 ~1 x
    python+matplotlib绘制南丁格尔玫瑰图1 [  ~6 `  y, Y0 u
    实验:绘制南丁格尔玫瑰图
    " e9 L% \5 k) Y9 Q% d/ r, f! L  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    " M5 R3 L' ]# g2 h1 |0 A( K  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的./ T* ]8 k9 c* ?" m7 E5 u

    9 [: A+ |6 d- p9 Z$ ]文章目录. D" Z" h# p, }& z

    # f+ p  y8 }0 h9 m8 u2 f一、实验目的
    4 o% N& n2 N0 L! q4 s二、实验内容
    - }2 k; z- |3 f" Y三、实验环境) H6 i- I7 m5 b! x* _2 Y
    四、实验步骤
    + I! o. g* ~' Z+ ?4 K1 _7 i五、实验代码及测试6 K" j& o' |  L6 H" g
    1.源代码
    - d" R. k0 |0 x: p1 r! {2.运行结果- k) P1 m4 I( O
    3.excel数据表
    6 H. L9 E' O& ~  P" S一、实验目的9 D8 P0 F2 n' R. T: T
    ; V4 {# v* j: x8 l2 {0 C
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。) Y+ P' f" C7 U! c6 s

    % ^$ \) Q' M. s5 x+ ]$ x4 Y二、实验内容  G' X' W* X% U8 h
    8 i7 l* H8 q& t
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    ( X9 M) E0 s- |! H2 S  自行选择一组数据,画出基础玫瑰图。
    9 i+ r2 R; H5 r4 T% e) d( t2 f; C9 i( h% e
    三、实验环境, [# g7 |- b' L' Q: S9 r, a- |
    , W& v, D4 v4 O/ E7 h# Z
      ython 3.8, L2 T  ~8 `9 V4 ?

    - N8 I; H- _8 Y/ t8 f. S四、实验步骤
    ) u8 h) ?$ i% r) f4 d! ~  I* ~) q0 n+ P
    查阅文档,了解南丁格尔玫瑰图的原理。6 A! T; |) ^8 N' s1 k' J9 ]
    选择一组数据,编写程序画出玫瑰图。
    7 U9 N+ S' p' k: s五、实验代码及测试$ e" V7 P/ z  V, H$ n

    # X) @8 M. T' s( ?* B. j, `, \+ o8 Z1.源代码
    ) n) H- G( G) r+ C8 q+ H. Y/ t# B) I7 r4 }
    import matplotlib.pyplot as plt
    8 q; S1 b6 q3 [" j. [import numpy as np
    # q: V. p  g  L! r+ y8 V3 Q( Dimport xlrd% W. ~; G" {0 I# p, g
    7 B* n3 i  R) [- Z! Z
    '''
    ( d$ N' w  d( z5 S    按列读取excel文件并存入两个列表$ z7 V3 F- R7 i5 q. |  D' d
    '''
    ; z3 s/ p; Q+ N# n- k+ G. Qdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    1 \3 l' {. P4 _- d, G! O! Ytable  = data.sheets()[0]   #通过索引顺序获取工作表) G  L. _) I# F% O" b1 }2 j7 z
    cols_n = table.ncols
    # j) Q5 }4 D+ d* l; a. Q5 t% ccountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    9 S5 ~( k& v) udata_list = table.col_values(1,start_rowx=1)/ Q$ G0 j- @2 d7 r3 O
    # print(data_list)
    $ g/ F4 T  U0 ~% j3 X5 p6 ~6 p. u8 z+ f" r  d4 c2 m, a
    '''
    " o2 R# g2 ^4 a    计算角度
    ' J1 o. x! p9 A  Y+ u'''. Q& e+ e( _6 [, k) U
    n = table.nrows-1           #去掉列名
    ( j& t+ c5 m: m$ w6 N  t8 Otheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    4 u% l# M/ J: ~: `
    2 V4 T0 F+ B+ w( H9 H+ h- b. W& G5 i'''% G7 I) t+ _6 ^: }! \% M
        作图
    7 f. Q5 y- c- `  [) u8 E'''
    - S+ s+ n. \. t# 设置画布$ t3 y3 O1 N% }9 i: D4 I5 H
    fig = plt.figure(figsize=(12,10)); W* _' S) ?& O" e
    # 极坐标5 ~* p* W+ @9 d9 [; A4 z) `5 S
    ax = plt.subplot(111,projection = 'polar')
    ) a; ~3 U6 J& E- @) {7 R. |# 顺时针并设置N方向为0度
    4 j# |& E  @  W4 }ax.set_theta_direction(-1); D! G8 p$ i2 q2 N" Q
    ax.set_theta_zero_location('N') " ?5 D' {$ Q1 G5 S7 s0 J* w

    4 d, w9 l9 J5 E# D. t. K# Z% k2 e# 在极坐标中画柱形图
    5 S6 M8 Y, ?6 W9 Vax.bar(theta,
    " I' m/ X( r/ ?: h( j1 t4 \        data_list,
    + l6 }5 l+ S7 c: H% G' j) p        width = 0.33,  x0 U' N1 R' y% U8 O5 @' a; B
            color = np.random.random((len(data_list),3)),
    0 k, b2 X6 E& z: Z        # labels=str(country_list),
    $ S* \: S3 ]$ d9 J  l        align = 'edge')+ B( h- e4 ~7 z7 f
    ''' . `( M9 Z" @5 Q* A. }
        显示一些简单的中文图例) E  @( ~; Z! H2 y6 ]! r
    '''' [' m& D- [  Y& t% A
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    1 z$ F: [5 a( l' c( m$ f& K# Tax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    + C# e* [9 Q. @+ O6 nfor angle,data in zip(theta,data_list):
    # H9 l7 I% S1 L( P0 |    ax.text(angle+0.03,data+100,str(data))
    9 G# A' F# u( G. F  o7 t5 L9 {) d: T# W2 S( A' b) m# |3 p* o

    + [( _- p- ^8 Y6 m, Splt.axis('off')- D& }8 f; N; \/ q5 @
    3 t) N8 I* i3 `. j
    plt.savefig('Nightingale_rose.png')
    # G8 b4 x; c% g, ~4 p4 w+ n7 w- i( }plt.show()$ v  k/ \# T: L

    $ a5 ^( J# y0 b( A- g1 ]5 F( K  L: T9 t: i; e
    2.运行结果
    3 z! ?) b! K) K3 j- n6 z" C8 a- V 1.png
    % i, m9 Z8 a% c2 c( N' N. h
    : }! p' y( p; P6 v' l! I% ^
    ( L  s6 }6 z0 G; f. o" L$ u* Y6 h3.excel数据表6 @$ Z# k% l1 k8 @% K9 W" R: Y: W- l
    2.png
    - O( F, Q" M" V9 L( B7 O- v; h) b
    4 n+ i3 e7 z% C: a# r4 P# n4.说明/ S  F3 v) c/ k: b8 l+ `, ^
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    ' z3 C$ o+ ]7 I; `0 Z  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    5 P8 D: [1 {) i1 |————————————————
    & S3 K, s) X% r# p( u) ]版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: x) m0 J1 `* g8 x" J
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852# l- Y3 B7 P# a( a1 s: N
    6 x2 Z& Y6 j( O- D4 d. d' T( I

    2 L! y, R. B! Z
    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-6-8 21:17 , Processed in 0.470170 second(s), 54 queries .

    回顶部