QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7465|回复: 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* j6 ^; |2 U$ bpython+matplotlib绘制南丁格尔玫瑰图
    ( h! e% [& X* x( m; c实验:绘制南丁格尔玫瑰图% n7 v  s  R, ^
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~
    ' i* k: ^* F' u* d: {  无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.
    - N1 ]7 h) B' c7 K. O( i6 F" _2 [2 ?# N, r) }! }
    文章目录0 A; i3 Q) Y0 U4 H1 ~' Q' n

    ' w8 D  @6 Y7 H: E, X! I一、实验目的
    " W2 D& L6 W# B: I( f2 x2 n1 t+ m二、实验内容
    , e* n; x; E: y1 [) l三、实验环境
    / [! ]& |( a2 {7 j四、实验步骤1 X# A# d% h6 x6 A* e7 N8 G
    五、实验代码及测试# R+ z6 Y; o9 D9 h& V
    1.源代码
    + K3 Z# |/ M4 D9 [2.运行结果$ E9 `# p' Y! @5 Q
    3.excel数据表3 }3 {7 X* t' l2 p
    一、实验目的
    , `" `) Q# E) ~1 U
    - D. q! q4 G( h2 q# e2 R5 Z  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。4 j1 C; @3 D. W8 j
      K- I6 ^5 ~( n) U* G( \" }/ P
    二、实验内容
    & C9 D/ d3 _) H! @
    8 t, F' D. F( T& X7 [  南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    % X# q) ?" V% q. f6 W  自行选择一组数据,画出基础玫瑰图。$ ]8 \: `# T5 T* @- d( ?+ o' T; N
    + J  k4 v4 W; o/ P9 g& L) x
    三、实验环境! v5 R# v  q. M1 M

    # Y' Z0 ]. Y& H  ython 3.84 n5 A. r+ m- [4 {$ N

    ' l* D1 f3 o  M, r2 ]四、实验步骤8 g+ s& `; o: @: A6 W5 e
    3 J# y% s1 {3 R5 a$ k
    查阅文档,了解南丁格尔玫瑰图的原理。
    . o: T! P: {6 s4 |, @' _* i5 n) |% d选择一组数据,编写程序画出玫瑰图。# R4 _4 h9 L  h, i3 f9 E
    五、实验代码及测试
    6 q, Z% z. Z  u4 ^% _3 {$ D# u! |3 _( ]" a) |% n& c
    1.源代码
    6 U8 s# p6 K, E) T" U! ~( T- t, q
    7 O; T" d' p4 D4 ?* s2 {import matplotlib.pyplot as plt
    ( {3 \6 q% @% B9 \! qimport numpy as np
    ' l4 U) }& m3 o- d4 |import xlrd+ a+ h/ _6 y& L0 i: }1 _; C/ {
    : x' k6 f, o7 v  Z5 V  f
    ''': i' k% {& P' \9 E, B+ _
        按列读取excel文件并存入两个列表
    . o* L- d1 Z- T: u: I'''9 A" V, a. D2 F6 q
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx')
    0 v/ G& ?$ r$ O0 wtable  = data.sheets()[0]   #通过索引顺序获取工作表
    - t) O3 t9 s, s9 R! S0 p5 k4 Mcols_n = table.ncols
    , {4 ]# }' B1 z& X( G' X1 ?country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名8 n. m4 d6 \( \  \
    data_list = table.col_values(1,start_rowx=1)
    8 A3 X: [, ~" Z8 ]7 w4 s# print(data_list)
    $ ~$ q7 R7 u  y; m- g- _8 z' K) Y' [4 l
    '''6 T, I! e& q9 d6 E5 E
        计算角度
    + ]  ^, C0 I0 l'''; Q' ]' S6 }7 W/ u4 @
    n = table.nrows-1           #去掉列名
    " A( K, N( a' T  j% Z" t6 Y5 g2 Ptheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份" H" v$ A0 q. ?4 c' G
    ' Q4 s" \" Z( r, P& w, p
    '''
    5 U; N8 z: _& j% j* H& R# r2 Q    作图
    / \1 N/ P. B7 p" h/ s'''
    0 Q6 G  v, g) @! N* Y3 j7 _( L# 设置画布+ @/ G6 P/ O; j$ Q7 n, l
    fig = plt.figure(figsize=(12,10))
    , E4 Y5 Y, j. T4 O' {1 |# 极坐标" M2 y  ?$ a7 |, f
    ax = plt.subplot(111,projection = 'polar')5 J. O! C0 j3 m! N6 ^5 A( s
    # 顺时针并设置N方向为0度
    / z" \* B+ M# f2 `, m. cax.set_theta_direction(-1)
    5 N9 T& `! c# K/ L: `- r! p8 }7 Xax.set_theta_zero_location('N') + x! J3 {# T0 \3 f' F4 o

    3 j" y8 x7 X/ Z6 ]9 U# 在极坐标中画柱形图
    9 J8 Y! U! k- w9 R4 D- O6 ?ax.bar(theta,
    # j6 u* E# h6 S( \1 l        data_list,* \$ ?; k- J& k
            width = 0.33," k8 C2 C- O% b* G3 f; H
            color = np.random.random((len(data_list),3)),
    6 V' M1 F+ G" a1 y        # labels=str(country_list),
    ! R9 q4 r% f( Y( x4 O        align = 'edge')
    * {2 D: F' ^3 G/ b8 p" U  ?'''
    3 `/ l9 g# ^0 q( Y3 u7 s$ X    显示一些简单的中文图例
    2 Z* ?: N  _3 b6 S0 d) l'''+ r$ O2 z2 ^. u$ E
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体
    8 u6 G% W  b2 P. Z3 ]+ b, m" ~% Gax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})/ S6 u' |/ B* R) e: D$ a. a9 E
    for angle,data in zip(theta,data_list):
    ! N6 I5 x  {9 K2 U    ax.text(angle+0.03,data+100,str(data))
    2 m9 C) f' L6 n& d% i! A9 R3 y2 B+ P9 p5 N

    ( {  U$ m! e- P# V& j8 l8 H" J- `plt.axis('off')+ l  j5 i: @; _5 H
    - K8 j. _5 V' P3 L9 k
    plt.savefig('Nightingale_rose.png')1 S' V* x# |( J' h. ?+ M
    plt.show()
    1 d& B  i7 _7 m7 w3 q
    1 a6 `2 @$ Z- N* a) }5 b; w8 C' U* v$ P# ]3 m+ l
    2.运行结果7 e( z4 r2 N( k6 Z/ y1 h
    1.png 5 o+ \  u( Q5 s
    * U; j1 C  B. V" b

    : v* H$ x: R- b) k4 K' Z3.excel数据表
    2 X+ s7 S  [1 [ 2.png + F5 y; a: G( _9 y/ f3 {

    : l. y- R& E( e" a5 k& j, e4.说明
    : b3 ?, c: D$ W5 ~  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.5 P1 H/ C* B, |' I
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.
    6 q" A3 {$ g' X' \: P————————————————7 `/ J* r3 s& f' g' ^
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。7 r& R* ?" v  }; @$ U& h
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852
    : _  G7 n% u# H( R4 V& \+ x% v8 c
    + t- e9 d7 m: Z$ ?. f
    1 Y% w" E# H% 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, 2025-9-15 12:09 , Processed in 1.698021 second(s), 53 queries .

    回顶部