在matplotlib中将lineCollection覆盖在绘图上如何使两者对齐。

2024-09-30 18:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用python在一个形状文件上做一个热图。我需要做很多这样的,所以不想每次都在.shp中阅读。在

相反,我想我可以创建一个地图边界的lineCollection实例并覆盖两个图像。问题是-我好像不能让两个人正确地排成一行。在

下面是代码,其中linecol是lineCollection对象。在

fig = plt.figure()
ax = fig.add_subplot(111)
ax.contourf(xi,yi,zi)
ax.add_collection(linecol, autolim = False)
plt.show()

有没有一种简单的方法来确定linecol的限制,使之与另一个绘图区的限制相匹配?我和塞特·卡利姆玩过一场戏变换.Bbox,但似乎无法控制。在

非常感谢你的帮助!在


Tags: 文件实例代码图像add地图figplt
1条回答
网友
1楼 · 发布于 2024-09-30 18:15:31

由于涉及到各种坐标系,变换非常棘手。见http://matplotlib.sourceforge.net/users/transforms_tutorial.html。在

我成功地将LineCollection缩放到合适的大小,如下所示。关键是要认识到我需要将+ ax.transData添加到我在LineCollection上设置的新转换中。(如果不在艺术家对象上设置任何变换,ax.transData是默认值。它将数据坐标转换为显示坐标。)

from matplotlib import cm
import matplotlib.pyplot as plt
import matplotlib.collections as mc
import matplotlib.transforms as tx
import numpy as np

fig = plt.figure()

# Heat map spans 1 x 1.
ax = fig.add_subplot(111)
xs = ys = np.arange(0, 1.01, 0.01)
zs = np.random.random((101,101))
ax.contourf(xs, ys, zs, cmap=cm.autumn)

lines = mc.LineCollection([[(5,1), (9,5), (5,9), (1,5), (5,1)]])
# Shape spans 10 x 10. Resize it to 1 x 1 before applying the transform from
# data coords to display coords.
trans = tx.Affine2D().scale(0.1) + ax.transData
lines.set_transform(trans)
ax.add_collection(lines)

plt.show()

(此处输出:http://i.stack.imgur.com/hDNN8.png声誉不足,无法内联发布。) enter image description here

如果需要在x和y上不相等地转换或缩放形状,则可以很容易地修改此选项

相关问题 更多 >