Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将pcolormesh plot存储为numpy数组,同时保留数据形状?_Python_Numpy_Matplotlib_Plot_Visualization - Fatal编程技术网

Python 如何将pcolormesh plot存储为numpy数组,同时保留数据形状?

Python 如何将pcolormesh plot存储为numpy数组,同时保留数据形状?,python,numpy,matplotlib,plot,visualization,Python,Numpy,Matplotlib,Plot,Visualization,我似乎在存储使用matplotlib.pcolormesh创建的绘图时遇到了一些问题。据我所知,pcolormesh使用颜色映射转换输入数据矩阵。colormap为矩阵中的每个条目输出RGB值,并对其进行打印 在我的脑海里,这和 import numpy as np import matplotlib.pyplot as plt import matplotlib from PIL import Image import librosa import librosa.display from m

我似乎在存储使用matplotlib.pcolormesh创建的绘图时遇到了一些问题。据我所知,pcolormesh使用颜色映射转换输入数据矩阵。colormap为矩阵中的每个条目输出RGB值,并对其进行打印

在我的脑海里,这和

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")
这里的问题是,被表示为绘图的数据的numpy数组与第一个绘图显示的不相似。我需要numpy有代表绘图的数据,这样如果我想绘图,我会得到与第一个相同的图像,numpy数组的形状应该与绘图1中使用的输入数据相似

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

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

如果这在matplotlib中不可能,那么在哪个库中也可以这样做呢

数据范围从-1.828067到22.70058。但是,在第二个绘图中,将其剪切到vmin=0和vmax=1之间的范围。因此,所有大于1的数据将在imshow图中显示为红色

如果你使用

norm = matplotlib.colors.Normalize(vmin=-1.828067,vmax=22.70058)
你应该得到原始数组

请注意,如果不将数据转换为颜色数组,结果应该是相同的,因此整个转换可能是不必要的,您可以简单地进行

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

我最后做的是:

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函数,并认为normalize将处理输入数据,但事实似乎并非如此。所以我在绘制图之前用Sklearn将其归一化

然后利用cmap

结果是: