繁体   English   中英

为什么我执行“ log”操作时,matplotlib条形图会压缩x轴

[英]Why is my matplotlib bar chart compressing the x-axis when I do 'log'

我正在尝试使用matplotlib为python制作条形图。 我可以制作一个普通的图表,但是当我将其置于对数模式以便更好地查看数据时,x轴看起来就像是在压缩。 到底是怎么回事? 注意:所有数据记录的最小值均为1。

    x = [t[0] for t in data]
    y = [t[1]  for t in data]

    x_pos = np.arange(len(x))

    plt.bar(x_pos, y, color='blue', log=False)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.title(title)
    plt.xlim([0, len(x)])
    #plt.yscale('log')
    #plt.semilogy(x_pos, np.exp(-x_pos/5.0))
    plt.savefig(output_path + '/' + filename)

产量: 在此处输入图片说明

但是仅通过将log=False更改为log=True得到: 在此处输入图片说明

我究竟做错了什么? 我只想在y轴上获得第一个图的压缩视图。 如您所见,我也尝试了yscale('log')但得到的结果相同。

谢谢!

编辑:看起来它与前几行有关,当我删除第一行时,它工作正常,但未排序:

data = sorted(data, key=lambda tup: tup[1], reverse=True)

    # tuples (pair,count)
    x = [t[0] for t in data]
    y = [t[1]  for t in data]

如果只想在y轴上显示对数刻度,而不是x,请使用:

import matplotlib.pyplot as plt

plt.semilogy(x,y) #plots log on y axis

plt.semilogx(x,y) #plots log on x axis

另外,您可以将轴设置为记录:

ax = plt.subplot(224)

ax.set_xscale("log")
ax.set_yscale("log")

plt.bar(x,y)

它并没有压缩您的x轴; 第二个图的y轴的最小值是1(10 ^ 0),它显示的是最小条形图的高度。 因此,最右边的条形在半对数图上的y刻度不对。

尝试添加, 例如

plt.ylim([0.1, 100])

增强最右边的条的可见性。 (出于明显的原因,对数刻度轴的最小值不能为0。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM