QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7797|回复: 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 C, {' Y+ W% a  T3 e; }python+matplotlib绘制南丁格尔玫瑰图4 a7 c# m3 U& {3 Z; ~) x8 s% C
    实验:绘制南丁格尔玫瑰图
    . t$ X6 c0 ]( c3 P- e; @  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~/ x+ n8 B( _3 e; e! {1 \3 r
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的., _$ |- Z6 ]: K& u3 N' [& X
    3 K0 ~& z& V# |8 @3 w
    文章目录
    9 U- H' \5 I  }5 H0 u8 p6 S" Q$ q+ e: y- G6 B
    一、实验目的% i) N6 `3 H1 Z& r7 a4 F; C
    二、实验内容( ^5 x3 p  X& I  Z! C
    三、实验环境
    9 u' p) N7 x7 L  y5 T+ V( h( s1 a四、实验步骤
    0 X! w7 `  a, P五、实验代码及测试4 L( n! E( \+ m- q8 U8 E
    1.源代码
    % o5 i% c$ t2 Q0 [7 e7 i; U' K2.运行结果0 `# r2 J; F( X) N+ Y  S: Q5 Q- d
    3.excel数据表& g' N$ T' d; E
    一、实验目的. \4 s: F9 @* {( s" I( T

    5 B) `" a/ g5 e. Q- _3 ^  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    1 q, c( T. E9 `2 a' Z8 e
    : D' i9 T& Q% w4 {- t8 _+ X, X( L二、实验内容) ?0 h0 `; Z6 s4 r& ?

    3 v9 T) p7 T7 X. ^1 t3 T7 f9 S  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    # C& _, C% V: N# @3 k1 S  自行选择一组数据,画出基础玫瑰图。
    : O) X  ~6 D  z# g. T# ?7 a4 E# v% V# l0 e+ _: _& Q( g2 v$ |7 p3 W. X
    三、实验环境
    $ ]. h- q5 K5 r9 z1 ^) v6 |/ \
    / }7 ], l9 [! f  ython 3.84 n4 M6 K% u6 a6 ?4 D# W7 w" {

    5 y$ E6 Q4 s: q- C5 R四、实验步骤, V2 {1 K! d4 y; j( m* i; F

    ! [  ~" `! w$ e6 @$ q# |查阅文档,了解南丁格尔玫瑰图的原理。
    # ]2 @$ t9 d+ p* k选择一组数据,编写程序画出玫瑰图。; a# b, e% T9 h2 O% F# \! l& D
    五、实验代码及测试
    - P, `& a( E0 G
    0 t, c. h, }8 R& B  u1.源代码
    * {& B8 }3 |& P1 @- k6 ~% X! X3 J& K/ u; F9 q+ V0 }
    import matplotlib.pyplot as plt; f/ H4 |1 u6 K& J9 Q# Y/ J, L
    import numpy as np1 X5 j) Q/ w8 b' B* T3 a% @
    import xlrd
    7 |: u7 G6 E. q+ y
    3 y; A& u: a* _2 W% ]: |'''! [/ ?9 h" |+ ^
        按列读取excel文件并存入两个列表
    $ ]2 S( C( K/ ?# E5 g& ~! ~'''* A/ u$ y' m& c) X9 d
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    ) X. T5 z% S+ G5 K7 G: qtable  = data.sheets()[0]   #通过索引顺序获取工作表
    5 e& t% s% \6 ?* N9 ^cols_n = table.ncols
    8 c; D& V8 I0 ]% m5 d& C. [country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名- F! V7 X1 R6 ?3 o
    data_list = table.col_values(1,start_rowx=1)$ R7 J1 s- E* v9 X, [) A! Y' E
    # print(data_list)
    & T3 {  _) F; \$ w7 a  w
    8 Q, |) g. e1 K7 m& h( M'''3 b% U' D& ~1 r% k  p2 s) L
        计算角度. ^2 u5 o+ ^3 @9 v
    '''
    ) o: L. w; Q' t2 }n = table.nrows-1           #去掉列名0 i" O8 z# U0 h+ |' X1 Z
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
      [- `% G" f$ A; _* G' C
    - b( Y3 f7 C7 m+ |'''2 V- X' N" }4 Y% F  ^0 a
        作图
      J. |) T0 `6 ['''* r' p8 w! h% \' ?
    # 设置画布# G* K1 J  i+ J4 Y9 Q1 I
    fig = plt.figure(figsize=(12,10))
    + e9 {2 b* }' H/ M# 极坐标. _, P/ x9 S( g: l+ T
    ax = plt.subplot(111,projection = 'polar')
    : I: Z. N, e7 l, P' n( q) Z# 顺时针并设置N方向为0度
    4 @4 a( \; K6 j& Q" kax.set_theta_direction(-1)
    9 \$ ?5 r0 K% z3 w# K! oax.set_theta_zero_location('N') 4 ]5 i5 U7 Q! v. g& J

    . ]2 f+ {; |; c' s3 j3 R9 U# 在极坐标中画柱形图4 y! V0 v7 g6 }- I3 |
    ax.bar(theta,/ ?! F2 e7 E. L
            data_list,' N0 T+ q+ o9 D+ _! G  \
            width = 0.33,+ |: m# ?) P9 @: n' R
            color = np.random.random((len(data_list),3)),! ?7 }0 i- P9 S6 @  c3 Y* |" }  n. ^) Z
            # labels=str(country_list), " {, u4 q* T* `# P' }/ H8 S% O
            align = 'edge')
    8 X+ g/ w3 e% V$ n$ R$ o'''
    8 f7 C5 \' ?/ T( |    显示一些简单的中文图例
    ) g! L- ?- y- x, h4 c  k'''
    0 Q0 y" ^% J( @& }' \6 pplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    , r5 D, o" G1 pax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})  I8 i8 x' D8 R" u$ m
    for angle,data in zip(theta,data_list):
    $ N- a3 j- e+ F+ U" i+ _    ax.text(angle+0.03,data+100,str(data))
    ; R: \% u) @' `0 _9 C4 x8 G$ ]" o# C" i$ `. b& A
    ( p4 i( V2 M2 k( K! ^; a- `1 Y
    plt.axis('off')
    ! v( d- Z7 c) F2 B; V/ |, W$ u! O( o+ ], D$ O# N
    plt.savefig('Nightingale_rose.png')% N2 I/ B  y# \9 d
    plt.show()
    ) P3 _. O+ P9 N" i
    . _8 }) s8 e: q8 ^; L0 N
    1 Z% |- N' K8 q, d5 \3 u2.运行结果2 r/ f* d2 ]& U
    1.png
    0 @* h4 q1 O7 q6 f
    : J. s' W7 S+ i* r$ @/ o( a' x+ {/ X2 i1 w9 s
    3.excel数据表0 ]: }1 ?) `% i! X3 h2 I! ^4 C
    2.png
    / T1 m' i( ?# U# _8 r; s, s& x7 U& X! q9 h2 r6 p8 q
    4.说明. c* P0 v6 a7 z% o/ _4 a
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    * a5 J* a- F2 t/ |3 J+ w5 `4 f  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.0 s* o/ S7 j3 W' B
    ————————————————9 A5 |/ ?0 r# A' h1 I
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。' g; E8 [1 Z( v/ v' t: E! C7 q9 w6 v
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    : T3 {9 @' ^; Y, Y- Z* n+ H6 S" l# Z7 [0 m
    0 t6 y6 n; r$ {  i/ U
    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 22:35 , Processed in 0.458407 second(s), 54 queries .

    回顶部