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

在Matplotlib直方图中定义箱子宽度/x轴比例

鲁阳焱
2023-03-14

我用matplotlib生成直方图。

我需要箱子的宽度不相等,因为我对最低的条柱最感兴趣。现在我正在这样做:

plt.hist(hits_array, bins = (range(0,50,10) + range(50,550,50)))

这创建了我想要的(前5个条柱的宽度为10,其余50条箱的宽度),但前五个条柱当然比后一个条柱窄,因为所有条柱都显示在同一轴上。

有没有办法影响x轴或直方图本身,这样我就可以在前5个箱之后打破刻度,这样所有箱都显示为等宽?

(我意识到这将产生一个扭曲的视图,我对此很好,尽管我不介意在轴的两个不同缩放部分之间留出一点空间。

任何帮助将不胜感激。谢谢!

共有3个答案

姜玮
2023-03-14
import pandas as pd
import numpy as np

df= data

bins = np.arange(0,0.1,0.001)
df.hist(bins=bins,color='grey')
符懿轩
2023-03-14

可以使用bar,不需要拆分轴。这里有一个例子,

import matplotlib.pylab as plt
import numpy as np

data = np.hstack((np.random.rand(1000)*50,np.random.rand(100)*500))
binwidth1,binwidth2=10,50
bins=range(0,50,binwidth1)+range(50,550,binwidth2)

fig,(ax) = plt.subplots(1, 1)

y,binEdges=np.histogram(data,bins=bins)

ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[:5], y[:5],width=.8*binwidth1,align='center')
ax.bar(0.5*(binEdges[1:]+binEdges[:-1])[5:], y[5:],width=.8*binwidth1,align='center')
plt.show()

如果你真的想分裂轴看看这里。

宋高寒
2023-03-14

我在这里有一个类似的问题,答案是使用肮脏的黑客。具有收集箱的矩阵直方图,用于高值

所以通过下面的代码,你得到了你已经有的丑陋直方图。

def plot_histogram_04():
    limit1, limit2 = 50, 550
    binwidth1, binwidth2 = 10, 50    
    data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

    bins = range(0, limit1, binwidth1) + range(limit1, limit2, binwidth2)

    plt.subplots(1, 1)
    plt.hist(data, bins=bins)
    plt.savefig('my_plot_04.png')
    plt.close()

为了使箱子等宽,你必须使它们等宽!这意味着要对数据进行操作,使它们都落在宽度相等的容器中,然后再处理xlabel。

def plot_histogram_05():
    limit1, limit2 = 50, 550
    binwidth1, binwidth2 = 10, 50

    data = np.hstack((np.random.rand(1000) * limit1, np.random.rand(100) * limit2))

    orig_bins = range(0, limit1, binwidth1) + range(limit1, limit2 + binwidth2, binwidth2)
    data = [(i - limit1) / (binwidth2 / binwidth1) + limit1 
            if i >= limit1 else i for i in data]
    bins = range(0, limit2 / (binwidth2 / binwidth1) + limit1, binwidth1)

    _, ax = plt.subplots(1, 1)
    plt.hist(data, bins=bins)

    xlabels = np.array(orig_bins, dtype='|S3')
    N_labels = len(xlabels)
    print xlabels
    print bins
    plt.xlim([0, bins[-1]])
    plt.xticks(binwidth1 * np.arange(N_labels))
    ax.set_xticklabels(xlabels)

    plt.savefig('my_plot_05.png')
    plt.close()
 类似资料:
  • 在Matplotlib中创建堆叠直方图时,我注意到箱宽缩小了。在这个简单的例子中: 我得到以下输出: 请注意,左侧的直方图在每个存储区之间都有行间距,即使左侧和右侧直方图都使用相同的存储区。 有没有办法纠正这种行为?我想在左边的直方图使用完整的箱子宽度,这样相邻的箱子共享一条边。

  • 我试图从下面的论文(http://dx.doi.org/10.1016/j.envsci.2011.08.004)中复制图表图1的概念: 它是一个直方图,其箱子宽度取决于的值,其高度取决于变量。图表中的精确值并不重要,而是要了解如何复制它。 以下代码为每个创建了一个具有两个特征的数据帧(and measure的宽度是减量,

  • 我正在制作一个有3个子绘图的图,尽管它们的宽度都相等,但一些直方图箱子的大小似乎不同。我的目标是创建一个具有相等宽度条的直方图。 我正在绘制来自三个不同数据框< code>df1、df2、df3的数据,每个数据框都有自己的轴。前两个数据帧(< code>df1,df2)有12个值,而第三个(< code>df3)有21个值。一个简单的工作示例: 在上图中,第三个子图 具有一个柱形图条,其条柱宽度显

  • 我正在matplotlib中创建直方图,但遇到了问题,因为当所有条的宽度都应该相同时,它们的宽度是不同的。这方面的一个例子如下: 显示迭代之间可变条形宽度的直方图 在图像中,左列具有完整的直方图,右列在完整直方图的各个部分中进行缩放。在完整的直方图中,由于某种未知的原因,两个试验之间的条形宽度不同,其中在缩放的右侧,它们具有相同大小的条形。我希望它们具有相同大小的条形图,其中 rwidth=1,并

  • 我有一个从sql数据库查询派生的直方图。代码如下: 输出如下:https://gyazo.com/d73b20a118db0088aab261c079613b00 我想显示为:https://gyazo.com/063990cd8741682f45b5a37ba594ff56 其中,x轴的编号向右侧移动了一点。有可能做到这一点吗?

  • 我使用matplotlib在python中绘制直方图,方法是: 是否可以打印包含所有存储箱信息的数据框,如每个存储箱中的元素数量?