matplotlib 对次轴上的多条曲线排序

ou6hu8tu  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(112)

我试着在第二个y轴上排列我的曲线,但我不知道如何-有人有想法吗?

  • 第一条蓝色曲线在第二轴上从0.01开始,
  • 然后是从次轴上的0.1开始的橙子曲线
  • 等等....谢谢

x1c 0d1x的数据


import matplotlib.pyplot as plt
import numpy as np

def calc_curve(x, y):
    n = x / y
    z = np.abs(n * x - y) * (1 - (x / y) * np.exp(-x / y)) + \
                 np.abs(x - y) * (x / y) * np.exp(-x / y)

    return z

x_val = np.linspace(0.004, 0.4, 100)

# plot
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

z_val = np.zeros_like(x_val)

for ts in [0.01, 0.1, 0.2, 0.3]:
    for c, tr in enumerate(x_val):
        z_val[c] = calc_curve(ts, x_val[c])

    ax1.plot(x_val, z_val, label="parameter: {0}".format(ts))

ax1.set_xlim(np.min(x_val), np.max(x_val))
#ax2.set_xlim(np.min(0.01), np.max(0.3))
ax1.legend()
plt.grid(True, which='both')
plt.show()

字符串

z4iuyo4d

z4iuyo4d1#

根据提供的代码,这是另一个答案:

import matplotlib.pyplot as plt
import numpy as np

def calc_curve(x, y):
    n = x / y
    z = np.abs(n * x - y) * (1 - (x / y) * np.exp(-x / y)) + \
                 np.abs(x - y) * (x / y) * np.exp(-x / y)
    return z

x_val = np.linspace(0.004, 0.4, 100)

# plot
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

z_val = np.zeros_like(x_val)

for ts in [0.01, 0.1, 0.2, 0.3]:
    for c, tr in enumerate(x_val):
        z_val[c] = calc_curve(ts, x_val[c])

    adjusted_z_val = z_val - z_val[-1] + ts
    ax2.plot(x_val, adjusted_z_val, label="parameter: {0}".format(ts))

ax2.set_ylim(-1, 2)
ax1.set_ylim(-1, 2)
ax2.legend()
plt.grid(True, which='both')
plt.show()

字符串
输出


的数据

knpiaxh1

knpiaxh12#

你必须调整你的数据,在右边有所需的截距。也就是说,你必须添加一个常数到你的数据序列,使最后一个值等于你想要的值。我给予一个小例子,如何轻松实现这一点:

import numpy as np
import matplotlib.pyplot as plt

# generate two random time series
x = np.arange(1, 100)
y1 = (1 + np.random.rand() / 10)/x + np.random.rand()
y2 = (1 + np.random.rand() / 10)/x + np.random.rand()

# adjust data according to desired y intercepts
y1 = y1 - y1[-1] + 0.1 # 0.1 is the intercept you want
y2 = y2 - y2[-1] + 0.2 # 0.2 is the intercept you want

ax2 = plt.gca().twinx()
ax2.plot(x, y1)
ax2.plot(x, y2)

字符串
输出与预期的一样,直线y1的右轴截距为0.1,y2的右轴截距为0.2。


此外,请提供易于复制的示例,以便其他人可以直接深入研究您的问题

相关问题