2013-04-05 3 views
3

При рисовании текста в matplotlib с text(), а затем интерактивное панорамирование изображения, полученный нарисованный текст не обрезается в окне данных. Это противоречит тому, как работает печать данных или текст чертежа с использованием annotate(), и не создает интуитивного смысла, поскольку text() использует координаты окон данных.matplotlib text not clipped

import matplotlib.pyplot as plt 

plt.ion() 
fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.text(0.5, 0.2, 'text') 
ax.annotate('anno', (0.5, 0.3)) 

plt.draw() 

Интерактивно панорамируйте текст из окна данных со всех сторон. Образец «anno» annotate() обрезается, когда контрольная точка пересекает границу окна данных, а нарисованный «текст» - text().

Я не уверен, что это поведение является признаком или ошибкой, но обязательно похоже на последнее, поскольку этот текст мешает меток осей и т. Д. Используя 1.2.1 с бэкэндом TkAgg.

Дополнительный вопрос будет, как правильно обрезать весь текст от выхода за пределы окна данных, а не только тогда, когда ссылка координат делает.

Спасибо!

ответ

5

Такое поведение может быть проконтролировано kwarg clip_on:

import matplotlib.pyplot as plt 

plt.ion() 
fig = plt.figure() 
ax = fig.add_subplot(111) 

txt = ax.text(0.5, 0.2, 'text') 
anno = ax.annotate('anno', (0.5, 0.3)) 
txt_clip = ax.text(0.5, 0.5, 'text-clip', clip_on=True) 

plt.draw() 

axes.textdoc. Существуют аргументы как для, так и против обрезания текста в области данных.

Был bug в mpl, который сделал txt.set_clip_on(True) не работает должным образом.

+0

Спасибо за ответ, это решение действительно работает (не знаю, почему кто-то проголосовал за него). Любопытно, что исходный текстовый объект имеет обрезку. 't1 = ax.text (0.5.0.2, 'text'); t1.get_clip_on() 'возвращает значение True. – CNK

+0

Кто-то, кажется, находится в ниспадающем свете, что я могу сказать. Если вы этого еще не сделали, вы должны поддержать и принять его ответ. Когда я это увидел, все еще было в -1. – Vorticity

+0

@CNK Можете ли вы сообщить об этом поведении (неверный результат 'get_clip_on') в качестве ошибки? – tacaswell