我已经尝试过并尝试搜索解决方案,但我似乎无法使其正常工作,所以这是我的问题:
我正在尝试创建一个脚本,我可以在其中设置图形的大小(即图中的子图的数量)。对于图中的子图,它应该总是N * 2网格结构(具有相同的尺寸)。在网格中,我想绘制一些线条(具有特定颜色)并在图的底部添加水平颜色条。我已尝试按照Matplotlib 2 Subplots, 1 Colorbar中提到的问题解决方案。这是我的解决方案:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.colors as colors
import matplotlib.cm as cmx
import random
lines = np.random.rand(100, 10)
fig, ax = plt.subplots(nrows=2,ncols=2, sharex=True)
ranks = np.linspace(0,len(lines[0,:]), len(lines[0,:]))
norm = matplotlib.colors.Normalize(
vmin=np.min(ranks),
vmax=np.max(ranks))
c_m = matplotlib.cm.cool
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
s_m.set_array([])
for line, rank in zip(xrange(0,len(lines[0,:])), ranks):
try:
no = random.randint(0,1)
no2 =random.randint(0,1)
im =ax[no,no2].plot(lines[:, line], c=s_m.to_rgba(rank))
except IOError as error:
print error
fig.subplots_adjust(bottom=0.2)
fig.colorbar(s_m, orientation='horizontal')
plt.show()
所以我的问题是:我如何制作一个基于网格的子图(用于线和散点图),我可以在底部水平添加一个颜色条以覆盖底部的两个子图?
答案 0 :(得分:1)
答案 1 :(得分:1)
所以我想出来了,ThomasKühn和ImportanceOfBeingErnest都帮助我看到错误:
首先,我将问题改为可复制,并使用mappable而不是ax [1,1]。一旦这样做,在我的问题中,我可以看到它实际上是如何直接转移到我所链接的问题。这是我的结果:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.colors as colors
import matplotlib.cm as cmx
import os
import random
fnames = np.random.rand(100, 10)
fig, ax = plt.subplots(nrows=2,ncols=2, sharex=True, figsize=(4,4))
parameters = np.linspace(0,len(fnames[0,:]), len(fnames[0,:]))
norm = matplotlib.colors.Normalize(
vmin=np.min(parameters),
vmax=np.max(parameters))
c_m = matplotlib.cm.cool
s_m = matplotlib.cm.ScalarMappable(cmap=c_m, norm=norm)
s_m.set_array([])
for filename, parameter in zip(xrange(0,len(fnames[0,:])), parameters):
try:
no = random.randint(0,1)
no2 =random.randint(0,1)
ax[no,no2].plot(fnames[:, filename], c=s_m.to_rgba(parameter))
except IOError as error:
print error
for ax1 in ax.flatten():
ax1.set_xlabel('Y')
ax1.set_ylabel('X')
plt.title('Title')
fig.subplots_adjust(bottom=0.2)
cbar_ax = fig.add_axes([0.13, 0.08, 0.74, 0.03])
cbar = fig.colorbar(s_m, cax=cbar_ax, orientation='horizontal')
cbar.set_label('Focus: ')
plt.show()
这给了这个情节。谢谢你的提示。您是否建议将网格结构从plt.subplots更改为AxesGrid,在mpl_toolkits.axes_grid1中找到?