Как использовать несколько цветов фона для фигуры в Python?
Я просто хочу построить несколько наборов данных, скажем, 4, используя подфигуры, то есть что-то вроде
fig = figure(1)
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
Это работает хорошо. Но кроме того, я хотел бы установить разные цвета фона для двух вспомогательных участков в первом ряду и во втором ряду так, чтобы верхняя половина фона рисунка была черной, а нижняя половина - белой. Кто-нибудь может сказать мне, как это сделать?
Итак, я попытался определить две фигуры, одну с черным, а другую с белым фоном, добавив первые две подфигуры к рисунку 1, а другие к рисунку 2. В конце я объединил обе фигуры в PDF. но результаты были неудовлетворительными, так как файл PDF был беспорядочным, и две фигуры фактически выглядели как две разные, но не как одна фигура.
Дополнительно я попробовал что-то вроде
fig = figure(1)
rect = fig.patch
rect.set_facecolor('black')
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
rect = fig.patch
rect.set_facecolor('white')
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
но, видимо, так не получится. Затем я попытался создать прямоугольник в качестве фона для каждой подфигуры, используя matplotlib.patches, что также кажется неуместным.
1 ответ
У меня была такая же проблема, и я нашел следующее решение:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig = plt.figure(1)
# create rectangles for the background
upper_bg = patches.Rectangle((0, 0.5), width=1, height=0.5,
transform=fig.transFigure, # use figure coordinates
facecolor='gray', # define color
edgecolor='none', # remove edges
zorder=0) # send it to the background
lower_bg = patches.Rectangle((0, 0), width=1.0, height=0.5,
transform=fig.transFigure, # use figure coordinates
facecolor='white', # define color
edgecolor='none', # remove edges
zorder=0) # send it to the background
# add rectangles to the figure
fig.patches.extend([upper_bg, lower_bg])
# create subplots as usual
fig.add_subplot(221)
fig.add_subplot(222)
fig.add_subplot(223)
fig.add_subplot(224)
plt.show()
Обратите внимание, что вы должны явно установить zorder
, потому что в противном случае патчи находятся перед вспомогательными участками. Полученная фигура выглядит следующим образом:
Этот подход все еще опирается на matplotlib.patches
и поэтому может быть не тот, который вы ищете, но я подумал, что это может быть полезно для других людей, имеющих эту проблему.
Более подробную информацию о манипулировании самой фигурой можно найти здесь: http://matplotlib.org/users/artists.html