QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5957|回复: 0
打印 上一主题 下一主题

python+matplotlib绘制南丁格尔玫瑰图

[复制链接]
字体大小: 正常 放大
杨利霞        

5250

主题

81

听众

16万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-30 15:09 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    % o( m0 b8 N4 C+ ~5 F- o% N5 v
    python+matplotlib绘制南丁格尔玫瑰图
    ( y" o% t; x) w  {, _: v实验:绘制南丁格尔玫瑰图, O' ~. L% S7 M
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    * W! m( v, h5 j- v' B  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    ! E) R6 Z# s: p' ]  _7 L
    7 ?* D7 x: k- Y6 h, a文章目录! V0 _$ ?  y, J/ P1 X1 G/ H$ }: }

    1 ~  k& n) h2 ]5 `* F8 H8 B一、实验目的5 I; C) p3 M; C/ h6 Q
    二、实验内容
    ' f8 E; [: {: @, {9 C  X+ o三、实验环境" z& T- j6 H7 {9 G8 U
    四、实验步骤6 Y: T; b! |  J/ u: g* J; t
    五、实验代码及测试2 b  p0 r3 ~. p0 T/ B  W9 U
    1.源代码+ T' z1 Z7 e: U
    2.运行结果8 [, ]/ g) p% {! L( `/ ]
    3.excel数据表9 C( t' y* g- w
    一、实验目的( g" f6 _6 L' D1 }4 e

    % Q& }( ?' ~' _/ A- |: b( F  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。3 w$ @, W2 i5 e% G* w) T( F
    : i9 ?- t- u- }6 Z/ z* U
    二、实验内容/ G: s! N6 }0 ?# F4 }

    - }. F) q* h, f  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。: A- i; P' b7 H# u
      自行选择一组数据,画出基础玫瑰图。
    2 c1 M4 F! W* D& u. i
    ! y/ P* M0 c6 |$ d三、实验环境
    7 I$ L' y. |  P
    2 F4 u8 S9 X, A' ?; h$ ~9 d( {  ython 3.8
    5 c8 {1 T6 f) v3 t" N, i, E9 K& l8 s" }7 q9 h
    四、实验步骤
    5 Q, b- ^6 }$ P  ^( P) u9 x+ e- b  ^7 P' _" S
    查阅文档,了解南丁格尔玫瑰图的原理。
      B9 S% h6 U0 J+ ]选择一组数据,编写程序画出玫瑰图。1 o8 k5 D6 x7 n: Q# w
    五、实验代码及测试
    / ^* x7 d3 P' d5 w2 l* k- f5 X9 e$ [
    1.源代码' x, V  ^' @: s" U) i: j

    . W5 [( a3 @" ^# jimport matplotlib.pyplot as plt+ b$ N9 h/ {7 o; b5 Y' t
    import numpy as np
      i9 y4 f# h# K# b4 G: cimport xlrd3 P0 l8 R; e- t: T3 l
    3 [4 V( e7 v# `  k% M
    '''
    - ~$ ^, b1 s1 y& e3 C- q    按列读取excel文件并存入两个列表1 X+ o" ]" d6 u3 V2 j) m: p
    '''
    / `) `+ S4 Q2 ^* Y+ S. H# _data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    . Z1 u+ \; @- etable  = data.sheets()[0]   #通过索引顺序获取工作表2 x7 C! `6 F" D
    cols_n = table.ncols
    3 f9 h2 W' A3 ?2 l2 ]country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名+ z( P( N4 L2 d" _9 v+ q
    data_list = table.col_values(1,start_rowx=1)  m3 o/ g& h' y$ a* X! n! ?
    # print(data_list)% m5 G) |% m8 ~* w
    $ g- o5 q% U$ r7 k0 c& S
    '''
    ! T+ i* ]* C. e* W* ~2 I. N    计算角度
    + u9 j: v. b  ~* n( H8 @9 {! x2 W+ W'''8 x8 R+ j2 o! l, X" G; f; ?* h7 i
    n = table.nrows-1           #去掉列名
    - v. X% S) J9 I1 P9 [) n. u' L6 A3 Jtheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份* u8 o! ~& L  F( Q  w8 m8 r
    1 I8 A0 l5 M$ J
    '''% B5 Y6 E6 [- H. m8 b0 B
        作图, |: j# y: O0 @6 x) m
    '''
    , h* |3 [% ?2 n# 设置画布$ o3 O+ A# I! m
    fig = plt.figure(figsize=(12,10))
    ' C" u2 j9 D9 Z" R6 s: ]# 极坐标
    2 g  C, Z  ~+ _' I3 ]7 Aax = plt.subplot(111,projection = 'polar')
    ( \8 {2 Z& N) ~4 ^: ?. a- H% _* l# 顺时针并设置N方向为0度
    ! p$ D4 Q2 P6 `+ ~& Vax.set_theta_direction(-1), q, C) x. A3 d1 b
    ax.set_theta_zero_location('N') 6 {$ S% G% c. }" Q4 J7 w! j6 s

    4 ^- G- \; l0 m. O+ {. ^# 在极坐标中画柱形图
    / F- m  Z6 }0 t% b  u: A% n1 Lax.bar(theta,
    $ m- D! ^" g' R; a        data_list,
    7 H+ B8 T! z  _& A        width = 0.33,
    + e5 y/ ^4 O3 R  R        color = np.random.random((len(data_list),3)),
    ) N! P; A4 Y, x' [1 |) |        # labels=str(country_list),
    3 Q* X. K/ ^" X+ Q        align = 'edge')
    & U8 M: X3 L' _( i5 K4 M'''
    ( C" B! T8 `( m/ C* q    显示一些简单的中文图例
    + F$ P, R; F! h, [$ P' q/ N'''
    & z% V9 b9 S2 ]9 ]! eplt.rcParams['font.sans-serif']=['SimHei']  # 黑体7 w/ ~7 z8 s1 C6 {1 J* N0 }  d
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})
    . z4 v+ z7 U# J. Dfor angle,data in zip(theta,data_list):
    - d" I1 r" t7 y. N+ g3 p" B$ n    ax.text(angle+0.03,data+100,str(data))
    % k- U" Q2 H! S! b7 E' u' H/ G$ t( `$ R0 k- i2 W

    , ?0 W7 x; J1 w- M) Kplt.axis('off')
    * i; d( F! F$ c  v2 Q: F3 `' s( b1 C3 ]( W& O) O, q' y9 I
    plt.savefig('Nightingale_rose.png')
    . ~, I3 \3 r( \# Vplt.show()
    5 x" _4 `7 e' N0 ~8 r8 O. W! |1 N; o: }+ @# g; \
    ! |' [  X6 |  N' l2 p( f$ A7 _
    2.运行结果- a+ {5 N. M9 H
    1.png ! m8 M& f3 K' p- i. ~

    & }8 z! s  N  r# P8 y
    0 ]' E+ s$ K/ ?  B* _& a$ I3.excel数据表3 P: D# @, j4 j% \" N# _
    2.png
    ( D! d6 u$ v# }' F6 R5 S( S+ F4 C$ o+ B* }' V; y
    4.说明& `! E! Z+ h; [, E1 N
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.0 u( i- a" V! N: M. B
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    1 V6 x+ Z) Z8 |# B7 b————————————————, k' ]1 M- Q& x" l2 t; t: J) g+ e
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    & X) y3 }- t& T# e1 e. k( q原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852: r# W+ t6 \- d/ s4 V1 M; K& D

    & t* v$ V7 u+ `6 F7 L  H+ B5 C9 q* _' ^& \/ C) ^) 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, 2024-4-26 01:55 , Processed in 0.398182 second(s), 53 queries .

    回顶部