【问题标题】:Plotting not rounded values in matplotlib with imshow使用 imshow 在 matplotlib 中绘制未舍入的值
【发布时间】:2017-09-02 21:05:54
【问题描述】:

我正在使用 matplotlib(imshow 函数)绘制一个 numpy 数组。它的大小是 1000*3000,它的值是 0 到 2000 左右之间的浮点数。

当最大值在 10 左右(这只是为了测试)时,我的图上有正确的值,但是在那个幅度下,所有值都四舍五入为 int,所以我看不到数组某些部分的细微差别。

imshow 中是否有对应于该问题的参数?我想到了第二个(cmap=None),但没有成功。

这是一个例子:

import numpy as np
import matplotlib.pyplot as plt
import random as rand

data = np.zeros((10,10))

for i in range(10):
    for j in range(10):
        data[i,j] = 900 + 10*i + rand.random()

plt.imshow(data)
plt.show()

matplotlib 窗口中的值都是整数,而在实际数组中则不是。

【问题讨论】:

标签: python numpy matplotlib


【解决方案1】:

您可以修改坐标格式器。官方示例显示为here。此外,this 问题答案的第一部分显示了做同样事情的方式略有不同。我修改了代码,使 x 和 y 坐标是整数,而 z 是具有 4 个小数位的浮点数:

class Formatter(object):
    def __init__(self, im):
        self.im = im
    def __call__(self, x, y):
        z = self.im.get_array()[int(y), int(x)]
        return 'x=%i, y=%i, z=%1.4f' % (x, y, z)

data = np.zeros((10, 10))

for i in range(10):
    for j in range(10):
        data[i, j] = 900 + 10 * i + rand.random()

fig, ax = plt.subplots()
im = ax.imshow(data)
ax.format_coord = Formatter(im)

plt.show()

【讨论】:

  • 虽然坐标格式化程序示例是正确的,但此答案中的格式化程序在默认情况下错误了半个像素。
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2016-02-23
相关资源
最近更新 更多