2017-04-07 54 views
1

我正在用matplotlib(imshow函数)绘制numpy数组。它的大小是1000 * 3000,其值在0到2000之间浮动。使用imshow在matplotlib中绘制未舍入的值

当最大值大约为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窗口中的值都是整数,而真实的阵列中它们不是。

+1

A [Minimal,Complete,and Verifiable Example](http://stackoverflow.com/帮助/ mcve)会很有帮助。 – DavidG

回答

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() 
+0

尽管坐标格式化程序示例正确,但此答案中的格式化程序在默认情况下的半个像素不正确。 – ImportanceOfBeingErnest