项目场景:
目前有两种类别的数据,需要分别对其绘制直方图并放置在同一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限制横坐标的范围,解决部分直方图丢失问题。
扫描二维码关注公众号,回复:
16400461 查看本文章
效果图如下: