Элегантное изменение цвета рамки графика в matplotlib

Это своего рода ответ на этот пост, в котором обсуждалась окраска осей, меток и меток. Я надеюсь, что можно задать новый расширенный вопрос по этому поводу.

Изменение цвета всего кадра (метки и оси) вокруг двойного графика (через 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 (!) Строк кода .. Вот как это выглядит:

enter image description here

Другие методы, которые я откопал до сих пор:

  • 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.

24
задан Community 23 May 2017 в 12:10
поделиться

1 ответ

Предполагая, что вы используете достаточно актуальную версию 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()

enter image description here

15
ответ дан 28 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: