在python中绘制图像背景[重复]

Posted

技术标签:

【中文标题】在python中绘制图像背景[重复]【英文标题】:Plot over an image background in python [duplicate] 【发布时间】:2016-03-31 05:18:08 【问题描述】:

我想使用 matplotlib 在图像背景上绘制图形。我在matlab中找到了如何做到这一点http://www.peteryu.ca/tutorials/matlab/plot_over_image_background

我尝试过类似这样的基本操作:

im = plt.imread("dd.png")
implot = plt.imshow(im)
theta=np.linspace(0,2*np.pi,50)
z=np.cos(theta)*39+145
t=np.sin(theta)*39+535-78+39
plt.plot(z,t)
plt.show()

但它给了我一些非常丑陋的东西:

【问题讨论】:

imshow 可以接受更多参数,允许您指定图像的放置位置及其在坐标空间中的范围。默认情况下,左上角位于 (0, 0) 处,每个像素的宽高为 1x1 单位。 【参考方案1】:

就像在您链接到的 MATLAB 示例中一样,您必须在调用 imshow 时指定所需的图像范围。

默认情况下,matplotlib 和 MATLAB 都将图像的左上角作为原点,从那里向下和向右移动,并将每个像素设置为坐标空间中的 1x1 正方形。这就是您的图像正在做的事情。

您可以使用extent 参数来控制它,该参数采用列表[left, right, bottom, top] 的形式。

不使用范围看起来像这样:

import matplotlib.pyplot as plt
img = plt.imread("airlines.jpg")
fig, ax = plt.subplots()
ax.imshow(img)

您可以看到,我们有一个 1600 x 1200 的塞缪尔·杰克逊 (Samuel L. Jackson),坦率地说,他对他的航班上的蛇感到非常恼火。

但是,如果我们想在此之上绘制一条从 0 到 300 的二维线,我们可以这样做:

fig, ax = plt.subplots()
x = range(300)
ax.imshow(img, extent=[0, 400, 0, 300])
ax.plot(x, x, '--', linewidth=5, color='firebrick')

我不知道这条线是否能帮助杰克逊先生解决蛇的问题。至少,它不会让事情变得更难。

【讨论】:

这是 A) 正是我今天需要的答案,B) 正是我今天早上需要的笑声。干得好! 这太棒了!

以上是关于在python中绘制图像背景[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python海龟画图怎么把背景变成黑色

【无机纳米材料科研制图——OriginLab 0206】Origin绘制X射线衍射XRD堆叠图

Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)

【无机纳米材料科研制图——OriginLab 0204】Origin细胞存活率柱状图绘制

GLSL索引绘图并设置纹理案例

创建CAD图块,便于粘贴使用