Han*_*Fry 6 python transform matplotlib
我正在尝试在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()
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来修复linecol的限制以匹配其他情节的限制?我玩过set_xlim和transforms.Bbox,但似乎无法管理它.
非常感谢您的帮助!
由于涉及各种坐标系,变换很棘手。请参阅http://matplotlib.sourceforge.net/users/transforms_tutorial.html。
我设法将 a 缩放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()
Run Code Online (Sandbox Code Playgroud)
(此处输出: https: //i.stack.imgur.com/hDNN8.png声誉不足,无法内嵌发布。)

如果您需要在 x 和 y 上平移或不均匀缩放形状,则应该很容易修改此设置。
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |