1、绘制南丁格尔玫瑰图的步骤:
数据准备工作:准备好角度数值和半径数值。 建立画布,并将直角坐标转化为极坐标。并对极坐标进行一定的设置。 使用bar函数进行绘图。 对图形进行美化处理。
2、上代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure,show,rc
from matplotlib import cm,colors
plt.rcParams["patch.force_edgecolor"] = True
plt.rcParams['font.sans-serif']='SimHei' #设置中文显示,以及字体样式
# 解决负号无法正常显示的问题
plt.rcParams['axes.unicode_minus']=False
plt.rc('axes',axisbelow = True)
mydata = pd.DataFrame(dict(day =["Mon","Tue","Wed","Thu","Fir","Sat","Sun"],Price = [50,60,70,20,90,110,30]))
n_row =mydata.shape[0]
angle = np.arange(0,2*np.pi,2*np.pi/n_row) #准备角度
radius = np.array(mydata.Price) #准备半径
fig = figure(figsize=(4,4),dpi=90) #绘制极坐标
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar = True) #从二维直角坐标系转换成极坐标系
ax.set_theta_offset(np.pi/2-np.pi/n_row) #设置角度
ax.set_theta_direction(-1)
ax.set_rlabel_position(360-180/n_row) #设置弧度
plt.bar(angle,radius,color=["#EE82EE","blue","red","green"],edgecolor="k",width=0.90,alpha=0.9)
plt.xticks(angle,labels=mydata.day) #调用坐标轴标签
plt.ylim(-15,125) #设置y的取值范围,让中间出现圆圈
# 显示Y轴的数字标签
#plt.yticks([])
plt.yticks(np.arange(0,120,20),verticalalignment="center",horizontalalignment='right')
#设置网格线
plt.grid(which="major",axis='x',linestyle='-',linewidth='0.5',color='gary',alpha=0.5)
plt.grid(which="major",axis='y',linestyle='-',linewidth='0.5',color='gary',alpha=0.5)
# 添加数值
for a,b in zip(angle,radius):
plt.text(a+0.05,b+20,b,ha='center',va='center',fontsize=10)
#显示
plt.show()
3、相关解释
matplotlib.pyplot.grid(b=None, which='major', axis='both',**kwargs )
b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。 which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。 axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。 **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。