#python #numpy #matplotlib #legend
#python #numpy #matplotlib #легенда
Вопрос:
Я пытаюсь вручную установить местоположение для основной легенды основного графика, созданного инструментом Getdist.
На графике ниже представлены уровни достоверности 1/2 сигмы, полученные из ковариационной матрицы с совместными распределениями. Он создается с помощью инструмента Getdist.
Инструмент Getdist tool позволяет указать расположение легенд: я пробовал с legend_loc = 'upper right'
, но, как вы можете видеть, в верхней части рисунка есть перекрытие. Я хочу сдвинуть справа легенду, чтобы избежать этого перекрытия: возможно ли это? если да, то как?
Основная процедура, которая генерирует этот график, является :
g.triangle_plot([matrix1, matrix2],
names,
filled = True,
legend_labels = ['Opt. Flat. No Gamma. - optimistic case - cross - standard situation - Criterion taking into accound a = 200', 'Pess. Flat. No Gamma. - pessimistic case - cross - standard situation - Criterion taking into account a = 300' ],
legend_loc = 'upper right',
contour_colors = ['darkblue','red'],
line_args = [{'lw':2, 'color':'darkblue'},
{'lw':2, 'color':'red'}]
)
Обновление 1
Мне не удается применить сдвиги в нижнем левом углу легенды, выполнив :
g.triangle_plot([matrix1, matrix2],
names,
filled = True,
legend_labels = ['Opt. Flat. No Gamma. - optimistic case - cross - standard situation - Criterion taking into accound a = 200', 'Pess. Flat. No Gamma. - pessimistic case - cross - standard situation - Criterion taking into account a = 300' ],
legend_loc = 'center right',
contour_colors = ['darkblue','red'],
line_args = [{'lw':2, 'color':'darkblue'},
{'lw':2, 'color':'red'}],
bbox_to_anchor = [0.1, 0.5]
)
Как вы можете видеть, я попытался поместить легенду на 0.1 сверху и посередине.
Но, к сожалению, это ничего не меняет, я получаю с этими параметрами следующий график:
Вы можете заметить, что с этими параметрами простого сдвига к началу было бы достаточно, но для instant я не знаю, как это выполнить.
Я также пытался удалить loc
и bbox_to_anchor
из g.triangle_plot
и попытаться сделать напрямую :
g.fig.legend(loc='center right', bbox_to_anchor=[0.1, 0.1])
Но те же проблемы со смещением не применены на конечном рисунке.
Комментарии:
1. Полезное замечание: на английском языке говорится «Я надеюсь, что проблема ясна», а не «Я надеюсь, что проблема ясна». Однако в Stack Overflow мы стремимся устранить проблему chatty — заявление о том, что вы надеетесь, что что-то понятно, не способствует его ясности, поэтому ожидается, что вы воздержитесь от подобных избыточных замечаний.
Ответ №1:
В вызываемой legend
функции pyplot есть аргумент. bbox_to_anchor
Это что-то вроде относительного отклонения, и я не совсем уверен, как это работает. Но в принципе вы можете установить там некоторые значения горизонтальных и вертикальных сдвигов, а затем настроить в соответствии с желаемой позицией.
Например, вы можете написать plt.legend(bbox_to_anchor=[2.32, 0.5], loc='center right')
Комментарии:
1. Спасибо за ваш быстрый ответ. К сожалению, я пытался изменить значения для
bbox_to_anchor
, но это не приводит к каким-либо изменениям в расположении легенды.2. Хм, это странно, потому что именно так я обычно настраиваю местоположение легенды. Возможно, это не работает с GetDist, я пытался использовать только в pyplot.
3. Действительно, это stange. Я думаю, это связано, возможно, с тем фактом, что основная подпрограмма ‘g.triangle_plot`, которая генерирует график, использует свой собственный параметр
legend_loc
parameter. Я должен добавить, что я определилg
с помощью :g = plots.get_subplot_plotter()
. Что вы думаете об этом?4. Я просмотрел их код на github, и похоже, что они используют
bbox_to_anchor
параметр ( github.com/cmbant/getdist/blob/master/getdist/plots.py#L1872 ). И я также запустил некоторый код отсюда getdist.readthedocs.io/en/latest/plot_gallery.html , вставил тудаbbox_to_anchor
параметр вg.add_legend
, и это полностью изменило положение легенды. Так что, возможно, вам следует вызватьg.add_legend
функцию напрямую. Также попробуйте отправитьbbox_to_anchor
с некоторыми более высокими параметрами, такими как [2.1, 2.5]. Возможно, при небольших различиях в положении это не так заметно.5. Ваше решение с
g.add_legend
работает, но теперь я столкнулся с другой проблемой: процедураg.trianglr_plot
добавляет другую легенду, даже если я удалилlegend_loc
,bbox_to_anchor
и большинство материалов, связанных с легендой в этой процедуре.