QQ登录

只需要一步,快速开始

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

    % E) S# g1 }2 I, j) f1 Ypython+matplotlib绘制南丁格尔玫瑰图% r# S- x8 |8 g2 s
    实验:绘制南丁格尔玫瑰图
    ' B. i2 b0 l8 W; g( c5 `  x. a' y: t  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ ]1 E1 P. [9 ]7 W7 I! U
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    , p; U" @& D1 b1 \( D9 @  c
    & q+ q& f6 I+ q! t文章目录% N* f6 Y( G  P* |1 [

    % j9 h  {6 o4 ?6 g8 {: U一、实验目的
    . ]" @1 T5 C0 v8 C; h9 Z二、实验内容( ?2 t5 o3 `* S# t1 A8 h+ F: D
    三、实验环境
    - R, `* {. @+ K; T* n/ c四、实验步骤
    8 V4 f4 _( H$ r$ l, r  U' s五、实验代码及测试
    7 w; p3 e2 z3 q0 p1 v1.源代码
    2 g% t. f1 a/ ?2 V  `7 Q2.运行结果
    ( P- `# f5 v( A) c# w3.excel数据表
      @5 {$ }/ ?' n一、实验目的. R$ d& v, ]( i( j; x* p8 M
    ' k4 D+ y$ f( P) m
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    , C3 `; J1 s' i3 `9 T5 h
    1 N' Z5 H- J$ j+ S$ g二、实验内容5 Y6 F) o! E! N7 w, q
    . j% ]- K! t- u8 k6 }' K3 c
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。1 A" L( t, V1 ?, C
      自行选择一组数据,画出基础玫瑰图。
    . ]$ O! T5 A' f" D
    / e7 r& x6 }3 w三、实验环境- K4 t. |! F7 _7 x
    % i0 B; s8 H2 B8 F: n
      ython 3.8
    2 o# G% \: f% `8 _
    - \7 P: X" B2 N! S/ X四、实验步骤  `" u4 T  r0 b
    ) o# q8 v; x/ \: C9 b3 H* a8 c6 `
    查阅文档,了解南丁格尔玫瑰图的原理。: Y& m1 N6 F# E1 l3 Z7 H* k+ n! i
    选择一组数据,编写程序画出玫瑰图。7 A4 N+ ^2 ^5 Z/ T$ H. \0 b- e
    五、实验代码及测试
      x6 i9 x0 N- w8 q5 o$ F% t9 q
    ( c, M' }5 A' K+ [; X1.源代码; D' e) V4 z4 {9 u
    - x' x9 Z, ]% A8 d
    import matplotlib.pyplot as plt; P9 s3 g2 O3 N. I* F
    import numpy as np3 w0 Q# \: W3 N! F, Q
    import xlrd5 u8 v: T  p, H' c% }5 e  J, A8 ]

    2 D5 A8 g* l& E: C'''" ?& }6 i2 n0 J* N
        按列读取excel文件并存入两个列表
    5 X& p% t# u/ e' O- x# X'''' {2 }" y9 `7 a
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 9 g+ g& |& ?8 f2 g
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    " g8 V: G. u( M+ e  _) ~cols_n = table.ncols * D; n0 H1 N" }$ G$ ^* g9 f9 E
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名2 R( B* G% J, A- ]2 P3 d
    data_list = table.col_values(1,start_rowx=1)
    # B, V6 T" T4 ^8 \% D- V; a# print(data_list)3 ?( }2 k3 s$ w8 K$ o+ }8 {

    1 s' g$ O7 D1 d; I: F'''5 P. K! T: P: b$ P0 o
        计算角度. S5 O! J* n: [
    '''; ~/ e, g9 ^, l! W
    n = table.nrows-1           #去掉列名
    8 b' Z9 \. k( l' {theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份+ K5 ?' n- G5 w) ]$ x7 m, Y) y2 ^
    9 f( N! U, a. _7 N6 A
    '''+ u# y# r2 E3 T' I
        作图
    # y  y& c$ `$ u2 X'''
    - M4 ]9 |9 E# p. A( O) a+ |# 设置画布. o; j* a! i- G3 A4 ~$ L/ P
    fig = plt.figure(figsize=(12,10))
    5 R, P# N  H% I+ |' v+ p# 极坐标
    : F0 v& J. I6 g, H+ `1 ]1 N) m6 {) ]ax = plt.subplot(111,projection = 'polar')
    ( J6 @' ~; E. L- D6 E# y# 顺时针并设置N方向为0度; R% `1 c# Q/ @2 x3 a% W5 t
    ax.set_theta_direction(-1)
    5 o% K$ r7 q. N4 |+ L6 Bax.set_theta_zero_location('N')   e8 f6 J8 k/ X( k0 \6 X1 [$ V9 m
    " Y) u. w" b  z# X" s7 y
    # 在极坐标中画柱形图
    " S0 y! b8 j& V9 c4 g- Gax.bar(theta,/ D5 T' }" I9 d8 u
            data_list,( X. r, {4 i- @6 H, }
            width = 0.33,, h# r: B+ v+ H  U
            color = np.random.random((len(data_list),3)),  Y) y( B0 t% Z8 B& M: D
            # labels=str(country_list), , k- k, R' O; W  ?! U
            align = 'edge')# ]) J. i6 _# k( s7 ^% P7 c1 P- W
    ''' ( M. W1 V* d5 Y& d# O4 c2 e0 U
        显示一些简单的中文图例
    . W3 z8 s$ m$ l5 t3 O'''# U+ j' o% E2 S6 Q
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    ; b2 m- \. P- l$ Oax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    3 B) ^+ F$ k# Hfor angle,data in zip(theta,data_list):6 U5 p7 ?% L0 w: ?* l9 _
        ax.text(angle+0.03,data+100,str(data)) 2 ]. ?( b0 a& T( I( a) K! w, }

    8 s& L: L: n3 k. l
    . ~+ W. U* G5 }  g, Uplt.axis('off'): G3 o* s0 S. R: h4 F5 @
    1 ]: _: p) O/ Q' j6 V0 `  V2 \% T
    plt.savefig('Nightingale_rose.png'); d7 O1 @  K2 Q1 n9 O" u2 w) @
    plt.show()8 |& f+ c3 J4 s) C! n

    3 c6 ~( j7 U' O2 ?
    7 m( c+ `6 ?7 a1 n2.运行结果+ C2 [& R/ d1 x3 x) I  C& C
    1.png
    " r! m+ v* T- p4 v8 _2 {8 T8 _# `* s& R5 p, a1 w: }
    6 E! @( w# {+ p' J& R- y
    3.excel数据表4 g; o4 {( S+ Y& E
    2.png
    " i; p+ w! T9 r, Z$ j, G# _6 S0 e- e' @+ f/ C. l4 v
    4.说明
    + \# K: p- |9 l  S* G& k  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
      b% r( P5 t; [+ S6 A- d  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.. q$ T# Q% Q* f, P3 {2 _, @3 |3 Y; q
    ————————————————
    9 |2 Z: i. k3 U( c$ V; `3 ?- _版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( ]' P! _+ I- F$ H- T% `原文链接:https://blog.csdn.net/weixin_42323041/article/details/1062638528 M5 R$ U- W! Q2 c4 m% t, X
    , e7 I; t& t, M1 l

    ! Z7 ~1 g0 T. S) ~+ A; r
    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 17:55 , Processed in 0.291531 second(s), 56 queries .

    回顶部