QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7925|回复: 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. O8 {$ {. q! _$ ]6 q
    python+matplotlib绘制南丁格尔玫瑰图
    6 B+ x1 }% n; Y; p6 Y( ]- r) F实验:绘制南丁格尔玫瑰图
    ( L# C  P% A* H( V) w$ l  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    # e8 a" C' X! Z  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的./ K6 o0 R& P) J

      z, F. E2 Z; S文章目录
    ( \6 U1 H2 |0 z- N0 \6 D. R. P- i' @6 v! H5 ?6 w1 e8 j, b$ d0 Q
    一、实验目的5 J/ |9 y: J& r  D# p
    二、实验内容8 }0 N, z0 m* Q8 N# O; H0 l/ {! R
    三、实验环境; f+ k5 P. W* M: w
    四、实验步骤8 B& X2 C8 f* B; h" S( B/ ^
    五、实验代码及测试
    0 J4 B4 I5 ]$ [7 o  m2 o7 [1.源代码6 r' e9 n5 E8 _9 s+ r
    2.运行结果
    % T( I- ^( e& W+ t! _, W: ?3.excel数据表: n( s# D( l- i" f( V3 i$ c* D( s4 L! ?
    一、实验目的6 C' ?; m; q1 r: I- [/ E3 B# v

    ) M- W. _6 U. o  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    $ k6 i' O2 ?6 Y  k) u) ~3 p7 k
    8 [5 K' P7 l9 v& f* Y+ z5 W# j二、实验内容
    . u$ @* P( e7 l; u( X' S8 R7 ~# O5 e$ |
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    * S" y, Q0 ^( u: V1 P) m8 D: T  自行选择一组数据,画出基础玫瑰图。
    2 w% S1 O5 t' {9 Z' S# u+ x; J# S+ `" Q  B+ B, A2 u
    三、实验环境' X0 ~0 U% E" k. `

    ) P2 N9 G5 I: b1 p4 \0 y3 ]  ython 3.8% c, Y/ V; W/ n7 ]

    . k! i' q/ ]6 |" Q% w% D% p四、实验步骤
    # z$ W/ K9 c; x# g0 o2 C  r0 b' O! v- X1 g$ d
    查阅文档,了解南丁格尔玫瑰图的原理。
    , o$ B6 K( a( \( T2 k. [6 d选择一组数据,编写程序画出玫瑰图。
    . f! F! X2 \& d0 S2 e' E五、实验代码及测试
    , ?4 |" B" k/ i1 h" |2 j2 B4 F$ T1 x3 R: v; x( K3 y- s0 T; u
    1.源代码
    8 o, f4 C6 t2 }5 t. `: R9 y$ o* [8 G
    import matplotlib.pyplot as plt. S' B" }2 q9 h0 r9 D+ N" n  P1 X
    import numpy as np
    6 S" G6 j4 B+ \; C# S" Nimport xlrd3 `! n- x# C* {4 \

    0 c; |1 T. @3 n# p'''7 J3 O. c( T3 J% w6 E4 u! x
        按列读取excel文件并存入两个列表$ a. ^: s+ k: p' G$ j2 [
    '''& k  M  y7 ~! E9 k, R7 W, l
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    / r5 i+ K. O; dtable  = data.sheets()[0]   #通过索引顺序获取工作表  J$ p9 E. B# I  i7 K/ |
    cols_n = table.ncols - O) c3 T7 H2 d' ]
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名% R8 ^5 ^8 _9 t+ \; n) U# r+ T
    data_list = table.col_values(1,start_rowx=1): F$ M- _. A) _5 R- r
    # print(data_list)9 N! [5 l2 u  {7 d4 d6 G
    & M6 ~7 B1 P9 F7 a; \0 k
    '''
    9 [4 U8 Z; g7 f    计算角度3 w% ?0 o- h$ A
    '''
    * i4 L% I* d5 p# ^n = table.nrows-1           #去掉列名7 H$ |1 O7 n. a1 y" u& P
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份9 x$ P' Z! ?9 R% k+ B! P

    4 U4 ]7 X, q( k  [* ^'''
    , D0 I3 o7 c* d/ `6 U    作图+ K) _+ W" z! ~2 V' q( H
    '''% H# J: X; t: N; w  j  y2 M0 H4 k
    # 设置画布8 p( ]% f# A, f% X+ J6 l3 h2 x9 g
    fig = plt.figure(figsize=(12,10))4 a; u: _4 k9 ]8 w  W
    # 极坐标
    ! I6 M& r+ o4 N# m% W* w% uax = plt.subplot(111,projection = 'polar')
    * s% h. m! H/ v) O0 w# 顺时针并设置N方向为0度- O3 w( C; R3 z& L: M& ]
    ax.set_theta_direction(-1)0 `, C: r$ O0 v' o& c4 F4 P
    ax.set_theta_zero_location('N')
    , c/ H# A. q8 r) v, ~! H( l* z% m5 X/ o" X1 F$ \9 S: |! e; b4 |
    # 在极坐标中画柱形图. _6 }/ P$ V% G3 |$ R* R7 ?
    ax.bar(theta,- Z- k# f4 k: v- p" f9 _4 d6 r
            data_list,
    + F& t0 o' c+ v6 u( G% {) s- o$ b        width = 0.33,9 U3 X9 x0 ~( A2 A$ @3 S; B
            color = np.random.random((len(data_list),3)),! r- m8 I) V3 L
            # labels=str(country_list),
    : N' e4 [9 [2 l( x9 x  e        align = 'edge')
    / ^( R- Y- [- y3 ]'''
    7 Q2 x! ]; f. [$ v2 C% \    显示一些简单的中文图例
    . P5 |9 N, O" G1 ?, v2 k. l'''
    ! s& U8 O4 j/ }5 u3 B; Y; Wplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    4 O& G) ]1 f+ Wax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})! S2 [! q3 k( c- u! T- p
    for angle,data in zip(theta,data_list):
    + g, B) M) G$ }' P- l    ax.text(angle+0.03,data+100,str(data))   J9 X' d# x2 n2 F/ _& S0 g
    3 C3 J, _: C$ p) B( h
    9 Q: G* a9 F/ [6 b
    plt.axis('off')
    9 J3 S+ }# b0 U& q+ U( t5 @
    0 a1 i) `+ Q8 i  k& l6 I$ n5 [plt.savefig('Nightingale_rose.png')
    $ v( b; j+ K! ~4 jplt.show()6 L% Z" L5 J6 s$ |/ @0 A+ a
    & s$ V, h" O' p  _3 l3 j# N
    " b0 H4 {5 z9 c* d1 p
    2.运行结果
    6 P; Y2 E' j$ G* j! L 1.png
    $ E8 L! d! j- [% o7 f, F, z
    4 f) O0 v. p3 ~
    : {& [3 I; f6 g2 j+ W% Z3.excel数据表- \+ b) K$ j, s, W) z
    2.png
    4 s# g1 n" y) j0 P1 S- ]( |; \! r/ ^9 }7 n
    4.说明7 q/ [# U2 \" f7 L/ [1 K
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    6 b& X0 c# P3 ?' c! E/ I% l  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.1 U3 y& B4 `9 B# ]8 r2 Y; j1 ^1 z
    ————————————————
    , p3 g4 m5 [" a0 I: l版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。$ n5 [% P$ R) z! ^7 S% r
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    * e1 p0 B/ I3 W3 T5 J! q8 S( g2 s- {0 |0 j! h8 ^, ^; y

    * J% u8 x: B- ]% f1 {0 f& a% J
    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-10 17:53 , Processed in 3.558853 second(s), 53 queries .

    回顶部