如何在 matplotlib 的对数对数图中绘制对角线?

问题描述 投票:0回答:1

我有一个散点图,其中两个轴都是对数刻度。例如,使用以下代码生成的图:

import matplotlib.pyplot as plt
import numpy as np

rng = np.random.RandomState(42)

x = np.logspace(0, 3, 100)
y = np.logspace(0, 3, 100) + rng.randn(100) * 2

ax = plt.gca()
ax.scatter(x, y, marker="x", color="orange")

ax.axline((0, 0), (1, 1), color="black", linestyle=":")

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

ax.set_aspect("equal")
plt.show()

产生以下情节 Scatter plot with bisector

我想绘制对应于 10 的每个幂的对角线,例如如下图 Scatter plot with bisector and two diagonal lines

我试着补充

ax.axline((1, 0), (10, 1), color="black", linestyle=":")
ax.axline((0, 1), (1, 10), color="black", linestyle=":")

但我明白了 Scatter plot with bisector and two lines 这不是我所期望的。

python matplotlib scatter-plot loglog
1个回答
0
投票

用常数乘以 Y 坐标值

我不确定您最初对 (0,0) 和 (1,1) 的想法是否理想。最好避免在双对数图中出现 0。我已将其更改为 (1,1) 和 (10,10),这是同一行。

然后你希望你的下一条线通过相同的 X 坐标,但在 Y 坐标处,比方说,高 10 倍。所以将两个 Y 坐标乘以 10.

另一边的线也一样,除以 10.

在这段代码中,我做了因子

k
.


import matplotlib.pyplot as plt
import numpy as np

rng = np.random.RandomState(42)

x = np.logspace(0, 3, 100)
y = np.logspace(0, 3, 100) + rng.randn(100) * 2

ax = plt.gca()
ax.scatter(x, y, marker="x", color="orange")

k = 10
ax.axline((1, 1),  (10, 10  ), color="black", linestyle=":")
ax.axline((1,1*k), (10, 10*k), color="black", linestyle=":")
ax.axline((1,1/k), (10, 10/k), color="black", linestyle=":")

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

ax.set_aspect("equal")
plt.show()

结果是:

© www.soinside.com 2019 - 2024. All rights reserved.