Python Matplotlib - проблема окраски позвоночника на графике с двойной осью y - PullRequest
0 голосов
/ 07 ноября 2018

Я пишу сценарий для рисования графика с помощью matplotlib, следующий код является аналогом моего оригинального сценария, который воспроизводит проблему, с которой я столкнулся.

def func(ax, data, color, position):    # A function for plotting
    ax.plot(data[0], data[1], color=color)
    ax.spines[position].set_color(color)

fig = plt.figure()
data_1 = [np.linspace(0, 1, 10), np.linspace(0, 10, 10)]
data_2 = [np.linspace(0, 1, 10), np.linspace(10, 0, 10)]

ax = fig.add_subplot(111)
func(ax, data_1, 'r', 'left')

ax_1 = ax.twinx()
func(ax_1, data_2, 'b', 'right')

plt.show()

Ожидаемый график должен иметь обе оси y, но только правый корешок окрашен, как показано ниже. enter image description here

При приближении к левому отделу позвоночника вы можете найти красную тень вокруг оси Y, это означает, что мой цветной отдел позвоночника покрыт другим, как решить эту проблему, изменив только func()?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

twinx не только "сдваивает" ось y оси, но также и все остальные три шипа. Таким образом, красный корешок слева в основном переброшен (как вы уже узнали в своем ответе). Вместо установки их color на None, вы можете set_visible() их видимость на False, что кажется предпочтительным способом по сравнению со строками 18-22 здесь .

Итак:

def func(ax, data, color, position):    # A function for plotting
    ax.plot(data[0], data[1], color=color)
    ax.spines[position].set_color(color)
    for pos in ['left', 'right']:
        if pos != position:
            ax.spines[pos].set_visible(False)
0 голосов
/ 07 ноября 2018

Похоже, что после выполнения этого кода будут созданы другие шипы: ax_1 = ax.twinx(), поэтому я нахожу "тупое" решение:

def func(ax, data, color, position):    # A function for plotting
    ax.plot(data[0], data[1], color=color)
    ax.spines[position].set_color(color)

    if position == 'left':
        other = 'right'
    elif position == 'right':
        other = 'left'
    ax.spines[other].set_color('None')

Результат:

enter image description here

Это может решить мою проблему, но я все еще открыт для других прекрасных решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...