2016-07-04 4 views
2

По умолчанию matplotlib отображает метку оси в центре оси. Я хотел бы переместить ярлык таким образом, чтобы он был выровнен с концом оси, как для горизонтальной, так и для вертикальной оси. Например, для горизонтальной оси Я хотел бы видеть:как выровнять метку оси справа

+--------------------+ 
|     | 
|     | 
|     | 
|     | 
|     | 
+--------------------+ 
       label 

ли possibile сделать это с глобальной настройкой Matplotlib?

ответ

7

Хорошо, я оставлю в покое мой другой ответ (1), но это хороший один

... 
plt.xlabel('x_description', horizontalalignment='right', x=1.0) 
plt.ylabel('y_description', horizontalalignment='right', y=1.0) 
... 

, как вы можете видеть, не больше магии чисел, и работает как для xlabel и ylabel.

Обратите внимание, что в обоих случаях мы собираемся изменить горизонтальное выравнивание, по причинам, которые были в конце концов, для меня ясно, когда я первый изменил вертикальное выравнивание в ylabel ...


(1), так как идея получения объекта, модификация этого объекта и его настройка - хорошая идея сама по себе, не так ли?

+1

Невозможно отредактировать becauce из 6 символов, должно быть 'plt.xlabel ('x description', horizontalalignment = 'right', x = 1.0) ' – anatol

+0

@anatol exchange' horizontalalignment' и 'x' /' y' (в обоих заявлениях просьба) - это более 6 символов ... и спасибо, что поймали мою ошибку! – gboffi

2

Специальное решение, которое вводит магическое значение 25, что я не понимаю, очень много, мягко говоря, является

plt.xlabel('pollo', horizontalalignment='right', position=(1,25)) 

Более разумный подход заключается в использовании какой y позиции axes.xaxis имеет Выбирается ... с этой идеей в виду вменяемый процедура, как правило, как

  1. получить объект, используя .get_object(...) метод родительского контейнера
  2. изменить объект
  3. обновления родителя, используя его .set_object(...) метода

В нашем случае, мы делаем сюжет, то мы получим текущую ось ax, которая содержит xaxis, который содержит label, чье положение и выравнивание мы хотим модифицировать.

... 
plt.xlabel('...') 
... 
ax = plt.gca() 
label = ax.xaxis.get_label() 
x_lab_pos, y_lab_pos = label.get_position() 
label.set_position([1.0, y_lab_pos]) 
label.set_horizontalalignment('right') 
ax.xaxis.set_label(label) 
... 
plt.show() 

Что касается действующих непосредственно на дефолтов matplotlib «s, я просмотрел структуру plt.rcParams данных, но я ничего полезного не заметил. Конечно, это не значит, что это невозможно, просто я не вижу жизнеспособного решения.

+0

Мне интересно, можно ли это сделать через глобальные настройки matplotlib –

Смежные вопросы