QQ登录

只需要一步,快速开始

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

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

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

5273

主题

81

听众

17万

积分

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

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

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

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-30 15:09 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    ( D, y2 _' k# H" Xpython+matplotlib绘制南丁格尔玫瑰图: l# C, M- a+ O3 ?* l
    实验:绘制南丁格尔玫瑰图1 |5 A+ m/ ^2 P& i% H
      本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~( }. s' m1 I% x- `. X! _. A
      无论如何还是感谢本次实验,虽然费了点时间但是我对函数画图有了一定深度的了解和掌握,草草在python之matplotlib库重要绘图函数简介里面记录了一下,因为内容太多没有一一写成博文,但是附加了一些别人博客的链接,还是很有帮助的.6 ]3 C: \2 b# h' a
      K. _1 p7 K9 S: q7 y: o# f
    文章目录
    , O: c) {2 u# E- \; `! o% G1 t' u0 c7 _6 P( w* B; W7 s; f
    一、实验目的
    6 [/ V" t* Q4 e6 d" ]" v9 q二、实验内容6 @! f" \. ~+ I2 [" J
    三、实验环境
    7 G) R/ R$ A3 Y. `7 {2 p, C& A四、实验步骤
    9 n! n+ `) |8 p五、实验代码及测试7 ~0 }+ J9 [* U4 k: @5 v# N
    1.源代码
    1 C  R6 @/ |- k! y& s5 V2.运行结果
    $ G( ]9 j; d2 E; L6 V' O3.excel数据表
    8 P+ \3 ~2 |6 d- h# r/ v. r一、实验目的* z" l/ X6 v3 r$ S+ d8 T4 z

    2 _  k7 |' {# m- c8 Z- p+ Z  了解玫瑰图的前世今生;了解matplotlib标准库中的pyplot模块;了解在极坐标系中绘制柱状图。+ z- E! q. R" f: y$ _- z

    3 I. P- O( E4 E' O二、实验内容4 k( n8 _; b9 w
    3 G: ?$ F( t! e& P8 T% B
      南丁格尔玫瑰图(Nightingale rose diagram)又名鸡冠花图(Coxcomb Chart)或极坐标区域图(Polar area diagram)。它将柱图转化为更美观饼图形式,是极坐标化的柱图。不同于饼图用角度表现数值或占比,南丁格尔玫瑰图使用扇形的半径表示数据的大小,各扇形的角度则保持一致。
    ! X/ k) w& t! m' E# I+ ^  自行选择一组数据,画出基础玫瑰图。- [0 r) ^( f: y% ~, i, N: B

    ! F) q) ?5 K& p/ d$ ]4 C# C0 _三、实验环境4 B) b+ n4 f3 A

    " F: `: D1 {0 a  ython 3.8" v" \( }6 d! E" }* m; o: p

    ' E/ p, j- }5 z' Y( O四、实验步骤
    ! U( Q0 Y! J; e0 I3 \4 i* i: T3 ^1 C! ~( O8 t$ O
    查阅文档,了解南丁格尔玫瑰图的原理。
    / E- a9 s+ ^6 h. k2 v选择一组数据,编写程序画出玫瑰图。
    4 o/ I1 W' X  l  q$ l; s五、实验代码及测试
    4 v7 g7 @9 h. t
    4 e  |& b& o7 S% ^1.源代码- g5 T" r. H% m0 C' r' _

    ) e% [( R7 V" ~  ~% Jimport matplotlib.pyplot as plt
    % u; ^/ u% E" i& a( [# bimport numpy as np
    # F8 j! g/ f$ n! Zimport xlrd
    * d+ W: Y* V7 \0 [" N0 ?# Z% c. ?  u0 D* ]2 n5 t9 s3 F9 T4 Q
    '''
    5 M; b8 j5 }! a* M+ }9 n    按列读取excel文件并存入两个列表
    7 n" x+ b# G& E6 l; O* r3 R2 _) r'''7 X2 d! n$ a/ F! c3 [/ S- j1 T
    data=xlrd.open_workbook(r'亚洲国家疫情数据.xlsx') * F6 f: _3 E% y
    table  = data.sheets()[0]   #通过索引顺序获取工作表7 Y: c, z% ]# \$ O* _
    cols_n = table.ncols ; I4 o6 \: w0 ?
    country_list = table.col_values(0,start_rowx=1) # start_rowx默认为0,设置为1去掉列名
    + ]& S: |: k. N3 L+ Jdata_list = table.col_values(1,start_rowx=1)
    6 [' o8 `! i3 z+ N; m# print(data_list)% q# c8 s& C" P  R
    6 S2 |3 F/ B( v- I6 {5 v
    '''
    , [/ T- N, V5 S+ V5 r/ b    计算角度
    " w* Q+ r; [, e7 t'''
    3 @6 P9 t7 i/ ]# [, Jn = table.nrows-1           #去掉列名
    4 {% i# r6 G/ ~8 G3 E& Q% Utheta = np.linspace(0,2*np.pi,len(data_list))    # 360度等分成n份
    & X1 R  ]8 J! V" z8 e- A9 p  B; ?8 |% \3 S, Q: s& u. y
    '''
    ! O% k; ~& x6 |/ L    作图
    & l( g9 E0 L4 N6 h5 Y4 R2 ~& B+ }: H'''  n2 X  S8 X! s6 A) y6 G
    # 设置画布
    " P% s$ l% B2 j5 S; pfig = plt.figure(figsize=(12,10))
    - D1 J0 a# v3 f' X2 m1 {8 `; k. z# 极坐标( V% Y& a5 o; o
    ax = plt.subplot(111,projection = 'polar')% y2 z5 i/ H) O, C& O  s
    # 顺时针并设置N方向为0度
    1 G, T4 y2 u% ~: lax.set_theta_direction(-1)
    9 Y2 q- _* Y. G% Z& s4 tax.set_theta_zero_location('N')
    ) @8 K* `& @/ s& T2 v
    & p0 X; x  i; x' H0 x) |( B# 在极坐标中画柱形图/ U' g0 E  Y0 P% O3 @
    ax.bar(theta,' V4 T' m+ b- m/ H# c# \, ]
            data_list,6 z2 k, I4 P3 R2 t" a7 h- w
            width = 0.33,8 m$ S* {: Z9 ?2 k4 f/ s% R) \6 k) U
            color = np.random.random((len(data_list),3)),
    4 u( `  E  N2 g+ {, [/ `        # labels=str(country_list), 9 X' e" l, S% d9 E
            align = 'edge')' o; y& w! o! U" {
    '''
    " T: v3 x- ]" d* `    显示一些简单的中文图例
    7 C. s# t: }& a: J% K'''8 `( C3 h/ ^+ O+ _1 ^9 s. |
    plt.rcParams['font.sans-serif']=['SimHei']  # 黑体& H' D* r5 X; @8 L
    ax.set_title('亚洲国家现存确诊',fontdict={'fontsize':20})9 z: P% Q4 ]4 I! p
    for angle,data in zip(theta,data_list):
    * A6 J) M# i0 c! G( ?+ [) C) V. m    ax.text(angle+0.03,data+100,str(data))
    3 i6 l% B' N. @0 D5 H) `6 O+ C) h: b
    ; D' U  c; F6 _( b% i
    plt.axis('off')$ l8 S7 @# O  t! l5 L- P

    3 [# C5 E5 @' L& bplt.savefig('Nightingale_rose.png')
    * M/ A3 Y& I# mplt.show()
    ) q$ m. t* U5 [! X
    ' P" k: T. j5 ], n' l' P$ L; i( ~' ^5 S: T8 c3 e
    2.运行结果" R3 O7 {  A5 h5 E1 R7 W
    1.png
    2 t' [8 a# y$ ~0 s& u* l
    8 l1 m- Z6 o& O  \8 h1 o3 R, y$ k2 m6 c, T4 t& b' V8 G
    3.excel数据表
    : A& c$ h: ^/ Q/ B 2.png
    3 c3 e# [- L! [( j2 R# E" s9 ]' m( y% Z: ?: |3 _
    4.说明
    ! o/ R/ [% C4 l' C& }4 K' B  四位数过长,而对应的图所占比例很小,所以在图上的标注有些重叠.- h8 W* `" c/ d; e. n. `
      实验让画出基础玫瑰图,并没有图例和标签的要求,而且给玫瑰图设置标签的步骤比较繁琐,所以没有涉及到.9 B( S6 B9 Q$ `6 d) I- C5 n
    ————————————————: B' F# X$ M1 {! B
    版权声明:本文为CSDN博主「小兰同学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。, R) z$ [+ M9 l& D* M. |
    原文链接:https://blog.csdn.net/weixin_42323041/article/details/106263852! s. o! g5 |5 H$ y. R% c  i* J
    4 g( T  m3 |# y; y

    4 b2 H, i, b1 ^/ t" J
    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-5-10 05:15 , Processed in 0.284196 second(s), 54 queries .

    回顶部