Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
matplotlib热图,自定义y轴_Matplotlib_Heatmap - Fatal编程技术网

matplotlib热图,自定义y轴

matplotlib热图,自定义y轴,matplotlib,heatmap,Matplotlib,Heatmap,现在,我的代码如下所示: #generate 262*20 elements values = np.random.random(262*20).tolist() # convert the list to a 2D NumPy array values = np.array(values).reshape((262, 20)) h, w = values.shape #h=262, w=20 fig = plt.figure(num=None, dpi=80,figsize=(9, 7), f

现在,我的代码如下所示:

#generate 262*20 elements
values = np.random.random(262*20).tolist()
# convert the list to a 2D NumPy array
values = np.array(values).reshape((262, 20))
h, w = values.shape
#h=262, w=20
fig = plt.figure(num=None, dpi=80,figsize=(9, 7), facecolor='w', edgecolor='k')   
ax = fig.add_subplot(111)
#fig, ax = plt.subplots()
plt.imshow(values)
plt.colorbar()
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))
ax.set_aspect(w/h)
plt.show()
mylist =[26, 27, ......missing 57, 239, 253, ....290]
plt.yticks(np.arange(h), mylist)
情节如下所示:

如您所见,y轴的范围为0-261

但我希望我的y轴从26到290,缺少57、239和253。所以总共还是262个。我尝试生成如下列表:

#generate 262*20 elements
values = np.random.random(262*20).tolist()
# convert the list to a 2D NumPy array
values = np.array(values).reshape((262, 20))
h, w = values.shape
#h=262, w=20
fig = plt.figure(num=None, dpi=80,figsize=(9, 7), facecolor='w', edgecolor='k')   
ax = fig.add_subplot(111)
#fig, ax = plt.subplots()
plt.imshow(values)
plt.colorbar()
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))
ax.set_aspect(w/h)
plt.show()
mylist =[26, 27, ......missing 57, 239, 253, ....290]
plt.yticks(np.arange(h), mylist)
Y轴看起来就像所有东西都挤在一起

所以我试着:

pylab.ylim([26, 290])
看起来是这样的:

#generate 262*20 elements
values = np.random.random(262*20).tolist()
# convert the list to a 2D NumPy array
values = np.array(values).reshape((262, 20))
h, w = values.shape
#h=262, w=20
fig = plt.figure(num=None, dpi=80,figsize=(9, 7), facecolor='w', edgecolor='k')   
ax = fig.add_subplot(111)
#fig, ax = plt.subplots()
plt.imshow(values)
plt.colorbar()
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))
ax.set_aspect(w/h)
plt.show()
mylist =[26, 27, ......missing 57, 239, 253, ....290]
plt.yticks(np.arange(h), mylist)


所以感觉第一行中的数据总是对应于[0],而不是[26]

建议您使用
pcolormesh
。如果需要间隙,则对有间隙的区域使用
numpy.ma.masked
数组

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

values = np.random.rand(290,20)
values[:26, :] = np.NaN
values[ [57, 239, 253], :] = np.NaN
values = np.ma.masked_invalid(values)

h, w = values.shape
fig, ax = plt.subplots(figsize=(9,7))
# Make one larger so these values represent the edge of the data pixels.
y = np.arange(0, 290.5)
x = np.arange(0, 20.5)

pcm = ax.pcolormesh(x, y, values, rasterized=True) # you don't need rasterized=True
fig.colorbar(pcm)
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))
plt.show()

编辑:如果您只想使用262x20阵列:

values = np.random.rand(262,20)

h, w = values.shape
fig, ax = plt.subplots(figsize=(9,7))
# Make one larger so these values represent the edge of the data pixels.
y = np.arange(0, 290.5)
y = np.delete(y, [57, 239, 253])
y = np.delete(y, range(26))

x = np.arange(0, 20.5)

pcm = ax.pcolormesh(x, y, values, rasterized=True) # you don't need rasterized=True
fig.colorbar(pcm)
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))

plt.show()
请注意,这不会在57、239和253处放置一个空行。如果您需要,您需要执行以下操作:

values = np.random.rand(262,20)
Z = np.ones((290, 20)) * np.NaN
inds = set(range(290)) - set(list(range(26)) + [57, 239, 253])
for nn, ind in enumerate(inds):
    Z[ind, :] = values[nn,:]

h, w = values.shape
fig, ax = plt.subplots(figsize=(9,7))
# Make one larger so these values represent the edge of the data pixels.
y = np.arange(0, 290.5)

x = np.arange(0, 20.5)

pcm = ax.pcolormesh(x, y, Z, rasterized=True) # you don't need rasterized=True
fig.colorbar(pcm)
plt.xticks(np.arange(w), list('PNIYLKCVFWABCDEFGHIJ'))

plt.show()

我认为您需要修改记号标签(请参阅),而不是记号本身。刻度与实际数据相对应,除非您生成26-290范围内的数据,否则简单地更改刻度不会得到所需的结果。如果值列表不是随机生成的,则它们来自文件输入。values=从文件中读取,然后重塑为numpy数组。形成初始数组是一个不同的问题,在理解文件格式的情况下很难猜测您的用例。。。