Почему в подплоте есть дополнительный граф, о котором я нигде не упоминал - PullRequest
0 голосов
/ 07 апреля 2020

Я использовал следующий код и на последнем рисунке подзаговор, почему у меня есть дополнительный график (красная кривая)

fig= plt.figure()
plt.rcParams.update({'font.size':24})
fig, (ax1,ax2,ax3)=plt.subplots(3,1,figsize= 
(20,24),sharex='row',sharey='col')


p1=plt.plot(x_axis,Clean_Current_TEST,"g",x_axis,Clean_Current_Prediction1,"r--")

    ax1.plot(x_axis,Clean_Current_TEST,"g",x_axis,Clean_Current_Prediction1,"r--", lw=3.0)

    ax2.plot(x_axis,Clean_Current_TEST,"g",x_axis,Clean_Current_Prediction2,"r--", lw=3.0)

    ax3.plot(x_axis,Clean_Current_TEST,"g",x_axis,Clean_Current_Prediction3,"b--", lw=3.0)#,x_axis,Clean_Current_Prediction3,"b--"

    ax1.legend(p1[:2], ["Experimental Output","Predicted Output1"],loc='best');
    ax2.legend(p1[:2], ["Experimental Output","Predicted Output2"],loc='best');
    ax3.legend(p1[:2], ["Experimental Output","Predicted Output3"],loc='best');

    ax1.title.set_text('Short Circuit Current of Clean Module vs 
    Time Graph')


    fig.text(0.5, 0.01, 'Time(hr)', ha='left', va='center')
    fig.text(0.01, 0.5, 'Clean Module Current(mA)', ha='center', 
    va='center', rotation='vertical')
    [enter image description here][1]
    plt.show()
    plt.tight_layout(pad=1)

(последняя цифра подзаговора)

enter image description here

1 Ответ

0 голосов
/ 07 апреля 2020

Вот минимум, воспроизводимый пример , который воссоздает проблему, с которой вы столкнулись:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,1,20)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.arctan(x)

fig, (ax1,ax2) = plt.subplots(2,1)

plt.plot(x, y3, "g", x, y1, "r--")

ax1.plot(x, y3, "g", x, y1, "r--", lw=3.0)
ax2.plot(x, y3, "g", x, y2, "b--", lw=3.0)

plt.show()

enter image description here

Кажется что функция plt.plot фактически строит свой график на оси last . Вот почему вы видите «красный» график на последней оси, даже если линия, которая отображается на оси 2, явно требует «синей» линии. В общем, если вы рисуете отдельные объекты на разных осях, вам не следует использовать вспомогательные методы в matplotlib.pyplot, а вместо этого следует использовать методы для объектов Axis.

fig, (ax1,ax2) = plt.subplots(2,1)

ax1.plot(x, y3, 'g', x, y1, "r--", lw=3.0)
ax2.plot(x, y3, 'g', x, y2, "b--", lw=3.0)

plt.show()

enter image description here

...