Это своего рода ответ на этот пост, в котором обсуждалась окраска осей, меток и меток. Я надеюсь, что можно задать новый расширенный вопрос по этому поводу.
Изменение цвета всего кадра (метки и оси) вокруг двойного графика (через add_subplot
) с осями [ax1, ax2] приводит к большому количеству кода.Этот фрагмент изменяет цвет рамки верхнего графика :
ax1.spines['bottom'].set_color('green')
ax1.spines['top'].set_color('green')
ax1.spines['left'].set_color('green')
ax1.spines['right'].set_color('green')
for t in ax1.xaxis.get_ticklines(): t.set_color('green')
for t in ax1.yaxis.get_ticklines(): t.set_color('green')
for t in ax2.xaxis.get_ticklines(): t.set_color('green')
for t in ax2.yaxis.get_ticklines(): t.set_color('green')
Итак, для изменения цвета рамки двух графиков с двумя осями Y на каждом мне понадобится 16 (!) Строк кода .. Вот как это выглядит:
Другие методы, которые я откопал до сих пор:
matplotlib.rc: обсуждались здесь ; меняется глобально, а не локально. Я хочу, чтобы другие сюжеты были разных цветов. Пожалуйста, не обсуждайте слишком много цветов в графиках ... :-)
matplotlib.rc ('axes', edgecolor = 'green')
выкопайте стержни оси, затем измените его: также обсуждается здесь ; не очень элегантно, я думаю.
для дочернего элемента в ax.get_children ():
if isinstance (child, matplotlib.spines.Spine):
child.set_color ('# dddddd')
Есть ли элегантный способ уплотнения вышеуказанного блока, что-то более "питоническое"?
Я использую python 2.6.5 с matplotlib 0.99.1.1 под Ubuntu.
Предполагая, что вы используете достаточно актуальную версию matplotlib (> = 1.0), возможно, попробуйте что-то вроде этого:
import matplotlib.pyplot as plt
# Make the plot...
fig, axes = plt.subplots(nrows=2)
axes[0].plot(range(10), 'r-')
axes[1].plot(range(10), 'bo-')
# Set the borders to a given color...
for ax in axes:
ax.tick_params(color='green', labelcolor='green')
for spine in ax.spines.values():
spine.set_edgecolor('green')
plt.show()