python - 在 matplotlib 中的绘图上叠加 lineCollection - 如何让两者对齐。

标签 python matplotlib transform

我正在尝试在 python 中对形状文件制作热图。我需要制作其中的很多,所以不想每次都读入 .shp。

相反,我想我可以创建一个 map 边界的 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 的限制以匹配其他绘图的限制?我玩过 set_xlim 和 transforms.Bbox,但似乎无法管理它。

非常感谢您的帮助!

最佳答案

由于涉及各种坐标系,因此转换很棘手。参见 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 上不均匀地平移或缩放形状,修改它应该很容易。

关于python - 在 matplotlib 中的绘图上叠加 lineCollection - 如何让两者对齐。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904199/

相关文章:

CSS变换过渡问题

css - 转换函数及其操作顺序

python - 当我尝试通过multiprocess.Pool在python中加速程序时,为什么多进程比单进程慢?

python - 初学者 Python : How to give different responses to ELSE in a while-loop

python - RGB 是从 ImageGrab.grab().load() 中获取的,是数组还是字符串

python - 将 mpatches.Patch 用于自定义图例

python - matplotlib 和阶乘函数

python - 如何按类别绘制平均值条形图

javascript - 检测属性是否可以通过 CSS3 转换设置动画?

python - 在 C 中从内存运行 pyc 数据