我的问题是对this question的一种跟进。 我使用接受的答案中提出的解决方案将一些图像作为刻度标签:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.image import BboxImage,imread
from matplotlib.transforms import Bbox
# define where to put symbols vertically
TICKYPOS = -.6
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
plt.xlim((0,10))
plt.ylim((0,10))
# Remove tick labels
ax.get_xaxis().set_ticklabels([])
# Go from data coordinates to display coordinates
lowerCorner = ax.transData.transform((.8,TICKYPOS-.2))
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2))
bbox_image = BboxImage(Bbox([lowerCorner,upperCorner]),
norm = None,
origin=None,
clip_on=False)
bbox_image.set_data(imread('thumb.png'))
ax.add_artist(bbox_image)
其中thumb.png是我想作为刻度标签放置的图像的示例。
然后我用plt.savefig("bbox_large.png")
保存图像,它可以正常工作:
不幸的是,图片周围仍有很多空白。我尝试使用plt.savefig("bbox_tight.png",bbox_inches='tight')
删除它。但是,定位变得混乱了:
就我对matplotlib的理解而言,问题在于bbox_inches='tight'
的{{1}}选项实际上会更改显示坐标系,即原点不在同一位置。该图以某种方式正确显示,但似乎添加到轴上的艺术家的坐标不会自动更新。
我尝试使用以下方法来考虑额外的艺术家:
savefig
但结果相同。
我还尝试使用event manager手动更新显示坐标:
plt.savefig("bbox_tight_extra.png",bbox_extra_artists=[bbox_image],bbox_inches='tight')
但它也给出相同的结果。我认为这是因为我没有显式使用import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.image import BboxImage,imread
from matplotlib.transforms import Bbox
def ondraw(event):
# Go from data coordinates to display coordinates
lowerCorner = ax.transData.transform((.8,TICKYPOS-.2))
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2))
bbox_image = BboxImage(Bbox([lowerCorner,upperCorner]),
norm = None,
origin=None,
clip_on=False)
bbox_image.set_data(imread('thumb.png'))
ax.add_artist(bbox_image)
# define where to put symbols vertically
TICKYPOS = -.6
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
plt.xlim((0,10))
plt.ylim((0,10))
# Remove tick labels
ax.get_xaxis().set_ticklabels([])
fig.canvas.mpl_connect('draw_event', ondraw)
变量,因此没有使用更新的显示坐标系,也就是说,我使用的event
不是正确的变量。
如何避免图像的位置被transData
弄乱?