QQ登录

只需要一步,快速开始

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

    : s6 |8 `$ }1 X7 {python+matplotlib绘制南丁格尔玫瑰图2 i$ |0 Z* A+ b6 ~7 z  O
    实验:绘制南丁格尔玫瑰图
    2 j$ |* v3 d7 O( ~* N& h( f  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    ( X1 x3 R+ [  {: ~! a4 U  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    ; L' l1 v- A1 H. T' X" b/ p7 r
    " a3 }+ E+ m2 J( }! G0 }- s6 L/ p3 |文章目录
    : Q- y% ]! H* m* C( P; d5 U- t- |9 C( N; _6 a
    一、实验目的, C! m8 Q  Z  n1 L5 O
    二、实验内容
    1 @# C( d3 G- O: p三、实验环境
    # N3 T6 s* _* B& N( \5 k四、实验步骤1 N$ Q" h! q  Y9 H5 s( c" O, J9 q
    五、实验代码及测试
    0 s$ }! p; w- r: E' k# H  F1.源代码  W: z' W6 Z* {7 v
    2.运行结果
    ) k+ x- ^, I; Z' e5 w2 H: ^; s3.excel数据表
    * t$ ~9 F/ ?4 b' b' W" Y一、实验目的
    9 G  V$ Y- T$ R
    : K' W, v$ Y0 `8 J; n5 b  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。2 P- M, K+ W( `4 q, M% d

    6 N& s- g# {6 u7 n' D" ]  R二、实验内容8 x* H5 v: J3 k- Z+ E8 F  b
    9 c" G* B9 q+ L3 Z& g. t! e
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。: a8 ~- S- v; q  q
      自行选择一组数据,画出基础玫瑰图。
    ! Q& n. l0 B6 P4 q. J
    # r3 O2 u0 ?4 G% a) a三、实验环境
    ( k, D+ `( r" u5 e$ F. V: a+ A; |4 S5 h' S
      ython 3.8
    6 E& X) L0 I- j& i' _+ `# @) z6 j
    2 b$ @* K$ l5 y9 A6 y- W四、实验步骤
    6 ^' W( I- v5 Z2 k! y6 T: ?/ @- d, d  ]( K4 ]0 Y
    查阅文档,了解南丁格尔玫瑰图的原理。1 @+ X: U; }+ ~1 N8 ]; v2 t( p, u
    选择一组数据,编写程序画出玫瑰图。0 w3 [/ U4 n  y  _  F
    五、实验代码及测试/ w% C0 b" l8 f1 ]

    & D6 J4 `$ I4 r0 `# X# X1.源代码1 J3 ^2 ]$ t, z$ E: y$ ]4 a

    2 R: a6 _2 F4 K, C* U+ {5 timport matplotlib.pyplot as plt! @! F5 Z$ m( A: _$ q3 n
    import numpy as np
    ! V3 }( U* {  v2 _  G' u4 X* fimport xlrd9 P! Z4 d- |* m5 F9 D7 g* m

    ) c. M, l; M3 n7 N'''
    2 p  G" |. ^8 p    按列读取excel文件并存入两个列表
    & I$ V" a# h" f/ f4 i( n' B'''& @1 o, O- ^( O. J$ s  Y
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    $ _6 e" o) w; |0 H$ xtable  = data.sheets()[0]   #通过索引顺序获取工作表* g1 }' q0 \0 p1 Q3 u
    cols_n = table.ncols
    " e% l' M7 E( `! S, l( A' l$ \* @country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名7 y( N& T) \; C4 n; Y* D! g4 m% b" _0 q. L
    data_list = table.col_values(1,start_rowx=1)0 q' ]8 T8 f: h4 E1 u$ {4 ~) c  x: o
    # print(data_list)" U& t$ e+ }* m9 b9 W& t5 h
    * s+ j8 S  c) x1 {0 P7 a5 V
    '''
    / o0 d4 \  V# _( j    计算角度
    - I" {$ G2 K- L9 |4 i' ?2 m/ X'''! G  U7 d/ O* I8 |, k/ `. T( |8 [# G2 P
    n = table.nrows-1           #去掉列名
    # @5 D6 {! j  b% R0 e) m4 @4 g( Wtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    ( D: w: |, a3 r. p- Z7 f
    & j( x' _' i! H. Y' q% J''', X( r7 R( v6 B+ I" I+ |8 V* q
        作图$ U. F& d, ?$ r
    '''( j- s- h0 M% P0 z) Z4 B' G5 u
    # 设置画布1 v  [& N: A' d1 u4 w
    fig = plt.figure(figsize=(12,10))
    & |( s% ~& J2 O, o  n# 极坐标! y! r* z  [+ F9 T' d5 ~6 P
    ax = plt.subplot(111,projection = 'polar')7 C) C8 ~; Q! s  `6 \: l
    # 顺时针并设置N方向为0度
    , e3 L" t; }6 Cax.set_theta_direction(-1)) q  I4 _: W6 t
    ax.set_theta_zero_location('N') ) ]  B% t9 ]  m$ B5 Z

      F* t, a, i1 W% H5 Y3 ~: b2 i# 在极坐标中画柱形图5 r# d1 O! X: E6 O, O2 f1 I
    ax.bar(theta,' z9 p4 I4 u4 N( Z) r
            data_list,
    5 c# L+ A! p7 Q% J. c" ^        width = 0.33,
    ; t6 L2 i9 b5 E/ K$ d# k3 u1 t        color = np.random.random((len(data_list),3)),/ Q* B! |  Y0 O& J  y; [; h+ K
            # labels=str(country_list),   }8 c' y8 r: P% U9 I
            align = 'edge')
    ; U+ J' W7 d9 Q6 |- Q  G'''
    . I- M8 t8 z$ G    显示一些简单的中文图例" p' e& e: B2 L* C/ q
    '''
    & |! V9 ?# D' o( J5 qplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    : r& T8 f' ~, G) t0 @" dax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    + v- {9 T6 ?; D& R) z$ T8 r4 ofor angle,data in zip(theta,data_list):9 G' K7 m& ~- u( l; @1 b  F  c
        ax.text(angle+0.03,data+100,str(data))
    7 c) Y; G; P1 H: x6 b/ w
    $ A! v$ }2 ^" r/ x0 y- K) W0 _
    ! p8 I2 }2 H8 Lplt.axis('off')- q6 M. r! J* G  J* R
    7 a1 U2 n9 n! [3 H: R( g
    plt.savefig('Nightingale_rose.png')
    / g5 o: P1 K9 C4 u! Yplt.show()
    + X5 o+ L7 W9 S/ H3 L5 q; ~
    ' v! d8 H) ?/ ?% d
    . [& \" T! {9 p: D+ D$ \- R3 h' N2.运行结果% M0 m5 d$ |8 P: F, E5 e( Y$ A$ y+ U
    1.png
    3 w  |' x$ E8 n; [8 Z/ L  M
      {& S! F# V( e; z* P6 g. c5 X8 ^: M, k) l
    3.excel数据表
      {0 @' u! A* O5 x 2.png
    5 w* d' @( }$ v& {
    ! y: i" W! ?$ b4.说明
    & E* x! _- [7 N4 K9 X" `# o* ]9 h  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    1 d2 Z. G& X1 V- u2 O8 G  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
      y. O; r! z6 A1 z1 M————————————————- X6 F. i; m7 O4 t4 _  {/ e( Y
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    5 e- T) a8 Y- R8 k& S. M原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    - e" K- v+ c4 Z, }% V- {: Z
    " H- P9 R; T; ~) N; I4 `+ l' q
    5 B9 y) J. r" Q+ _' [# x, i2 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-9-22 14:24 , Processed in 0.663745 second(s), 54 queries .

    回顶部