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

最近在处理数据,为了方便展示,需要绘制柱状图进行可视化。数据类似对数正态分布,即数据值越接近均值,数据越多,反之距离均值越远,数据量越少,形式类似于下图,可以看到,大部分数据落在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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值