QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7728|回复: 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
    ( ^5 a4 {5 `+ j7 y9 j* ]  B
    python+matplotlib绘制南丁格尔玫瑰图5 l$ d1 k: o/ @+ }4 _% {
    实验:绘制南丁格尔玫瑰图
    . ~$ Z- }7 t: [) d4 ~6 X  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~6 R: s  ^- \* }  Y9 L7 M
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    2 ~/ ~$ y1 n1 n5 S- @
    ; C. |& w0 G3 p, A1 `# z文章目录; t" L8 g1 z, z, t$ ?7 R- j

    + C* X' L' `& r% z) V一、实验目的
    6 V, j% {) a. D4 S7 d; ^- Z! i' Y二、实验内容6 q" C+ J/ R6 M' t8 E$ l
    三、实验环境6 S! U5 ~- |, o" ?) d* E/ w; V$ O* E) Y
    四、实验步骤
    & S( L  g$ U" |五、实验代码及测试
    & Z2 |: F9 b0 V* p* T1.源代码
    & u6 R3 L# x, E4 {3 Z2.运行结果& B# Y- D1 F8 Q- e! H1 w
    3.excel数据表
      }1 C# e1 ]# _$ [: q- x一、实验目的
    & I. Z/ [- Z# ?% D7 u8 s( l- U5 T3 }
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。9 M& P6 g+ N/ ~6 o8 ^  H( L4 f

    ) Z6 H* @  C: l: r7 }1 `/ K: r+ n二、实验内容
    4 }+ y* j- ]  B8 C& Z
    5 y& @7 ?$ ^5 q, T: l5 X  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    % M2 \; }  R! t4 m( N2 n  自行选择一组数据,画出基础玫瑰图。
    ( E# I% d* c% p8 b5 e4 M0 L0 |) U
    三、实验环境. g, M& j9 k$ m3 |+ j& k
    7 j+ ?0 d8 E4 S/ [
      ython 3.8/ m$ o7 R; V1 n
    * m* K  }, i: w
    四、实验步骤
    $ A3 }' t* L) P( ?, D0 Y3 _$ n3 v7 x7 c, ]! \* O
    查阅文档,了解南丁格尔玫瑰图的原理。
    7 Q5 C4 s5 }) o$ }9 a9 H# P选择一组数据,编写程序画出玫瑰图。
    6 r; W+ {% \0 z$ u" k) z% k" v0 Y+ b五、实验代码及测试
    0 t/ D( x3 E( G' d- h8 ]3 K7 o% W2 e' l) f, x) O" W9 V* d3 y! _' a
    1.源代码
    . V1 b3 k4 ?! K' X( o' |
    . B0 i0 a9 H/ Q9 e  D2 k( Limport matplotlib.pyplot as plt: T. K' Z4 C: F. I
    import numpy as np
    3 p- W9 Q! Q) n5 v0 Simport xlrd
    ! O+ v2 A! o8 D1 L  O; b& F: f( [# m
    '''
    ( h* a; X& u) O    按列读取excel文件并存入两个列表- \; s7 q: g' |5 }/ E. x
    '''
    1 o# X/ Q7 ?/ cdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') - R5 Q& e* D+ r  k
    table  = data.sheets()[0]   #通过索引顺序获取工作表
    2 o( d* u5 I/ k# G* p/ jcols_n = table.ncols
      D) T# f$ Z$ s3 i$ @country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    + O& C; K6 g0 ^+ L9 a" Idata_list = table.col_values(1,start_rowx=1)
    1 S! M* T* F  G# print(data_list)+ P+ Z* q' `# X* k
    : W0 v! J, M' |# v0 Z
    '''
    6 h% r3 [% X6 S    计算角度
    ) U+ [7 X$ [8 W) }7 p9 |8 e8 R5 S'''
    . k0 _, E1 b4 ~8 q; f4 p0 Bn = table.nrows-1           #去掉列名1 Z' c- w' `6 f9 o
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    , v7 m1 T0 j' C) ^) }% G( a/ I! G1 y: O/ }: ?& G8 B$ m
    '''
    ( I, X) s7 y5 S; W& d    作图2 b3 o; h8 t: e8 y1 H# V
    '''
    ) l! ]- \8 g% ]. h% t# 设置画布
    9 t8 U  ?! F( R# p6 f. H8 l4 Sfig = plt.figure(figsize=(12,10))2 u( y7 R8 n. v4 [7 }) v/ z
    # 极坐标( b# E+ \6 Q. j/ p( h( h, w
    ax = plt.subplot(111,projection = 'polar')
    ! C4 w( ?" J( {7 X4 A3 B& }# 顺时针并设置N方向为0度
    9 v* u  U7 ?7 N8 L8 gax.set_theta_direction(-1)
    $ A& r$ t+ m  A5 |. lax.set_theta_zero_location('N')
    # V9 L& _( K/ t! @5 W9 Z' L  R
    ( c. a& P% d. E3 I; U5 C6 q# 在极坐标中画柱形图8 ]& L7 d  ]; A( q
    ax.bar(theta,+ Y* A' }% v+ x. k1 l4 r3 ?, K- u
            data_list,  d3 ?) _  h' A$ o: Y( h" `% \
            width = 0.33,
    . x2 x& P; Y8 |! O7 V& A9 W        color = np.random.random((len(data_list),3)),8 U7 q0 {! O8 h6 w5 t
            # labels=str(country_list), ; i' S! Z0 V# O$ ?
            align = 'edge')
    1 o0 ?) s& G# N'''
    1 H& i3 B# [- J( w    显示一些简单的中文图例
    9 D2 U$ I" ?' E, R0 `2 ^6 M'''
    / _" i7 A+ m3 U5 zplt.rcParams['font.sans-serif']=['SimHei']  # 黑体) Z' G3 }: L6 Q; n/ C- n, d4 W
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    ( ~9 [1 N4 O" l. s" wfor angle,data in zip(theta,data_list):# @3 J$ |& @$ w$ G
        ax.text(angle+0.03,data+100,str(data))
    9 X% ~' v, ~2 W; Y+ e1 i. [- k9 r; C5 [0 W
    3 r6 |* A0 P0 ]7 B8 R
    plt.axis('off')6 [8 I: @8 a/ v0 {  K3 ~
    ' D/ n( Q! }; i
    plt.savefig('Nightingale_rose.png')9 g( ?& M% `1 G8 D6 n
    plt.show()* h2 t% Q1 m0 p+ J

    ) r- R8 \" w5 J. Q0 N4 I; B3 N, E: |  L% s1 h9 h
    2.运行结果
    1 j: M! i0 ]  L( v8 _1 L 1.png
    5 I  ~1 D: ^6 c' _1 T  `
    $ S/ [) L. y+ c2 J+ j+ w( D
    " n# N# t: Z  j$ u& f2 x3.excel数据表
    , D6 T( g: s( \, G9 P 2.png 9 L* i% F3 c( ?2 I- \/ r9 d
    - A4 r6 X9 U/ L0 q. Q8 w
    4.说明6 C0 t; [4 e0 ~$ a( S5 h
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.3 V! n- S) W' W; r, \1 Z5 _- ]
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.$ [$ \! c  [9 O% v/ n3 C7 P
    ————————————————
    : P- O: G8 X9 w4 P3 T版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    / E( Q* M' T' n( X/ C/ B* \0 y/ w原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852: p2 h* X0 s" Y: O
    ' j% Q4 A4 X5 u. Y4 r, `

    3 R/ l2 l' P* Y: l! K% h. Y( l
    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-4-18 12:31 , Processed in 0.451505 second(s), 54 queries .

    回顶部