QQ登录

只需要一步,快速开始

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

    , h4 Y) p6 C, i( J/ ]python+matplotlib绘制南丁格尔玫瑰图
    8 j5 L3 w+ ?. b2 `实验:绘制南丁格尔玫瑰图
    $ Y/ l' c5 y5 h4 U  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~+ _' g1 O" s$ k5 n* F* n
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    0 |3 ^6 f+ T- h9 m) N
    8 m! A" ?& K+ \/ D2 M/ {8 P文章目录
    . x, g- r, H6 n  A( _9 \+ }( b3 S2 N" |! {5 a: a, p" h
    一、实验目的
    2 H% F( ^( g0 F% ^! i二、实验内容
      n3 f( }4 G. T' o+ n三、实验环境
    - U, G  I, T4 S/ K四、实验步骤
    3 C! B* i% d" T6 @0 C( O; Y* R五、实验代码及测试) D+ g6 ~3 q  X4 A8 m% E) l4 u
    1.源代码
    # R% a  h+ V: V- s0 f4 Y: S9 ^2.运行结果
    ) c( j3 o& u$ U6 c4 T: n9 m3.excel数据表
      g0 U% z5 D& V" i# [一、实验目的
    - j, R( O2 Y( q8 G0 q
    $ ~# g, ]) c4 o# X4 c2 J  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。8 I2 g8 @! P/ v( V% x% R

    2 r0 P! s8 W8 J. b. s9 p/ T' v二、实验内容" l* T  M/ N. d" s/ H
    ' Z1 @* U, I9 M: T" p
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    ! W# u6 ~  E/ a* s9 @  自行选择一组数据,画出基础玫瑰图。# U, m& K* J" h8 r" b
    . c: T$ }4 k+ b, G: Y9 |
    三、实验环境) A5 ?6 h5 M8 D& r9 U0 n) B

    7 i+ @- J' u5 w! [( i. K  ython 3.8) o: V  @, ~- `( X3 k
    , p1 M0 [/ i* u7 ~4 \' q' E8 n  v, O
    四、实验步骤
    * v' m% Z7 @1 v  o. ?6 [" G3 `* i- ~* H. w$ T, N5 L% w0 J3 q8 C  d3 E
    查阅文档,了解南丁格尔玫瑰图的原理。
    5 v: p  `8 C9 c$ T7 u- Q选择一组数据,编写程序画出玫瑰图。( ?( S  b+ D; m3 X# w" _6 Q
    五、实验代码及测试0 }7 ~* Z, H. ]$ m
    : x, B* L6 K6 E' ]+ a+ n/ |9 C
    1.源代码
    & Y% b& J/ e+ `  D  z* N  r, J$ ?
    / n% j6 E( ]2 r) N! uimport matplotlib.pyplot as plt! [9 h$ ?/ f& Z# p$ m3 |+ u: D
    import numpy as np
    6 T. C; V! q  J. k' `  A7 E# vimport xlrd
    1 C& F7 P, J, U4 G
    9 O- Z6 J% o! l" {'''
    3 ~3 |- p# \! R; y8 v, U    按列读取excel文件并存入两个列表
    $ u' k1 z6 ]+ K& ~' ~' r'''
      h" g, e  j, b; ]$ Cdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    2 v; o9 S9 G7 |% \table  = data.sheets()[0]   #通过索引顺序获取工作表
    3 m, W' {4 \8 o" y: S+ S  V, u5 F+ Icols_n = table.ncols
    $ ~' I6 Y, ]0 Z: c* ccountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    $ q/ F: T  {7 wdata_list = table.col_values(1,start_rowx=1)( y: F% N) @9 l
    # print(data_list)6 R+ V7 F' m' ^8 Q, B* k5 a3 ?  g
    6 H* `4 X2 W2 M9 ^
    '''
    % D4 ]) l. {- h) }" @8 I    计算角度
    # J. z7 |# K' |- \) e8 J''', a4 Y# u% h5 A
    n = table.nrows-1           #去掉列名  q0 w! Y! h% t* k3 n7 \2 \4 _
    theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
      k# @% b  y" w( ?4 |# ~/ O7 ]! ]+ l4 f% M+ k0 g8 O" ^# v; V
    '''+ J* U3 z' `. z0 Q5 \
        作图. N  b( P! h# T
    '''
    , K6 l. K0 k1 O8 i# 设置画布& v& J3 Y! N4 t+ s( T. a5 K8 ^
    fig = plt.figure(figsize=(12,10))" c) L; \. h4 ]) `3 b
    # 极坐标
      b' E' v8 c. r, T$ o5 @8 E+ qax = plt.subplot(111,projection = 'polar')
    ! i  P8 @: Z5 E0 Z* }, Y( B# 顺时针并设置N方向为0度
    / W2 u# N' _2 V* |* bax.set_theta_direction(-1)
    5 l$ k8 X, X* ]4 Lax.set_theta_zero_location('N')
    $ O% y7 w! E. K# n( r2 N
    * [' D- Z3 B$ o) b: ~' _6 n# 在极坐标中画柱形图  x9 c' D; J" d. N9 f+ l
    ax.bar(theta,: h% J0 f4 H5 r6 U. z
            data_list,  i4 A8 t1 W, _# R/ c
            width = 0.33,! h- Q/ ?  c" C- B* d0 s
            color = np.random.random((len(data_list),3)),$ H+ D+ A3 c) `$ x
            # labels=str(country_list), / T' o& a2 R! r/ q6 s
            align = 'edge')
    * C/ \$ b; J& p' \'''
    : o$ G8 _& U) X, J" e6 }+ A+ V    显示一些简单的中文图例
    * k2 w, B" c3 [( O1 N'''$ A4 i. W; N' M" N8 B& i7 A
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    4 s: ]: T# M8 T3 S/ ~ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    + k* F6 S0 N8 j) _, v" F: Nfor angle,data in zip(theta,data_list):5 t! p5 U+ C- c( r5 ?% ~
        ax.text(angle+0.03,data+100,str(data))
    9 q( A2 ^! k% C# a
    / S" u: m: u4 D7 Z
    # C9 I7 w# r9 j; [plt.axis('off')
    , [9 A; L( U$ q8 E' W7 }% D0 A; J* l  Q* v, W9 E3 ?
    plt.savefig('Nightingale_rose.png')
    ; d) a6 [5 m9 R. mplt.show()
    1 m+ s  v$ o9 ]  T+ L4 v
    4 m" x7 Q$ T# ]5 H0 t0 N& `% k0 o" R0 o" u( H& n! g" w! l, U7 x5 U
    2.运行结果- ?: ~. ~0 U! @
    1.png + ^6 A# h( e9 i6 q6 `

    . y$ b+ J' j3 v- r. X! Z% v# a, V- d* d- R1 P
    3.excel数据表
    - @( ^9 h) c5 l- h 2.png 2 @0 N3 E: |* }
    ! y2 y( a/ h' c) X$ J& Z
    4.说明
    ) t0 O; ^( O! v7 ]  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.( k: U. O/ o8 K
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    & h9 L4 `& x6 Z0 k, d& f+ r- b! h————————————————
    ' M4 r8 Z3 Z- Z- k# ^' p* g版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% g0 n( g  P. W
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852% C5 Y5 l( U1 v: A# ^+ a: T
    * J% {3 b, `5 ^3 r4 |6 ^

    * s1 U6 K) B: P) C0 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-4-20 17:42 , Processed in 0.469187 second(s), 54 queries .

    回顶部