Это своего рода дополнительный вопрос к этот пост, в котором обсуждалась раскраска осей, меток и меток. Я надеюсь, что можно задать новый расширенный вопрос по этому поводу.
Изменение цвета всего кадра (отметок и осей) вокруг двойного графика (через 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')
выкопайте шипы оси, затем измените ее: также обсуждается здесь; я думаю, не очень элегантно.
for child in ax.get_children(): if isinstance(child, matplotlib.spines.Spine): child.set_color('#dddddd')
Есть ли элегантный способ сжать вышеуказанный блок, что-то более "питоническое"?
Я использую python 2.6.5 с matplotlib 0.99.1.1 под ubuntu.
for ax, color in zip([ax1, ax2, ax3, ax4], ['green', 'green', 'blue', 'blue']): plt.setp(ax.spines.values(), color=color); plt.setp([ax.get_xticklines(), ax.get_yticklines()], color=color)
) 30.10.2011ax1
быть простоax
01.03.2016ax.spines.values()
не будет работать в Py3, посколькуplt.setp
принимает только индексируемый объект. Значения словаря повторяются, но не индексируются в Py3. Я работаю над PR, чтобы исправить это для потомков (я имею в виду заставитьsetp
принимать любые итерации, а не исправлятьvalues()
в Py3). 22.03.2016tuple(ax.spines.values())
, чтобы изменить их цвета с помощьюplt.setp
. Было бы действительно полезно, если бы это работало для произвольных итераций. 28.04.2017