当前位置: 首页 > 知识库问答 >
问题:

matplotlib直方图中的非均匀轴

穆仲卿
2023-03-14

我想使用Matplotlib绘制一个带有非均匀x轴的直方图。例如,考虑下面的直方图:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
      0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
      0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
plt.hist(values)
plt.show()

第一个箱子的密度很高,所以我想放大。

理想情况下,我想将x轴中的值更改为[0,0.005,0.01,0.02,0.05,0.1,0.2,0.5,1],保持图中的箱宽度不变(当然不是数字)。有没有简单的方法来实现这一点?欢迎任何意见或建议。

共有2个答案

缪嘉志
2023-03-14

André的解决方案很好,但是面元宽度不是恒定的。使用log2 x轴符合我的要求。我使用np.logspace使图中的容器宽度保持不变。

这就是我最后做的:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
        0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
        0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
bins = np.logspace(-10, 1, 20, base=2)
bins[0]=0
fig, ax = plt.subplots()
plt.hist(values, bins=bins)
ax.set_xscale('log', basex=2)
ax.set_xlim(2**-10, 1)
plt.show()
江瀚昂
2023-03-14

使用垃圾箱将解决问题。条柱是您为其分配值的值,例如 0.28 将分配给条柱 0.3。下面的代码为您提供了使用箱子的示例:

import matplotlib.pyplot as plt
values = [0.68, 0.28, 0.31, 0.5, 0.25, 0.5, 0.002, 0.13, 0.002, 0.2, 0.3, 0.45,
  0.56, 0.53, 0.001, 0.44, 0.008, 0.26, 0., 0.37, 0.03, 0.002, 0.19, 0.18,
  0.04, 0.31, 0.006, 0.6, 0.19, 0.3, 0., 0.46, 0.2, 0.004, 0.06, 0.]
plt.hist(values, bins=[0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1])
plt.show()

为了以更合适的方式绘制它,将x轴转换为罗格里尺度可能很方便:

plt.hist(values, bins=[0, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1], log=True)

更改y轴上的对数刻度。在代码中添加以下行将为直方图生成一个对数x轴:

plt.xscale('log') 
 类似资料:
  • 我正在使用python中的matplotlib绘制直方图,并希望绘制一条代表数据集平均值的线,以虚线的形式覆盖在直方图上(或者其他颜色也可以)。关于如何在柱状图上画一条线有什么想法吗? 我正在使用plot()命令,但不确定如何绘制垂直线(即,我应该为y轴指定什么值? 谢谢

  • 直方图(Histogram),又称质量分布图,它是一种条形图的一种,由一系列高度不等的纵向线段来表示数据分布的情况。 直方图的横轴表示数据类型,纵轴表示分布情况。 首先,我们需要了解柱状图和直方图的区别。直方图用于概率分布,它显示了一组数值序列在给定的数值范围内出现的概率;而柱状图则用于展示各个类别的频数。 例如,我们对某工厂的员工年龄做直方图统计,首先我们要统计出每一位员工的年龄,然后设定一个

  • 目标 在本节中, 我们将学习直方图均衡化的概念,并利用它来提高图像的对比度。 理论 考虑这样一个图像,它的像素值仅局限于某个特定的值范围。例如,较亮的图像将把所有像素限制在高值上。但是一幅好的图像会有来自图像所有区域的像素。因此,您需要将这个直方图拉伸到两端(如下图所示,来自wikipedia),这就是直方图均衡化的作用(简单来说)。这通常会提高图像的对比度。 我建议您阅读直方图均衡化上的Wiki

  • 问题内容: 我正在使用matplotlib制作直方图。 有什么方法可以手动设置垃圾箱的大小,而不是垃圾箱的数量吗? 问题答案: 实际上,这很简单:您可以提供一个带有bin边界的列表,而不是bin的数量。它们也可能分布不均: 如果只希望它们均匀分布,则可以使用range: 添加到原始答案 上一行仅适用于整数填充。正如macrocosme所指出的,对于浮点数,您可以使用:

  • NumPy有一个numpy.histogram()函数,它是数据频率分布的图形表示。 相等水平尺寸的矩形对应于称为bin类间隔和对应于频率的variable height 。 numpy.histogram() numpy.histogram()函数将输入数组和bin作为两个参数。 bin数组中的连续元素充当每个bin的边界。 import numpy as np a = np.array([2

  • 问题内容: 您能告诉我任何生成非均匀随机数的方法吗? 我正在使用Java,但是代码示例可以随心所欲。 一种方法是通过将两个统一的随机数加在一起(即滚动2个骰子)来创建歪斜分布。 问题答案: 您想要什么分布的偏差? 这是一种始终有效的技术,但并不总是最有效的。累积扰动函数P(x)给出值低于x的时间的分数。因此,在x的最小可能值处P(x)= 0,在x的最大可能值处P(x)= 1。每个分布都有一个唯一的