gpt4 book ai didi

Matplotlib:设置x限制还会强制打勾标签吗?

转载 作者:行者123 更新时间:2023-12-04 04:02:44 25 4
gpt4 key购买 nike

我刚刚升级到matplotlib 2.0,感觉就像是在疯狂服用。我正在尝试绘制对数线性图,y轴为线性刻度,x轴为log10刻度。以前,下面的代码可以让我确切指定我想要的刻度线以及我希望它们的标签是什么:

import matplotlib.pyplot as plt

plt.plot([0.0,5.0], [1.0, 1.0], '--', color='k', zorder=1, lw=2)

plt.xlim(0.4,2.0)
plt.ylim(0.0,2.0)

plt.xscale('log')

plt.tick_params(axis='x',which='minor',bottom='off',top='off')

xticks = [0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0]
ticklabels = ['0.4', '0.6', '0.8', '1.0', '1.2', '1.4', '1.6', '1.8', '2.0']
plt.xticks(xticks, ticklabels)

plt.show()

但是在matplotlib 2.0中,这现在使我得到一组重叠的刻度标签,其中matplotlib显然要自动创建刻度:

enter image description here

但是,如果我注释掉“plt.xlim(0.4,2.0)”行并使其自动确定轴限制,则不会有重叠的刻度标签,而我得到的标签就是我想要的:

enter image description here

但这不起作用,因为我现在有无用的x轴限制。

有任何想法吗?

编辑:对于将来搜索互联网的人们,我越来越相信这实际上是matplotlib本身的错误。我回到了1.5.3版。只是为了避免这个问题。

最佳答案

重叠的其他刻度线标签来自图中存在的一些较小的刻度线标签。要摆脱它们,可以将次要格式化程序设置为NullFormatter:

plt.gca().xaxis.set_minor_formatter(matplotlib.ticker.NullFormatter())

问题中的完整代码可能看起来像
import matplotlib.pyplot as plt
import matplotlib.ticker
import numpy as np

x = np.linspace(0,2.5)
y = np.sin(x*6)
plt.plot(x,y, '--', color='k', zorder=1, lw=2)

plt.xlim(0.4,2.0)

plt.xscale('log')

xticks = [0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0]
ticklabels = ['0.4', '0.6', '0.8', '1.0', '1.2', '1.4', '1.6', '1.8', '2.0']
plt.xticks(xticks, ticklabels)

plt.gca().xaxis.set_minor_formatter(matplotlib.ticker.NullFormatter())

plt.show()

enter image description here

下面的代码可能更直观,因为它没有将xticklabel设置为字符串,下面是我们使用 FixedLocatorScalarFormatter的代码。
此代码产生与上述相同的图。
import matplotlib.pyplot as plt
import matplotlib.ticker
import numpy as np

x = np.linspace(0,2.5)
y = np.sin(x*6)
plt.plot(x,y, '--', color='k', zorder=1, lw=2)

plt.xlim(0.4,2.0)
plt.xscale('log')

xticks = [0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0]

xmajorLocator = matplotlib.ticker.FixedLocator(locs=xticks)
xmajorFormatter = matplotlib.ticker.ScalarFormatter()
plt.gca().xaxis.set_major_locator( xmajorLocator )
plt.gca().xaxis.set_major_formatter( xmajorFormatter )
plt.gca().xaxis.set_minor_formatter(matplotlib.ticker.NullFormatter())

plt.show()

关于Matplotlib:设置x限制还会强制打勾标签吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42845694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com