【问题标题】:Matplotlib axis custom scale adjustmentMatplotlib 轴自定义比例调整
【发布时间】:2018-07-04 21:20:17
【问题描述】:

我正在使用类似命令的 pandas 数据框进行绘图

fig1 = plt.hist(dataset_1[dataset_1>-1.0],bins=bins,alpha=0.75,label=label1,normed=True) 

并且这些图在一个画布上包含多个直方图。由于每个直方图都被归一化为它自己的积分(因此直方图具有相同的面积,因为直方图的目的是说明数据集的形状而不是它们的相对大小),y 轴上的数字没有意义。现在,我正在使用 y 轴标签来抑制

axes.set_ylabel("(Normalised to unity)")

axes.get_yaxis().set_ticks([])

有没有办法调整 y 轴的缩放比例,使“1”对应于任何直方图上的最大值?这将显示一个垂直刻度来引导眼睛,并用它来判断不同 bin 的相对值。本质上,我的意思是重新归一化显示的最大 y 值,而不影响直方图的缩放(即,将轴比例与其所代表的内容解耦)。

【问题讨论】:

    标签: python matplotlib plot label axes


    【解决方案1】:

    你有两个选择:

    绘制直方图,调整y轴刻度。

    您可以将 y 刻度设置为最大值的位置,然后用1 标记它。

    import numpy as np; np.random.seed(1)
    import matplotlib.pyplot as plt
    
    a = np.random.rayleigh(scale=3, size=2000)
    
    hist, edges,_ = plt.hist(a, ec="k")
    plt.yticks([0,hist.max()], [0,1])
    
    plt.show()
    

    标准化直方图,按比例绘制。

    您可以按照您希望的方式对直方图进行归一化,方法是首先计算直方图,将其除以最大值,然后绘制条形图。

    import numpy as np; np.random.seed(1)
    import matplotlib.pyplot as plt
    
    a = np.random.rayleigh(scale=3, size=2000)
    
    hist, edges = np.histogram(a)
    hist = hist/float(hist.max())
    
    plt.bar(edges[1:], hist, width=np.diff(edges)[0], align="edge", ec="k")
    plt.yticks([0,1])
    
    plt.show()
    

    两种情况下的输出都是一样的:

    【讨论】:

    • 不,语法不一样。也可以在这里查看这个答案。
    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2015-06-10
    • 2015-01-20
    • 2016-05-21
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多