玫瑰图是弗罗伦斯·南丁格尔所发明的。又名为极坐标面积图,是一种圆形的直方图。 南丁格尔自己常昵称这类图为鸡冠花图(coxcomb),适用于绘制比较、随时间变化的循环现象。和传统的饼图展示形式单一相比,南丁格尔玫瑰图更加绚丽,给人的感觉更直观、深刻,因此,南丁格尔玫瑰图在数据可视化领域的应用十分广泛。

今天,总结了Python代码绘制南丁格尔玫瑰图的方法,代码亲跑无误哦!

另外,还是老样子,值得深入学习的知识,添加了对应的官方文档链接!

1. 利用Matplotlib画南丁格尔玫瑰图

1.1 模块导入

from matplotlib import pyplot as pltimport pandas as pdimport numpy as npimport matplotlib

1.2 设置整体配置

首先,我们需要设置图片大小:dpi参数的大小决定了图片的清晰度。

fig = plt.figure(figsize=(10,6),dpi=400)

其次,设置图形位置和投影方式:

ax = plt.subplot(111, projection="polar")     # polar 投影(扫描方式,自正北方向顺时针)

更多关于matplotlib.projections的知识,请戳官方文档链接:https://matplotlib.org/api/projections_api.html

再有,规定正北方向:

ax.set_theta_zero_location("N")

最后,设置扫描方向:顺时针(-1)or逆时针(1)

ax.set_theta_direction(-1)

1.3 数据准备

以下数据都是我“绞尽脑汁”随机编的,大家随后可以自由替换数据。

p =['西藏','山东','河南','河北','北京','上海','天津','广东','湖北','湖南','宁夏','山西']r = [10,20,30,40,50,60,70,80,90,100,110,120]theta=np.linspace(0, np.pi*2, len(r), endpoint=False)       # 角度

numpy.linspace(start,stop,num=50,endpoint=True)

start:这个参数表示这个序列的开始值。

stop:这个参数表示这个序列的终止值。

num:可选参数,默认值为50,表示要生成的样本数。

endpoint:可选参数,默认值为True,此时stop是最后的样本。为False时,不包含stop的值。

1.4 绘制柱状图

ax.bar(theta,r,                                                   # theta角度对应位置,r半径对应高度      width=np.pi/6,                                           # 宽度      color=np.random.random((len(r),3)),        # 随机产生颜色      align="edge",                                            # 从指定角度的径向开始绘制      bottom=100  )                                           # 原理圆心,设置偏离距离

1、np.pi是一个常数表示圆周率π,2×np.pi就相当于2π。

2、align:{'center','edge'},可选参数,默认:'center',控制对其方式。

3、color也可以自定义,只要前面加一个自定义的颜色列表就可以,下一种方法我们用自定义的颜色。

1.5 顶部显示文本

for angle, height, text in zip(theta, r, p):    ax.text(angle+0.25, height+120, str(text), fontsize=9)      # 设置显示文本的位置以及字体大小matplotlib.rcParams['font.sans-serif']=['simsun']                  # 显示字体为宋体

matplotlib.pyplot.text(x,y,s,fontdict = None)

向轴添加文本,在字符串中添加文本s到轴的位置,x,y表示数据的坐标。

更多关于matplotlib.pyplot.text的知识,请戳下面官方链接:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.text

1.6 去掉坐标轴和网格线

plt.axis("off")

1.7 保存图片

plt.savefig("南丁格尔图.png")

1.8 查看图片





2. 利用Pyecharts画南丁格尔玫瑰图

2.1 模块导入

from pyecharts.charts import Piefrom pyecharts import options as optsfrom snapshot_selenium import snapshot as driverfrom pyecharts.render import make_snapshot

2.2 数据准备

没错儿,以下数据也是我“绞尽脑汁”随机编的,大家随后可以自由替换数据。

drink =['可乐','雪碧','咖啡','奶茶','青岛','百威','橙汁','红茶','绿茶','百岁山','农夫山泉','江小白','茅台']price = [10,20,30,40,50,60,70,80,90,100,110,120,130]color_series = ['#4e70f0', '#ffce2b', '#00c5d2', '#ff812c', '#ff5a5a','#f95dba','#a64dff']

2.3 绘制饼图

pie = Pie(init_opts=opts.InitOpts(width='1200px',height='1000px'))     # 设置长和宽

2.4 添加数据

pie.add("",[list(z) for z in zip(drink, price)],       radius = ["30%","75%"],                    # 控制饼图半径大小       center = ["50%","60%"],                   # 设置图中心点的位置坐标       rosetype="area")                              # 设置展示南丁格尔图

2.5 显示标题和图例

pie.set_global_opts(title_opts=opts.TitleOpts(, sub),                    legend_opts=opts.LegendOpts(is_show=True, pos_top="8%", pos_bottom="92%"))

2.6 设置标签和颜色

pie.set_series_opts(label_opts=opts.LabelOpts(is_show=True,          # 是否显示标签                                              position='outside',                               # 标签的位置(可选“inside”)                                              font_size=12,                                        # 字体大小                                              formatter="{b}:{c}",                               # 显示格式                                              font_style='italic',                                  # 斜体                                              font_weight='bold',                              # 粗体                                              font_family='Microsoft Yallei'))             # 微软雅黑pie.set_colors(color_series)                                                                 # 设置颜色

formatter处的 {b} 和 {c} 均为模板变量,在饼图中,{b}表示数据项名称,{c}表示数值。

2.7 保存图片

==第一种方式==保存为HTML格式

pie.render("meiguitu.html")

==第二种方式==保存为PNG格式

make_snapshot(driver, pie.render(), "meiguitu.png")

2.8 查看图片