Использование pyplot из Plots.jl.Как сделать, чтобы на нескольких участках был только один колобар? - PullRequest
0 голосов
/ 28 января 2019

Я использую Plots.jl, чтобы создать несколько графиков на одной фигуре.При использовании бэкэнда pyplot у каждого графика есть своя собственная цветовая панель, которая мне не нужна, так как они имеют одинаковые данные.Я пытаюсь повторить ответ из этого вопроса , однако я не знаю подробно о механизме под API Plots.jl, поэтому я не смог его воспроизвести.Мой сюжет сделан так:

using Plots;pyplot()
p1 = plot(a,st=:contour,fill=true)
p2 = plot(b,st=:contour,fill=true)
p  = plot(p1,p2)

И ответ (который находится на python) по ссылке таков:

fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
    im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)

fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(im, cax=cbar_ax)

plt.show()

Насколько я понимаю, код внутриfor фактически создает графики на осях, созданных с помощью plt.subplots (в моем случае это делается с помощью Plots.jl. Следующая строка делает графики ближе, а затем линия fig.add_axes создает новую ось для цветовой шкалы. Наконец,строка fig.colorbar создает цветовую полосу на новой оси и использует данные из последнего графика в цикле for.

Мой текущий код:

cbar_ax = p.o[:add_axes]([0.85, 0.15, 0.05, 0.7]);
p.o[:colorbar](p.o[:axes][1][:contourf],cax=cbar_ax)
display(p)

И это не такне работает (я не ожидал, что это сработает, потому что я не знаю, что я делаю.

Я получаю ошибку:

AttributeError ("'function')У объекта нет атрибута 'autoscale_None' ")

Что заставляет меня думать, что po : axes [: contourf] не способ вызвать то, что я пытаюсь.

Может кто-нибудь помочь? Спасибо

1 Ответ

0 голосов
/ 30 января 2019

В общем, если вы хотите использовать код для объекта PyPlot, лучше просто использовать PyPlot и забыть о графиках.Микс редко работает на практике.Если вы действительно хотите использовать графики, вы должны иметь возможность

using Plots;pyplot()
lims = extrema([a;b])
p1 = plot(a,st=:contour,fill=true, colorbar = false)
p2 = plot(b,st=:contour,fill=true, colorbar = true, clims = lims)
p  = plot(p1,p2)

Один из вспомогательных участков будет намного шире другого - вам, вероятно, нужно отрегулировать с помощью @layout, чтобы получить одинаковую ширину.

...