如何用matplotlib绘制柱状图,并显示超出坐标范围的数据 您所在的位置:网站首页 用matlab画柱形图 如何用matplotlib绘制柱状图,并显示超出坐标范围的数据

如何用matplotlib绘制柱状图,并显示超出坐标范围的数据

2023-01-15 22:20| 来源: 网络整理| 查看: 265

最近在处理数据,为了方便展示,需要绘制柱状图进行可视化。数据类似对数正态分布,即数据值越接近均值,数据越多,反之距离均值越远,数据量越少,形式类似于下图,可以看到,大部分数据落在0~10以内,大于10的部分我们不太关心。

import numpy as np import matplotlib.pyplot as plt a = np.random.lognormal(0,1,10000) plt.hist(a, bins=20, edgecolor='black') plt.show()

那么,如果只需要展示0~10的数据,我们可以通过bins设置坐标轴范围来解决,但这样就完全丢失了大于10的数据,有什么方法可以既显示0~10的数据,又不损失大于10的数据呢?

查阅资料发现,可以使用numpy的np.clip()来实现,该方法可以将数据限制在指定的范围内,举例来说:

>>> a=np.arange(10) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.clip(a,0,5) array([0, 1, 2, 3, 4, 5, 5, 5, 5, 5])

于是可以用np.clip()处理超出坐标范围的数据,代码如下:

import numpy as np import matplotlib.pyplot as plt a = np.random.lognormal(0,1,10000) x_min, x_max, step = 0, 10, 1 x_range = np.arange(x_min - step, x_max + 2*step, step) x_label = np.concatenate((np.array([r'$-\infty$']), np.arange(x_min, x_max + step, step), np.array([r'$+\infty$']))) b = np.clip(a, x_min - step, x_max + step) plt.hist(b, bins=x_range, edgecolor='black') plt.xticks(x_range, labels=x_label) plt.show()

最终实现的效果如下,在抓住重点数据的同时,也没有使数据量有损失

参考:

https://stackoverflow.com/questions/26218704/matplotlib-histogram-with-collection-bin-for-high-values



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有