QQ登录

只需要一步,快速开始

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

    $ s$ m* C4 X- c, p1 K. m2 Q6 }python+matplotlib绘制南丁格尔玫瑰图+ d/ F/ X9 ?2 v( U
    实验:绘制南丁格尔玫瑰图
      v$ J* L5 ?. O& V# ~$ l, C& R  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~) a% k. D* n; m) V0 p1 `
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.; a* }5 ]8 v' M# ?/ z* c3 r
    ) k9 w+ @" U; q7 V, o
    文章目录) r* z* l3 F3 y3 T3 j" b2 w) M
    # \' M- Z! }0 H& B! K1 x1 X
    一、实验目的# n5 P( A' [* V3 M- S
    二、实验内容( b$ k0 d- z$ ?; B' ]2 {+ u: h
    三、实验环境& n: c/ A# K6 \  J6 c
    四、实验步骤
    : l, P% L4 y6 I) ^1 J; c五、实验代码及测试; `  V1 N' N6 r8 t4 c' F$ X: x
    1.源代码
    ) v0 h; _0 r% e: Y0 r) y2.运行结果# N/ G! }# L2 L. V' A4 D! i
    3.excel数据表
    / Q/ V4 V3 p* Q$ u4 ]1 d2 f一、实验目的
    ; N. Z2 \" L& n. p/ R+ Q$ x1 o* N) L
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。( F  B, p& [+ K7 T% t  ^: l

    * {9 t, C7 {) j5 `二、实验内容
    5 t6 o: A, S5 ?+ ]9 j+ w  Y' v3 u/ {) x7 ]" v4 Y, w* Q5 j) ^
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。7 J! \; F! L% G3 {5 J5 @. P* W% R
      自行选择一组数据,画出基础玫瑰图。
    3 o: Q( ]( N2 f! v6 e. z" z0 N' y$ j; G# C  F2 d' B
    三、实验环境
    $ Q% k1 a; D, J& D% W! a+ g  ?
    # d8 `* r$ j/ W9 ~6 C0 f" d. I  ython 3.8
    / L9 r+ A: x! t' j$ J, J6 P, t9 `  g: A- @7 L3 b! P
    四、实验步骤
    5 o/ u* b5 V# ^4 C
    ; @( d* n8 I+ W; [/ H, `% k# {查阅文档,了解南丁格尔玫瑰图的原理。9 h6 p8 T- T% \
    选择一组数据,编写程序画出玫瑰图。
    1 r+ u6 M9 o+ s1 L( @/ i8 X五、实验代码及测试- p) Z& B1 S) h- r0 F
    7 Y( ]" J9 N/ s, a7 f
    1.源代码# I( y9 H) E7 t/ z

    9 B! ?( G- K. @( K# Fimport matplotlib.pyplot as plt
    3 Z! q  m& ~  I4 M  gimport numpy as np5 D# t: E; ?' {' v
    import xlrd
    9 x  |. l4 s( k9 F) @: Y4 D. v
    '''1 k- }) B9 A2 S
        按列读取excel文件并存入两个列表
    & _/ g) x  g! J'''
    $ U# Y: x. o2 [' g7 ]5 tdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') 1 c+ x( K9 ^( W- h2 p& L5 R
    table  = data.sheets()[0]   #通过索引顺序获取工作表8 J0 y4 i6 z) {( D' d
    cols_n = table.ncols 2 z* r- p; z$ S
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    : T6 [# Y. m  L0 u5 U- x3 U9 zdata_list = table.col_values(1,start_rowx=1)3 V/ d+ w: n8 S! x: W
    # print(data_list)' R( V1 y& e3 p3 U" i/ Q; l

    . ]$ ]$ f* z* j( M'''
    $ R- c3 v1 a- T2 B9 e( g    计算角度1 r  m' X) s7 |# g7 x4 ]- W) U
    '''- i+ [% S0 a+ d9 Q; a$ u& Z
    n = table.nrows-1           #去掉列名
    " a1 S: r. }" k) x: i; [theta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    8 i  Y0 x9 E$ Q6 f; d
    9 k5 c, g' A/ E6 c'''
    ( w' S7 s4 `$ s: ~6 y* N) r    作图
    * c# ?1 I6 [/ j- n5 p'''0 S9 k6 U+ V+ a  j
    # 设置画布6 S( c6 `/ G4 F( L4 U
    fig = plt.figure(figsize=(12,10))! d0 R+ @: \  i* Y5 ~
    # 极坐标
    5 L( F9 T) A# s9 j; z) V$ Uax = plt.subplot(111,projection = 'polar')
      u; @$ P4 ^' n* S2 z; O# 顺时针并设置N方向为0度
    " K# D# ?8 j, n& {) C# H  `- u* f8 rax.set_theta_direction(-1)2 O2 K/ C% F, X, X
    ax.set_theta_zero_location('N')
    ! }1 `) N: r- g! k4 o7 d& n5 C4 d- f. L# g/ V
    # 在极坐标中画柱形图
    8 ^+ C$ D! `' e3 Gax.bar(theta,* d9 X/ j, m  x- d' O. v: `6 @- x
            data_list,
    + S$ Z. N# Y2 ?7 F) g% j        width = 0.33,
    $ z% C) _, v  L. g" s3 A        color = np.random.random((len(data_list),3)),
    6 @( d1 t2 F% X        # labels=str(country_list), # L* A2 a% u% a6 ~! n) _6 x0 A
            align = 'edge')
    ; W+ W" Q; d0 a% A. Q+ D& `' [. _'''
    " K0 c8 A( _+ f( ~6 }: k    显示一些简单的中文图例
    ) k% O% m3 u! v& j, b8 y'''
    - e9 S+ V: f4 R7 C/ ?9 \# _  Tplt.rcParams['font.sans-serif']=['SimHei']  # 黑体1 |9 ?" _* H( r( ?  B& G
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    & y; `7 A, n0 s) a- |for angle,data in zip(theta,data_list):
    ! L( I% D  O. @5 c! g    ax.text(angle+0.03,data+100,str(data)) " e. @* ^1 Q1 X% j/ D8 T
    5 [, l  T/ ?( K: X8 V" Q
    3 R/ ]2 W7 [/ T$ O) c9 F2 z
    plt.axis('off')
    ! u$ E) f5 D! S& O0 Q8 R
    $ A" Y* y4 y: u' e# zplt.savefig('Nightingale_rose.png')
    % [: X. j5 N5 D7 K( o! F: G; [4 g5 U+ Rplt.show()
    # o  N8 L# V. z" S9 n! Z! d" [5 q+ r

    + q5 D2 h8 u- N2.运行结果
    7 v6 m. `& S* i* B1 S0 k 1.png 6 {# ?# `  U  ^  M  q' I7 R
    5 E. M, y/ y5 P
    5 N8 Y3 C! Q' B/ V, i0 `/ Q* H
    3.excel数据表) o" z3 X2 g* Z- F
    2.png
    * h7 c8 X2 J* l' }- n7 H9 [
    9 l2 ~& P' u- S. l3 K5 R! A2 l* V4.说明
    & t6 i* |0 X3 c( C" q8 t. \  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    ) n  y3 B# {8 ~$ q. L* ~  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.* l3 b, ~& V1 q, Q/ E- f" E1 }
    ————————————————
    / M1 l$ g$ t7 Z7 J版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。8 t" W) [& Y9 Z$ z  Y% X
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852( E) Z4 t6 j$ M1 |* u2 b

    4 X5 F1 `# k! p0 r4 ^$ D3 _4 {. X# K& @/ P+ l# d3 X
    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-11 04:38 , Processed in 2.769383 second(s), 54 queries .

    回顶部