QQ登录

只需要一步,快速开始

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

    1 a7 E; X& R% z% s1 b% {; d* v6 B" ?! Opython+matplotlib绘制南丁格尔玫瑰图
    $ G( r# E  p8 H8 w/ e实验:绘制南丁格尔玫瑰图
    1 T) Q9 ?+ y: J# G* u% B$ N6 b2 O  本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~4 R! P6 W( r4 \# X5 J
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.7 t; E2 H& Y' k

    : ]+ Y. ]( r0 h8 |% T文章目录" W# X. u- W/ P4 u& n

    : {. b" z9 s3 e8 _一、实验目的' q3 J: j. f# w' a9 ~
    二、实验内容  _8 x$ K% S. X- p+ M
    三、实验环境
    4 x/ {  ~+ |- G9 V. v2 m四、实验步骤: T7 A' @2 |, C" _2 [% ]  `
    五、实验代码及测试
    / _: T9 o5 u6 r! C6 e, v1.源代码
    , f7 N6 E0 D: I0 g  Z, H2.运行结果
    * t$ I) J# @4 D: V, E3.excel数据表3 D$ D! W" A1 b$ Z
    一、实验目的' O7 ]" E! Z7 h+ V' Z# j" B

    2 w8 [1 x- D+ ~  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。
    $ Q! K; X6 B$ j" L& O/ h& ?2 m" N/ r0 z( g8 Y& _
    二、实验内容, V  C" O) T7 P/ z: w( b% u

    % Y' L6 b4 ~6 V. Z  ?- r  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    # c6 u: J6 `+ w/ x& l2 T: P# |3 J3 w  自行选择一组数据,画出基础玫瑰图。2 F  J  x# Z+ d- c1 L) b

    ' N8 X+ V& m8 e3 I3 ?' w- ?" x三、实验环境6 W) _2 g6 y+ d8 i) f0 M
    ) ~- ^, W! I) M- G5 J
      ython 3.8  p: b& l9 P3 L3 o7 Z* |9 L

    0 M7 u) ^4 s$ ~7 T5 {四、实验步骤% E/ D6 ]3 \* \; x2 h

    2 A- \+ e" A+ U' S+ \( |查阅文档,了解南丁格尔玫瑰图的原理。
    , \, ~+ R1 R. x5 @' D选择一组数据,编写程序画出玫瑰图。9 Z7 y( F2 p! x6 c$ t$ k3 L
    五、实验代码及测试
    8 o4 k1 n' |3 E
    # Z- g7 V/ H5 X: V# s1 z4 r/ [- @/ f1.源代码
    / v# D! k3 ]5 k& R4 j" t
    9 m) T8 |5 t- r& N0 V1 G4 S& [import matplotlib.pyplot as plt3 v5 g% T, f. y- E) h
    import numpy as np+ K' P+ v& r, P- }. d
    import xlrd
    * |6 P% X7 w. Z% N
    5 A& v5 P6 c5 U, b- P% [; x'''
    $ F+ _9 [" r* S3 z( z8 M    按列读取excel文件并存入两个列表6 e- t  g, x3 E# _9 o, Q9 q
    '''
    6 }1 j8 V! U) Y% zdata=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') ( P* E+ h3 J" R6 e3 o
    table  = data.sheets()[0]   #通过索引顺序获取工作表$ t* g  l# e7 r$ x# R" t/ D- m
    cols_n = table.ncols
    ; Z' A4 X  Y" s" ~1 ocountry_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名" t$ I! I: Q& S0 I
    data_list = table.col_values(1,start_rowx=1)
    & W' Y$ R3 O  v  L# g# print(data_list)  f7 u* d& i4 p6 _: Y% L
    ( I8 J, U1 P* b% Z+ W/ U
    '''
    9 Q, r% a+ ?/ b  D9 Q    计算角度; O1 C/ @0 w+ O6 i0 H& W
    '''
    + p  b* T. q! L, V5 {# ?: Q" tn = table.nrows-1           #去掉列名
    3 a! E. n/ z1 A( @$ g: J. Ztheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份4 S3 }- b  G- z. t1 S
    ) \- P+ ]* g0 R# n
    '''/ L# Q: P! ^8 P1 W) B" D
        作图  ^0 }) W/ c3 T. R! l
    ''') {7 X3 n4 j, l/ @1 M
    # 设置画布
    2 P1 g9 n+ r( v' f. d! xfig = plt.figure(figsize=(12,10))( D; g$ J8 m/ ^4 p
    # 极坐标
    ' f0 V- I' L# d! q" Lax = plt.subplot(111,projection = 'polar')
    ' }( P% X+ U+ i  }! Z$ R4 U# 顺时针并设置N方向为0度3 N. t$ o+ T+ Q# I5 B6 B; o  H
    ax.set_theta_direction(-1)
    + J- f& Y# [+ x* Lax.set_theta_zero_location('N')
    . @5 f7 v! Q8 G* F+ V0 ?7 q' m4 D9 ^6 G1 Z8 _0 i) s+ c
    # 在极坐标中画柱形图3 J% }5 ^  _* b0 a
    ax.bar(theta,
      m' U3 T* n6 ^5 o        data_list,
    5 s7 A% e, i' m* V6 s1 F        width = 0.33,1 p3 F2 B* V2 D+ ?. S: R
            color = np.random.random((len(data_list),3)),8 s$ c4 e; Z! \  s( h) x/ {# @
            # labels=str(country_list), : M+ b  i) e& c
            align = 'edge')' ?) v, V+ B( c; Z' l' t. S
    '''
    . O3 ~. v0 m9 W- K5 x8 ^) q# O    显示一些简单的中文图例
    2 N9 g4 y& ~: C% _'''  M+ e/ h! @* X7 P6 b
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    + \4 V% k  e4 e5 i* z. a- p7 [ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})# K0 K3 n' ~4 u+ J  D& d8 V+ j
    for angle,data in zip(theta,data_list):
    ' G( k  p; c+ ?* @. s& A" y! L    ax.text(angle+0.03,data+100,str(data)) 0 X8 d- z# Y! ^# X& j) \

    7 G% M( `) b3 V6 L8 z/ W% j
    # K0 m' |; x2 L8 N" ^4 kplt.axis('off')
    5 c8 J* ]4 {4 O% y! _! S2 i+ o
    / N# H6 q0 u) T6 X3 j8 jplt.savefig('Nightingale_rose.png')
    & V" D# {& a. d, b% _plt.show()
    , g  t: ]3 l: c) h0 [' q. O% S# _! S' R, s) _/ P) J& p/ i! R7 L
    # G3 P9 N! q, h# T! g& T! y
    2.运行结果
    % y0 u& U) E, _6 t  V; q" x 1.png ) n! a9 k0 C  M3 I4 L

    $ F: \4 I/ z: z1 S. Y& O  P
    . v. Y4 T7 v( N" k( {. ~7 u3.excel数据表
    % l: i! q4 x" }- ^& W6 i  n 2.png
      H* }1 W- W& h1 n; [
    3 ~4 ^' H  `7 i4.说明4 N( M- H/ c# S4 n: `- d
      四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.
    * t/ Q9 y& D0 `( B! S2 B, h3 ?. ^  实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.6 |3 E' E. m  |* k' D/ ^% ]# D
    ————————————————
    9 |/ F, i& h1 ]7 B2 Z* W0 g; o版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ! F: X9 m$ p3 p  s, N原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852: @2 N5 w3 J8 }* K
    1 v2 X: [5 Q% Q# U$ D& }# q7 q: \: `

    . ]. W6 H4 q: O& D+ L; S
    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, 2025-9-14 05:40 , Processed in 0.423645 second(s), 54 queries .

    回顶部