【问题标题】:Plot 2D array data into figure centered at specific pixel将二维数组数据绘制成以特定像素为中心的图形
【发布时间】:2021-02-05 14:40:59
【问题描述】:

我有一个带有轴对象的图形。 我想使用 ax.scatter 将一些东西分散到情节中,这没问题。最重要的是,我想将二维数组数据绘制到同一个图中(例如使用 ax.imshow...):

import numpy as np
from matplotlib import pyplot as plt

vidRes = np.array([[-700, 700], [-500,500]])
dim = np.array([vidRes[0,1] - vidRes[0,0],vidRes[1,1] - vidRes[1,0]])

with plt.style.context('dark_background'):
    fg = plt.figure()
    fg.set_size_inches((10, 10*dim[1]/dim[0]))
    ax = fg.add_subplot(111)
    ax.set_aspect('equal')
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    ax.set_xlim(vidRes[0,0], vidRes[0,1])
    ax.set_ylim(vidRes[1,0], vidRes[1,1])

random = np.random.random(size = (401, 401,),)
ax.imshow(random, cmap = 'hot')

二维数组有 401x401 个条目。有没有一种直接的方法可以移动 imshow 对象,使其在我的 1400x1000 像素图形中的给定像素上居中?我是瞎了眼看不到吗?

图像被绘制到图中,但它始终与左下角或左上角对齐(取决于 ax.imshow 的原点)到我的绘图中心的 (0,0) 坐标,我可以'不要把它移到别的地方。

【问题讨论】:

    标签: python matplotlib scatter imshow


    【解决方案1】:

    您可以使用extent 参数。来自文档:

    extent:标量(左、右、下、上),可选,默认值:无 在数据坐标中的位置,左下角和 右上角。如果是None,图像的位置使得 像素中心落在从零开始的(行、列)索引上。

    将您的 imshow 呼叫更改为以下行:

    ax.imshow(random, cmap = 'hot', extent=[-200.5, 200.5, -200.5, 200.5])
    

    产量:

    【讨论】:

    • 非常感谢,我似乎没有做对。我之前使用过像素坐标的范围,但是因为我是在微米的基础上绘制的,所以我的 imshow plot somwhere 靠近无穷大......我通过使用 imshow extent 参数解决了我的问题,我只是在其中放置了左、右的坐标,以米为单位的底部和顶部点。所以我没有使用像素坐标(例如,在 (1000x1000) 图像中的位置 (500,323)),而是我在散点图中使用的相同米值,以防有人想知道在其中放置什么值。跨度>
    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2016-05-18
    相关资源
    最近更新 更多