python - 如何使用matplotlib将精确位置的图片添加到图形中?
问题描述
我想向一个图形添加一张图片,并且我希望它在调整窗口大小时与整个图形一起缩放,以便它保持在其位置上。我尝试添加新轴 ( add_axis
) 和annotationBboxes
,但两种方法都失败了。我可以在图上放一个图像,但是当窗口调整大小时它会移动。这是我的代码的相关片段:
class Field:
def __init__(self, cords, rgb, lettuce=True):
self.x = cords[0]
self.y = cords[1]
self.rgb = (rgb[0]/255, rgb[1]/255, rgb[2]/255)
self.lettuce = lettuce
def image(self):
import matplotlib.pyplot as plt
return plt.imread(self.__class__.__name__ + '.png', format='png')
class Board:
def __init__(self, dim):
self.dim = dim
self.all_fields = []
def add_field(self, field):
self.all_fields.append(field)
def show(self):
import matplotlib.pyplot as plt
import matplotlib.patches as pat
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
ax.set_xlim((-1, self.dim + 1))
ax.set_ylim((-1, self.dim + 1))
plt.axis('off')
for x in range(self.dim):
for y in range(self.dim):
ax.add_patch(pat.Rectangle((x, y), 1, 1,
linewidth=1, edgecolor='k', facecolor=(1, 1, 1)))
for field in self.all_fields:
ax.add_patch(pat.Rectangle((field.x, field.y), 1, 1,
linewidth=1, edgecolor='k', facecolor=field.rgb))
im = field.image()
newax = fig.add_axes([0.12, 0.54, 0.22, 0.1], anchor='NE')
newax.imshow(im)
newax.axis('off')
if field.lettuce:
ax.add_patch(pat.Circle((field.x + 0.5, field.y + 0.5), 0.2, facecolor=(0, 1, 0)))
fig.canvas.draw()
P = Board(10)
A = Field((0, 4), (255, 106, 0))
P.add_field(A)
P.show()
所以我添加了矩形来创建一个网格。然后我添加代表特定字段的彩色矩形。现在我想用沙漠图像替换橙色矩形。最后一步是有问题的,因为很难将图像放置在正确的位置,并且在调整窗口大小时它会移动。
解决方案
推荐阅读
- firebase - [Firestore.instance.settings(timestampsInSnapshotsEnabled: true)]=> 这里“timestampsInSnapshotsEnabled”不起作用或不可用
- java - 射线和球体的交点 - 求解一个二次方程
- twilio - 如何仅通过 Twilio Api 将 TwiML 添加到 TwiML Bin?
- pandas - 熊猫读取 csv 跳过 # 字符
- algorithm - 使用 SML 在树中查找字符
- python-3.x - UnboundLocalError:分配前引用的局部变量“result_box”
- java - 比较输出流性能
- matlab - 检测人脸,裁剪并将它们保存在不同的文件中
- ios - SwiftUI - 作为结构的数据源 - 通过副本实现性能和冗余 - 为什么还要使用它?
- python - 当 id 想输出“错误”或在这种情况下“超出范围”时,如何使标签消失