玫瑰图是弗罗伦斯·南丁格尔所发明的。又名为极坐标面积图,是一种圆形的直方图。 南丁格尔自己常昵称这类图为鸡冠花图(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 查看图片
大家可以通过评论或私信的方式提出对本文的建议,也可以通过点赞加转发的方式表达对本文的支持!
感谢大家!!!
如果需要代码,请大家在评论区留言即可,如果方便的话,也可随手来个转发关注噢。
参考资料:
1、董付国:《Python数据分析、挖掘与可视化》
2、pyecharts调整图例与各板块的位置间距:https://blog.csdn.net/jerurry/article/details/100660056?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2
3、可视化之pyecharts详细配置绘制图表:https://blog.csdn.net/miner_zhu/article/details/81949004?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
4、numpy.linspace函数:https://blog.csdn.net/rainpasttime/article/details/79847674
5、南丁格尔玫瑰图:https://baike.baidu.com/item/%E5%8D%97%E4%B8%81%E6%A0%BC%E5%B0%94%E7%8E%AB%E7%91%B0%E5%9B%BE/19510516?fr=aladdin
6、python科学画图——bar()函数:https://blog.csdn.net/beyond9305/article/details/82958683