如何在子图之间对齐对数刻度?

时间:2019-07-02 08:13:58

标签: python matplotlib subplot

我想将对勾的位置固定在对数刻度上,以使它们在每个子图中都相同(请参见图像中的红色注释)。 我的代码如下:

ax = fig.add_subplot(2,2, axis)
ax2 = ax.twinx()
ax2.set_yscale('log')
ax2.set_ylim(0,100)

现在,set_yscale=('log')优化了每个子图的刻度间距。我更喜欢采用右上子图的刻度间距。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过获取左双轴的极限并将其设置为右双轴的极限来实现这一目标。

请考虑以下工作示例。对于要对齐其轴的子图,请遵循以下步骤。



import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 3))

axl = fig.add_subplot(121)
axr = fig.add_subplot(122)

ax1 = axl.twinx()
ax1.plot(np.logspace(-2, 3, 5))
ax1.set_yscale('log')

ax2 = axr.twinx()
ax2.plot(np.logspace(0, 3, 5))
ax2.set_yscale('log')

ax2.set_ylim(ax1.get_ylim()) # <-- This is the key line

plt.tight_layout()
plt.show()

enter image description here

答案 1 :(得分:0)

OP的解决方案:

绘制一条虚拟曲线并设置(Write-Host($config.configuration.appSettings.Item(0).value) = "new-value1") 。确保曲线跨度为y_min和y_max。

alpha=0

Sheldore提供的解决方案不切实际,因为我使用for循环绘制数据(除非逐步增加变量数,否则将不可避免)。

由于每次迭代都会覆盖fig = plt.figure() axes = [1,2,3,4] for axis in axes: ax = fig.add_subplot(2,2, axis) ax2 = ax.twinx() ax2.set_yscale('log') ax2.plot(x_dummy, y_dummy, alpha=0) # <-- dummy plot x_real, y_real = func_that_loads_data() # <-- your interesting plot curve1 = ax2.plot(x_real, y_real) plt.show() 变量,因此必须将y-limit保存为全局变量。 Read here why global variables should be avoided.

ax