Travel Tips
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
极坐标图、雷达图、箱型图
调用subplot()创建子图时通过设置projection='polar',便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图
先创建极坐标,使用折线图,柱状图进行填充, plt.polar进行创建
# 创建极坐标轴
# 雷达图就是在极坐标中的折线图
s = pd.Series(np.arange(20)) theta=np.arange(0,2*np.pi,0.02) print(s.head()) print(theta[:10]) # 创建数据 fig = plt.figure(figsize=(8,4)) ax1 = plt.subplot(121, projection = 'polar') ax2 = plt.subplot(122) # 创建极坐标子图 # 还可以写:ax = fig.add_subplot(111,polar=True) ax1.plot(theta,theta*3,linestyle = '--',lw=1) ax1.plot(s, linestyle = '--', marker = '.',lw=2) ax2.plot(theta,theta*3,linestyle = '--',lw=1) ax2.plot(s) plt.grid() # 创建极坐标图,参数1为角度(弧度制),参数2为value # lw → 线宽
theta=np.arange(0,2*np.pi,0.02) plt.figure(figsize=(8,4)) ax1= plt.subplot(121, projection='polar') ax2= plt.subplot(122, projection='polar') ax1.plot(theta,theta/6,'--',lw=2) ax2.plot(theta,theta/6,'--',lw=2) # 创建极坐标子图ax ax2.set_theta_direction(-1) # set_theta_direction():坐标轴正方向,默认逆时针 ax2.set_thetagrids(np.arange(0.0, 360.0, 90),['a','b','c','d']) ax2.set_rgrids(np.arange(0.2,2,0.4)) # set_thetagrids():设置极坐标角度网格线显示及标签 → 网格和标签数量一致 # set_rgrids():设置极径网格线显示,其中参数必须是正数 ax2.set_theta_offset(np.pi/2) # set_theta_offset():设置角度偏移,逆时针,弧度制 ax2.set_rlim(0.2,1.2) ax2.set_rmax(2) ax2.set_rticks(np.arange(0.1, 1.5, 0.2)) # set_rlim():设置显示的极径范围 # set_rmax():设置显示的极径最大值 # set_rticks():设置极径网格线的显示范围
plt.figure(figsize=(8,4)) ax1= plt.subplot(111, projection='polar') ax1.set_title('radar map\n') # 创建标题 ax1.set_rlim(0,12) data1 = np.random.randint(1,10,10) data2 = np.random.randint(1,10,10) data3 = np.random.randint(1,10,10) theta=np.arange(0,2*np.pi,2*np.pi/10) # 创建数据 ax1.plot(theta,data1,'.--',label='data1') # x为度数,y为值 ax1.fill(theta,data1,alpha=0.2) ax1.plot(theta,data2,'.--',label='data2') ax1.fill(theta,data2,alpha=0.2) ax1.plot(theta,data3,'.--',label='data3') ax1.fill(theta,data3,alpha=0.2) # 绘制雷达线
labels = np.array(['a','b','c','d','e','f']) # 标签 dataLenth = 6 # 数据长度 data1 = np.random.randint(0,10,6) data2 = np.random.randint(0,10,6) # 数据 angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) # 分割圆周长 data1 = np.concatenate((data1, [data1[0]])) # 闭合 data2 = np.concatenate((data2, [data2[0]])) # 闭合 angles = np.concatenate((angles, [angles[0]])) # 闭合 plt.polar(angles, data1, 'o-', linewidth=1) #做极坐标系 plt.fill(angles, data1, alpha=0.25)# 填充 plt.polar(angles, data2, 'o-', linewidth=1) #做极坐标系 plt.fill(angles, data2, alpha=0.25)# 填充 plt.thetagrids(angles * 180/np.pi, labels) # 设置网格、标签 plt.ylim(0,10) # polar的极值设置为ylim
plt.figure(figsize=(8,4)) ax1= plt.subplot(111, projection='polar') ax1.set_title('radar map\n') # 创建标题 ax1.set_rlim(0,12) data = np.random.randint(1,10,10) theta=np.arange(0,2*np.pi,2*np.pi/10) # 创建数据 bar = ax1.bar(theta,data,alpha=0.5) for r,bar in zip(data, bar): bar.set_facecolor(plt.cm.jet(r/10.)) # 设置颜色 plt.thetagrids(np.arange(0.0, 360.0, 90), []) # 设置网格、标签(这里是空标签,则不显示内容)
箱型图:又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图
包含一组数据的:最大值、最小值、中位数、上四分位数(Q1)、下四分位数(Q3)、异常值
① 中位数 → 一组数据平均分成两份,中间的数
② 下四分位数Q1 → 是将序列平均分成四份,计算(n+1)/4与(n-1)/4两种,一般使用(n+1)/4
③ 上四分位数Q3 → 是将序列平均分成四份,计算(1+n)/4*3=6.75
④ 内限 → T形的盒须就是内限,最大值区间Q3+1.5IQR,最小值区间Q1-1.5IQR (IQR=Q3-Q1)
⑤ 外限 → T形的盒须就是内限,最大值区间Q3+3IQR,最小值区间Q1-3IQR (IQR=Q3-Q1)
⑥ 异常值 → 内限之外 - 中度异常,外限之外 - 极度异常
plt.plot.box(),plt.boxplot()
fig,axes = plt.subplots(2,1,figsize=(10,6)) df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray') # 箱型图着色 # boxes → 箱线 # whiskers → 分位数与error bar横线之间竖线的颜色 # medians → 中位数线颜色 # caps → error bar横线颜色 df.plot.box(ylim=[0,1.2], grid = True, color = color, ax = axes[0]) # color:样式填充 df.plot.box(vert=False, positions=[1, 4, 5, 6, 8], ax = axes[1], grid = True, color = color) # vert:是否垂直,默认True # position:箱型图占位
# pltboxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None,
# usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None,
# labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False,
# zorder=None, hold=None, data=None)
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) plt.figure(figsize=(10,4)) # 创建图表、数据 f = df.boxplot(sym = 'o', # 异常点形状,参考marker vert = True, # 是否垂直 # whis = 1.5, # IQR,默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置 whis = [5,95], patch_artist = True, # 上下四分位框内是否填充,True为填充 meanline = False,showmeans=True, # 是否有均值线及其形状 showbox = True, # 是否显示箱线 showcaps = True, # 是否显示边缘线 showfliers = True, # 是否显示异常值 notch = False, # 中间箱体是否缺口 return_type='dict' # 返回类型为字典 ) plt.title('boxplot') # print(f) # 设置样式 for box in f['boxes']: box.set( color='b', linewidth=1) # 箱体边框颜色 box.set( facecolor = 'b' ,alpha=0.5) # 箱体内部填充颜色 for whisker in f['whiskers']: whisker.set(color='k', linewidth=0.5,linestyle='-') for cap in f['caps']: cap.set(color='gray', linewidth=2) for median in f['medians']: median.set(color='DarkBlue', linewidth=2) for flier in f['fliers']: flier.set(marker='o', color='y', alpha=0.5) # boxes, 箱线 # medians, 中位值的横线, # whiskers, 从box到error bar之间的竖线. # fliers, 异常值 # caps, error bar横线 # means, 均值的横线,
df = pd.DataFrame(np.random.rand(10,2), columns=['Col1', 'Col2'] ) df['X'] = pd.Series(['A','A','A','A','A','B','B','B','B','B']) df['Y'] = pd.Series(['A','B','A','B','A','B','A','B','A','B']) print(df.head())
df.boxplot(by = 'X') df.boxplot(column=['Col1','Col2'], by=['X','Y']) # columns:按照数据的列分子图 # by:按照列分组做箱型图
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor
December 4, 2020 at 3:12 pm
Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.
December 4, 2020 at 3:12 pm
我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum
Rosie
6 minutes ago