【plt.hist】—绘制多张直方图时的直方图像丢失问题解决方案

项目场景:

目前有两种类别的数据,需要分别对其绘制直方图并放置在同一Figure内进行对比,判断两种类别间特征数据的差异。

解决方案记录此文。


问题描述

使用到多条数据,这些数据可分为两个类别,类别集合存放在group_label里,每条数据的类别存放在label里,通过对所有的group_label循环,绘制不同类别的数据直方图。

fig = plt.figure()
for each in group_label:	
	# label为
    fig_data = data[[True if i == each else False for i in label]]
    plt.hist(fig_data[:, dim], alpha = 0.8, label=each, density=False)
plt.legend()

在使用for循环绘制直方图时,造成某一种类别的直方图丢失。
在这里插入图片描述
如上图所示,其中0类别并没有显示在直方图里。


原因分析:

首先,开始对两个类别分别绘制直方图查看差异。
在这里插入图片描述

在这里插入图片描述
发现二者的横坐标范围不同,且相差很大:

类别0: (0, 6)
类别1: (1.81571, 1.815715)

而在同时绘制的直方图中,横坐标范围为:

(0.75, 2.75)

这里发现可能时坐标范围的问题。


解决方案:

在plt.hist中存在range参数可以限制绘图的区间范围

更改代码如下

fig = plt.figure()
data_min = np.min(data, axis=0)
data_max = np.max(data, axis=0)
for each in group_label:
	fig_data = data[[True if i == each else False for i in label]]
	plt.hist(fig_data[:, dim], alpha = 0.8, label=each, range=(data_min[dim], data_max[dim]))
plt.legend()

即使用range限制横坐标的范围,解决部分直方图丢失问题。

效果图如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_48691686/article/details/124502676