Может быть, немного грубо ответить на мой собственный вопрос, но я хотел бы поделиться тем, что я смог найти до сих пор. Эта версия может раскрасить два вспомогательных участка с осями [ax1, ax2]
и [ax3, ax4]
в два разных цвета. Это намного короче, чем 16 строк, которые я изложил в моем вопросе выше. Он вдохновлен ответом Джо Кингтона здесь и в тикл-ярлыке с двумя пальцами убивает цвет .
import matplotlib.pyplot as plt
import numpy as np
# Generate some data
num = 200
x = np.linspace(501, 1200, num)
yellow_data, green_data , blue_data= np.random.random((3,num))
green_data += np.linspace(0, 3, yellow_data.size)/2
blue_data += np.linspace(0, 3, yellow_data.size)/2
fig = plt.figure()
plt.subplot(211) # Upper Plot
ax1 = fig.add_subplot(211)
ax1.fill_between(x, 0, yellow_data, color='yellow')
ax2 = ax1.twinx()
ax2.plot(x, green_data, 'green')
plt.setp(plt.gca(), xticklabels=[])
plt.subplot(212) # Lower Plot
ax3 = fig.add_subplot(212)
ax3.fill_between(x, 0, yellow_data, color='yellow')
ax4 = ax3.twinx()
ax4.plot(x, blue_data, 'blue')
# Start coloring
for ax, color in zip([ax1, ax2, ax3, ax4], ['green', 'green', 'blue', 'blue']):
for ticks in ax.xaxis.get_ticklines() + ax.yaxis.get_ticklines():
ticks.set_color(color)
for pos in ['top', 'bottom', 'right', 'left']:
ax.spines[pos].set_edgecolor(color)
# End coloring
plt.show()
Я отметил это как принятое, так как это самое компактное решение, которое я мог найти до сих пор. Тем не менее, я открыт для других, может быть, более элегантных способов ее решения.