QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7792|回复: 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
    * \0 `! K* u' k9 @
    python+matplotlib绘制南丁格尔玫瑰图
    / d4 X. g' f3 ]) g( C( Q; c' _实验:绘制南丁格尔玫瑰图
    - a! p1 n# s+ a8 T, }$ C) ^  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~: t) A$ K+ [: Z* x; O: A
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.) I& R" v4 P9 w# z

    / ^; N( ]: W. p9 R/ B( u文章目录
    9 u! V4 j0 r" n% p! ?  M3 [6 k# y$ a- v, i9 U# u
    一、实验目的
    ! M5 I4 C0 i0 b8 m8 {! v二、实验内容
    + m* f5 J& e) @& [三、实验环境. i) Q/ V1 k9 C4 t% s/ ?$ h: J
    四、实验步骤6 f& ?  ]5 A6 K# U
    五、实验代码及测试
    3 W( G$ Y, d% D4 W# A2 l1.源代码2 [: T0 H( x& n' v* t
    2.运行结果: B, Z0 q+ L9 x
    3.excel数据表* ]5 B# v8 L! u3 v
    一、实验目的
      E  K# J- j' [( V) T) i$ h0 S( P% A4 i& D
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    # F$ E* y+ C, A/ v% V% U9 j9 J6 S  F& g) z
    二、实验内容# s! L3 T7 W4 K/ @: G5 P
    # X6 R% W7 [6 h9 u6 x
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。# i2 }, _# R1 I5 J: h+ \) |
      自行选择一组数据,画出基础玫瑰图。) l- V$ f: p7 V' U: ~
      M2 i; U2 K$ z7 Z2 \
    三、实验环境6 ]% T: d7 d3 B; v, O  Y2 q* Z

    8 X; p0 z% H0 a3 V  ython 3.8
    " O5 g6 N7 B9 @" R
    $ N5 [( e1 D- F: n; o1 P; {  ?四、实验步骤
    $ M" ]. `$ m9 x+ G( w/ Q
    " s& r! \0 W0 O' l% o5 a查阅文档,了解南丁格尔玫瑰图的原理。
    1 ~+ b- [( }* H8 z6 J# }选择一组数据,编写程序画出玫瑰图。
    6 }5 V0 K) f% i. Y) b$ o' X4 z7 A五、实验代码及测试
    , p& e2 r0 d7 g' L# u4 S; p3 c# N! t* Y
    1.源代码
      s  \) e" E  n+ x0 r0 N
    ; m; g* w6 ?9 \import matplotlib.pyplot as plt& U- F# }9 a4 |. w6 ~
    import numpy as np
    8 ?. b% c+ h/ `7 U1 `0 s" |0 jimport xlrd
    ) D% f0 x  v4 @1 l9 Y6 O+ C
    8 o+ L" c8 M$ N'''1 X1 E6 Z; t) T  @
        按列读取excel文件并存入两个列表
    7 l$ V% {2 s. |; ]3 [, |'''( o  d" U  f0 Z/ W$ D! l: c7 T: @! P
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    0 ], R0 o( J$ w/ ]2 F8 Q& S$ D% Etable  = data.sheets()[0]   #通过索引顺序获取工作表  b8 z( s4 D9 z* m3 Y
    cols_n = table.ncols 1 O) x& D) e( N% w9 O9 s
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名& G+ x9 o3 e6 Q) v$ F
    data_list = table.col_values(1,start_rowx=1), u  w# x9 ~9 c1 V
    # print(data_list)
    5 K5 t  Y6 ~0 C8 {& O' h) k8 e- D  Q5 G6 _
    '''
    . l5 a( J! f' g7 j4 G    计算角度: }# G0 R, c+ K# D
    '''
    " U; k' t% V6 a% un = table.nrows-1           #去掉列名6 s4 W7 I7 @7 x7 N- j
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    0 m  H# |% t; j; k' W
      `; y; k' M6 E'''
    $ Q9 u/ X4 }. c% L/ z5 T    作图8 I: c% d$ G  E/ m& f3 u
    '''" E. D6 w* @# g6 u, u  ]! e
    # 设置画布- W# s( k/ j# j8 y
    fig = plt.figure(figsize=(12,10))4 _1 l: {: f3 k* Q8 z5 G; L
    # 极坐标$ A( M9 A# ^% C1 ^
    ax = plt.subplot(111,projection = 'polar')
    3 P1 ^; h& g2 h5 O, `; z* J) t8 u1 L# 顺时针并设置N方向为0度- F9 j0 V4 f: [  k0 l' |
    ax.set_theta_direction(-1)
    2 _' Y/ f8 o9 R! z  ?/ Pax.set_theta_zero_location('N') 0 ?" \0 O, P- K4 m

    ( Z0 b5 M9 \: x3 {; g# 在极坐标中画柱形图5 }& u6 R  {3 A# z/ w, R
    ax.bar(theta,% Q; P' {3 q7 i! e5 M& U+ p
            data_list,4 d$ p  _; B' C; n
            width = 0.33,
    8 N& L& \4 E9 G% x6 X        color = np.random.random((len(data_list),3)),
    ! w( m6 m7 t( U4 F6 q0 X        # labels=str(country_list), 6 }8 O0 Y( [9 U5 H$ \2 M) t
            align = 'edge')
    / i: G* F+ w( f  s9 {''' : k. g4 O4 L! i. h/ h
        显示一些简单的中文图例; |1 U4 h) a7 A) ^0 j" X7 Z1 G
    '''2 x. w+ ]2 |! N* M1 l3 I
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    ' E' z7 s4 a, |9 h  [ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})% K+ p. |0 w1 Y( h# ?7 H* M( p
    for angle,data in zip(theta,data_list):0 E7 ^" }. e3 Q, O& M5 X
        ax.text(angle+0.03,data+100,str(data))
    ; f. B: `: w! p' W2 c) V/ g# g) N5 ~. E. P% g8 `6 S! g% A) P
    6 ]4 x9 f- F6 N$ U: S0 A" q- T$ Z
    plt.axis('off')0 h" o! K9 T5 \8 q* T+ Q3 t! O

    & r7 ]  Y% h- B& xplt.savefig('Nightingale_rose.png')9 }4 P; n1 P( |# R: j. [  M) I
    plt.show()
    ) W6 [* I3 l/ H+ O' O; ^- c7 ^0 |0 V6 m' v
    2 V& k( N# h/ s+ D: m( H; M
    2.运行结果6 v2 i1 }8 I' [9 ^% E; f8 Q. p
    1.png 9 G) ]: b. t% f9 C, Z( q! @& E
    ( G+ K- H1 ]" P! v/ {

    3 y9 W; ^2 B9 V$ F; q$ X; g7 O2 b% h3.excel数据表
    ' B6 H( z8 J9 v$ T/ {3 { 2.png
    1 d- p6 P" i9 N! B/ }
    6 u, ?9 V/ r: x" F  P; L6 y, N4.说明
    : Q1 L5 Y* p# O6 r, |9 l9 A  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.: H) N# {( p( g% v  L/ k2 H% @
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    8 p. u1 I. B, C————————————————
    " j/ Y2 ~1 u6 E) \' n0 r! {版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    , d3 [0 ?" s8 O, n9 X原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852# M, z# L2 O; e8 H/ H: g& r
    5 x- Q# E9 {2 v( ?8 F
    5 y+ |1 W! P2 D: [9 T8 ^' y7 N; g' C
    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 11:48 , Processed in 0.437016 second(s), 54 queries .

    回顶部