我如何将pcolormesh图存储为numpy数组 - 同时保留数据形状?

时间:2017-05-14 01:14:32

标签: python numpy matplotlib plot visualization

我似乎在存储使用pcolormesh创建的地图时遇到了一些问题。据我所知,import numpy as np import matplotlib.pyplot as plt import matplotlib from PIL import Image import librosa import librosa.display from matplotlib import cm fig = plt.figure(figsize=(12,4)) min = -1.828067 max = 22.70058 data = np.random.uniform(low=min, high=max, size=(474,40)) librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet) plt.axis('off') plt.show() raw_input("sadas") convert = plt.get_cmap(cm.jet) norm = matplotlib.colors.Normalize(vmin=0,vmax=1) numpy_output_static = convert(norm(data.T)) plt.imshow(numpy_output_static,cmap = cm.jet, aspect = 'auto') plt.show() raw_input("asds") 使用色彩映射转换输入数据矩阵。色图为矩阵中的每个条目输出RGB值并绘制它。

在我的脑海中与

类似
matplotlib

enter image description here

enter image description here

问题在于,数据的numpy数组表示为图,与第一个图显示的不同。我需要numpy来获得表示绘图的数据,这样如果我想绘制它,我将获得与第一个相同的图像,并且numpy数组的形状应该类似于用于的输入数据情节1.

numpy被馈送到神经网络,用于检测模式,这意味着表示在这里很重要。

那么如何让它存储实际的情节,没有所有红色的东西......

如果在s = s.replace(/([a-z])([A-Z])/g, '$1 $2'); 中无法实现这一点,那么可以在其他库中执行此操作。

2 个答案:

答案 0 :(得分:1)

数据范围从-1.82806722.70058。但是,在第二个图中,您将其缩小到vmin=0vmax=1之间的范围。因此,imshow图中所有大于1的数据都将为红色。

如果您使用

norm = matplotlib.colors.Normalize(vmin=-1.828067,vmax=22.70058)

你应该得到原始阵列。

请注意,如果您不将数据转换为颜色数组,结果应该相同,这样整个转换可能是不必要的,您只需执行

plt.imshow(data.T,cmap = cm.jet, aspect = 'auto')

答案 1 :(得分:-1)

我最终做的是:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from PIL import Image
import librosa
import librosa.display
from matplotlib import cm
from sklearn import preprocessing

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))

fig = plt.figure(figsize=(12,4))
min = -1.828067
max = 22.70058
data =  np.random.uniform(low=min, high=max, size=(474,40))
librosa.display.specshow(data.T,sr=16000,x_axis='frames',y_axis='mel',hop_length=160,cmap=cm.jet)
plt.axis('off')
plt.show()
#raw_input("sadas")

convert = plt.get_cmap(cm.jet)
data = min_max_scaler.fit_transform(data)
print data.min()
print data.max()
numpy_output_static = convert(data.T)
plt.imshow(numpy_output_static, aspect = 'auto')
plt.show()
#raw_input("asds")

我可能习惯于将函数规范化不正确,并认为normalize会处理输入数据,这似乎并非如此。所以我在制作情节之前使用sklearn来对其进行标准化。

然后再使用cmap。

结果是:

enter image description here