Я хочу внести некоторые изменения в несколько выбранных меток на графике.
Например, если я делаю:
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
размер шрифта и ориентация метки галочки изменены.
Однако, если попробовать:
label.set_text('Foo')
метка галочки не изменяется. Также если я сделаю:
print label.get_text()
ничего не напечатано.
Вот еще странность. Когда я попробовал это:
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
Печатаются только пустые строки, но график содержит метки, помеченные как «0.0», «0.5», «1.0», «1.5» и «2.0».
python
matplotlib
Конфискатор
источник
источник
draw()
прежде чем пытаться распечатать этикетки, вы получите то, что ожидаете. Установка отдельных меток тиков, к сожалению, сложнее (происходит то, что локатор и форматировщик тиков не были сброшены, и они переопределяют вещи, когда выset_text
). Я добавлю пример чуть позже, если кто-то не побьет меня. Хотя сейчас мне нужно сесть на автобус.Ответы:
Предостережение: если тиклэйблы уже не установлены в строку (как это обычно имеет место, например, в блокпосте), это не будет работать с любой версией matplotlib, более новой, чем
1.1.0
. Если вы работаете с текущим мастером github, это не сработает. Я еще не уверен, в чем проблема ... Это может быть непреднамеренное изменение, а может и нет ...Обычно вы делаете что-то вроде этого:
Чтобы понять причину, по которой вам нужно прыгать через столько обручей, вам нужно немного больше понять, как структурирован matplotlib.
Matplotlib сознательно избегает «статического» позиционирования тиков и т. Д., Если это явно не указано. Предполагается, что вы захотите взаимодействовать с сюжетом, и поэтому границы сюжета, отметки, метки и т. Д. Будут динамически изменяться.
Поэтому вы не можете просто установить текст данной метки. По умолчанию он сбрасывается локатором и форматером оси каждый раз при построении графика.
Однако, если локаторы и форматеры установлены как статические (
FixedLocator
иFixedFormatter
, соответственно), метки галочек остаются прежними.Это то, что
set_*ticklabels
илиax.*axis.set_ticklabels
делает.Надеемся, что это делает более понятным, почему изменение индивидуальной метки тика немного запутано.
Часто, что вы действительно хотите сделать, это просто аннотировать определенную позицию. В этом случае, посмотрите
annotate
вместо этого.источник
bold
то время как другие используют вес шрифта слова «легкий». Есть ли способ сделать это?fig.canvas.draw()
это крайне важноМожно также сделать это с pylab и xticks
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
источник
В более новых версиях
matplotlib
, если вы не устанавливаете метки тиков с кучейstr
значений, они используются''
по умолчанию (а когда график отрисовывается, метки являются просто значениями тиков). Зная это, чтобы получить желаемый результат, потребуется что-то вроде этого:и результат:
и теперь, если вы проверите
_xticklabels
, их больше нет''
.Работает в версиях от
1.1.1rc1
текущей версии2.0
.источник
set_xticklabels
смешанный список строк и тиковых объектов.ax.get_xticks().tolist()
). Решение с наибольшим количеством голосов не (ax.get_xtickslabels()
). Каким-то образом он не смог извлечь ярлыки до того, какplt.show()
был извинен, хотя я использовал,fig.canvas.draw()
как предлагалось.Прошло много времени с тех пор, как был задан этот вопрос. На сегодняшний день (
matplotlib 2.2.2
) и после некоторых чтений и испытаний, я думаю, что лучший / правильный способ заключается в следующем:Matplotlib имеет модуль с именем ,
ticker
который «содержит классы для поддержки полностью настраиваемый клещом размещая и форматирования» . Чтобы изменить определенный тик из сюжета, у меня работает следующее:Предостережение!
x
значение тика иpos
его относительное положение по порядку на оси. Обратите внимание, что при индексацииpos
принимаются значения, начинающиеся с1
, а не0
как обычно.В моем случае я пытался отформатировать
y-axis
гистограмму с процентными значениями.mticker
имеет другой класс,PercentFormatter
который может сделать это легко, без необходимости определять отдельную функцию, как раньше:В данном случае
xmax
это значение данных, которое соответствует 100%. Проценты рассчитываются какx / xmax * 100
, поэтому мы исправляемxmax=1.0
. Кроме того,decimals
это число десятичных знаков после точки.источник
Класс axes имеет функцию set_yticklabels, которая позволяет вам устанавливать метки тиков , например:
Я все еще работаю над тем, почему ваш пример выше не сработал.
источник
Это работает:
источник
Это также работает в matplotlib 3:
источник
Если вы не работаете с
fig
иax
хотите изменить все метки (например, для нормализации), вы можете сделать это:источник
Попробуй это :
источник
ты можешь сделать:
источник