QQ登录

只需要一步,快速开始

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

      h; i6 t6 U1 i: w! r+ ?: Y( o" W& apython+matplotlib绘制南丁格尔玫瑰图
    - m+ K7 \% B  G实验:绘制南丁格尔玫瑰图" `  S0 m$ U/ T
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    ! t! D: u: _' I2 O) N; Y  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    7 @# n2 I, K4 g; C2 U
    : C) B% @! ~1 n6 ?8 g9 a+ h文章目录
    - Y; O7 x& v4 n# `
    4 w' M5 e: `% ~) Z5 G; M一、实验目的" q* r% [9 O1 N: ^' C& r
    二、实验内容
    6 m4 [  e. G  c  Z三、实验环境3 y( x! R- y, Z' k
    四、实验步骤
    / u/ h" O. J" I# t. V五、实验代码及测试
    & M+ W6 n( j; R  }5 o7 x1.源代码9 B* \5 c* e  w+ j3 m
    2.运行结果2 Z" }+ t8 u  D* r0 j( D6 @! C
    3.excel数据表
    / \+ K8 B9 Q5 t' r! f" o一、实验目的; S6 C$ a" T, f  I) f& }5 V% V) t
    6 n0 Q* x$ l% q7 F' q& W; P
      了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。  A0 d' f' E9 V" b7 I1 S

    - Y/ u0 d$ P0 X/ x' D- Z! s6 m二、实验内容
    0 c. }/ T1 Z* i0 p" T! g# a/ Q5 G- b3 `5 _/ r
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。! E6 T/ ?* T# Q' p) G
      自行选择一组数据,画出基础玫瑰图。
    ) X4 o( d9 f* p1 k1 C8 N8 e' Q- I' T% C! J! g$ F* ^
    三、实验环境
    3 T% i0 G  L# b# X6 A. m9 ?! u6 v" {% A# u5 z" L
      ython 3.8+ z* u2 F' ?3 m9 ]

    $ q. V* N; D, i1 @四、实验步骤2 [% V, Z3 k' ^" V' L

    4 y/ l! k! c: L1 i; I2 q查阅文档,了解南丁格尔玫瑰图的原理。/ c% [" p# a, x% K
    选择一组数据,编写程序画出玫瑰图。
    " _: s6 m# e1 h% s五、实验代码及测试
      O# Z( p, }, u7 r' a3 S: Q
    $ z7 I, w) L, K7 v' y( m1.源代码& e; k5 a# K% M

    % m) v; f2 A4 K: limport matplotlib.pyplot as plt
    ' ~7 w1 I) t0 V+ B5 V5 ~import numpy as np
    + l( Q' j; p1 g& K7 K. F/ x% ?import xlrd  T4 ?$ i, f" E6 {# U% C

    # E6 S. p3 I: j/ C6 _'''3 g' c9 }2 T. U  M% x9 Z
        按列读取excel文件并存入两个列表- O- t/ @9 a% R, N
    '''
    5 y# x$ e* l1 G+ r/ R1 u0 l$ }, i$ ]data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') - g# O! A( p2 n4 [; ?
    table  = data.sheets()[0]   #通过索引顺序获取工作表! m7 N" r+ y$ q8 V3 D2 z1 X
    cols_n = table.ncols 8 N3 v# n4 u, z$ O
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名8 M6 X, k- H2 y5 w& _5 m7 H# k' ?
    data_list = table.col_values(1,start_rowx=1); |4 e5 r8 |' j6 Q6 g
    # print(data_list)4 v  f& X" h- P
    " Q& W. M# I, M: z
    '''+ W4 H0 m! s4 @. @/ s: K( ]
        计算角度* P# U% t/ p3 T7 B, S- d2 P, c8 ^# M
    '''
    $ w$ x" ^" T% E. Vn = table.nrows-1           #去掉列名
    2 ?6 o3 A! |6 R( |, mtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份8 b/ H  P. _. d2 Y. ^0 U" ?/ u5 m

    3 s& D7 _/ Z  t'''
    9 J$ J# Z& ~; Q6 `7 b& V* T) v1 m    作图" k7 d: u; p# E& F; v
    '''
    ( y; H$ A& c/ \. G; a& \2 G# 设置画布- o5 N' o6 s$ U1 o/ z
    fig = plt.figure(figsize=(12,10))3 e5 E3 S5 n$ ^1 v/ U2 u& U" l- X: |
    # 极坐标
    5 m/ |! v  O0 r/ Z  e$ ]ax = plt.subplot(111,projection = 'polar')
    $ t. l9 a' k5 c7 V4 s- y: Q7 j. _+ _# t# 顺时针并设置N方向为0度
    0 t6 h- i8 P$ bax.set_theta_direction(-1)1 L7 a7 e( X- H2 n3 d0 q
    ax.set_theta_zero_location('N')
    - }! R# z5 W! D1 X" I1 a+ b% A! a$ O+ @- {) P
    # 在极坐标中画柱形图
      m7 l0 r" t/ e, Oax.bar(theta,
    0 o* W6 q4 w: z4 B- j        data_list,
    " g( P" U) t5 H: d- {  K        width = 0.33,
    / R: l" A; p5 d- u9 z9 |( M        color = np.random.random((len(data_list),3)),
    * J7 e! z+ M6 ~; w0 m/ b& L        # labels=str(country_list),
    * u3 r2 I" I) ~) {        align = 'edge')
    2 \6 M, i9 m  O8 V+ V; D# t''' " X% P7 P- w; F
        显示一些简单的中文图例
    9 f+ r+ ?9 ?$ \6 W8 `" K3 {# a'''
    ) \0 S  s, w$ h$ |0 Rplt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    0 {* B& G- _' l& y) n2 J5 j' e& Pax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})& G$ I$ ^+ d4 E3 ~
    for angle,data in zip(theta,data_list):& j5 C3 ?. y6 l! P
        ax.text(angle+0.03,data+100,str(data))
    $ D4 ?- [: B( H" w2 ^; \; A$ v1 J( u8 B- Z

    . H6 x# U+ k5 W* Fplt.axis('off')9 X7 d! K* a7 B5 d3 H
    6 Q1 p/ D: y* ~$ T% [: v: X' t
    plt.savefig('Nightingale_rose.png')8 q8 I5 ^- J8 u" K7 I/ ?
    plt.show()9 }3 L/ g6 ?# V
    , H4 }, T' V* M" l' m

    ( s' K$ c) |# V2.运行结果$ W' n2 O/ `3 T1 W
    1.png - Y: H  Z. O# t% k3 B
    & v8 ?* x) k9 w6 k4 G
    ' q" v7 R: Q" F3 _/ A7 z! {
    3.excel数据表$ r& [% z6 g2 B- v7 }: k3 Q) Y' x
    2.png
    7 x" p6 }, y" t: y
      x5 U: z, h/ D7 Q* E4.说明; ^, I( u2 k6 I/ m6 f; I6 T3 K6 O$ v
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    - v- ^/ k# t" C3 ^1 q  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    % A* ]4 o, `" z2 _8 c# J4 L. Q% d: d————————————————) Q3 Y& m- @" T# G: l8 i
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 q$ k! Q6 M4 W4 l& ~" y9 c
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852& P# L; A% G/ ^7 c

    * n/ e& T1 D% z( [; A% A% l
    % g* M5 ]' b. O- o' j3 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-17 22:47 , Processed in 1.909710 second(s), 54 queries .

    回顶部