我正在尝试获得更好看的双对数图,除了一个小问题之外,我几乎得到了我想要的。
我的示例偏离标准设置的原因是 x 值限制在不到十年的范围内,并且我想使用十进制,而不是科学记数法。
请允许我用一个例子来说明:
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib as mpl
import numpy as np
x = np.array([0.6,0.83,1.1,1.8,2])
y = np.array([1e-5,1e-4,1e-3,1e-2,0.1])
fig1,ax = plt.subplots()
ax.plot(x,y)
ax.set_xscale('log')
ax.set_yscale('log')
其产生:
x 轴有两个问题:
使用科学计数法,在这种情况下会适得其反
右下角可怕的“偏移”
经过大量阅读后,我添加了三行代码:
ax.xaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
ax.xaxis.set_minor_formatter(mpl.ticker.ScalarFormatter())
ax.ticklabel_format(style='plain',axis='x',useOffset=False)
这会产生:
我对此的理解是,有 5 个小刻度和 1 个大刻度。它好多了,但仍然不完美:
- 我想要 1 到 2 之间的一些额外刻度
- 1 处的标签格式错误。应该是“1.0”
所以我在格式化语句之前插入了以下行:
ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(0.2))
我终于得到了我想要的刻度:
我现在有 8 个主要刻度和 2 个次要刻度。现在,这看起来几乎是正确的,除了 0.6、0.8 和 2.0 处的刻度标签比其他刻度标签显得更粗这一事实之外。这是什么原因?我该如何纠正?