twinx()和axhline

4

在使用twinx()后紧接着使用axhline时,所画的水平线仍然遵循第一个y轴的坐标。

有什么提示可以使其适应于第二个y轴吗?


1
它在我的设置中运行良好。你使用的是什么代码? - David Zwicker
2个回答

2
您可以从Axes对象中调用axhline方法,就像下面的示例一样,或者使用sca设置当前Axes。
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = 2.0 * np.cos(x)

fig = plt.figure()
ax1 = plt.subplot(111)
ax2 = ax1.twinx()

ax1.axhline( 0.5, 0.1, 0.5, color='r', lw=3)
ax2.axhline(-0.5, 0.5, 0.9, color='b', lw=3)

ax1.plot(x, y1, 'r', lw=2)
ax2.plot(x, y2, 'b', lw=2)

plt.show()

1
如果这个解决了你的问题,请接受它(在左侧的大灰色复选标记)。 - tacaswell

1
如果您无法访问twinx()的返回值(例如在Pandas中为您调用时),您可以使用Axes对象的left_axright_ax属性访问左右轴。
只有其中之一存在,因为每个轴都链接到另一个轴。
  • 如果您有左轴的句柄,则其right_ax属性将指向链接的右轴。
  • 如果您有右轴的句柄,则其left_ax属性将指向链接的左轴。
  • 例如:
    df = pandas.DataFrame({'d1': numpy.random.rand(10), 
                           'd2': numpy.random.rand(10) * 10})
    ax = df.plot(secondary_y=['d2'])  # returns the left axis
    ax.axhline(y=0.5, alpha=0.5)      # draw a line from it
    ax.right_ax.axhline(y=10, color="red", alpha=0.5)  # draw a line from the right axis
    

    Pandas plot() output


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接