此问题已在此处有答案:
Matplotlib semi-log plot: minor tick marks are gone when range is large(5个答案)
How can I set the aspect ratio in matplotlib?(7个回答)
3天前关闭。
我用matplotlib
在双对数散点图上画点。这些点的x
坐标的上升速度是y
坐标的两倍(指数意义上),这意味着当绘制在正方形图上时,x
轴的密度是y
轴的两倍。
下面是它生成的代码和图形:
import matplotlib.pyplot as plt
import matplotlib.ticker as tkr
fig, ax = plt.subplots(figsize=(10,8))
ax: plt.Axes
# Log scale
ax.set_xscale("log") # Needed for a log scatterplot. https://stackoverflow.com/a/52573929/9352077
ax.set_yscale("log")
# ax.xaxis.set_major_locator(tkr.LogLocator(base=10))
# ax.xaxis.set_major_formatter(tkr.LogFormatterSciNotation())
# ax.yaxis.set_major_locator(tkr.LogLocator(base=10))
# ax.yaxis.set_major_formatter(tkr.LogFormatterSciNotation())
# Plot points
t = range(1, 10_000_000, 1000)
x = [e**2 for e in t]
y = t
ax.scatter(x, y, marker=".", linewidths=0.05)
# Grid
ax.set_axisbelow(True)
ax.grid(True)
fig.savefig("./test.pdf", bbox_inches='tight')
默认情况下,matplotlib似乎想要一个正方形网格,因此在x
轴上每隔一个10的幂就跳过一次。据推测,我注解掉的4行--定位器和格式化程序的组合--是定制主要刻度间距的方法。例如,参见this post。**然而,取消注解它们会产生相同的确切数字,缺少主要刻度。
如果不使用LogLocator(base=10)
,我还能如何更改对数刻度上刻度之间的间距?下面是它的大致外观(我用红色突出显示了更改,但它们当然应该是灰色的):
1条答案
按热度按时间bxjv4tth1#
这就是您想要的输出结果吗?您可能需要一个更健壮的x_ticks解决方案。我去掉了t值因为你不需要它