我有6个列表,我想为所有可能的组合创建散点图。这意味着我想要创建n(n-1)/ 2个组合,因此需要创建15个图。我已根据以下内容正确完成了此操作 脚本。
for i in d:
for j in d:
if(j>i):
plt.cla() # Clear axis
plt.clf() # Clear figure
correlation_coefficient = str(np.corrcoef(d[i], d[j])[0][1])
plt.scatter(d[i],d[j])
plt.xlabel(names[i])
plt.ylabel(names[j])
plt.title('Correlation Coefficient: '+correlation_coefficient)
plt.grid()
plt.savefig(names[i]+"_"+names[j]+".png")
我想使用子图将所有这些图保存在一个图中,其中第一行将具有组合(0,1)(0,2)(0,3)(0,4)(0,5)第二排(1,2)(1,3)(1,4)(1,5)第三排(2,3)(2,4)(2,5)等。
因此最终结果将是一个包含三角形子图的图。
更新:
如果我使用子图(下面的代码),我能够以某种方式得到结果,但它不是最佳的,因为我创建一个6x6帧,而你可以用5x5。
fig = plt.figure()
cnt = 0
# Create scatterplots for all pairs
for i in d:
for j in d:
if(i>=j):
cnt=cnt+1
if(j>i):
cnt += 1
fig.add_subplot(6,6,cnt) #top left
correlation_coefficient = str(np.corrcoef(d[i], d[j])[0][1])
plt.scatter(np.log(d[i]),np.log(d[j]))
fig.savefig('test.png')
答案 0 :(得分:0)
使用gridspec:
from matplotlib import pyplot as plt
fig = plt.figure()
data = [(1,2,3),(8,2,3),(0,5,2),(4,7,1),(9,5,2),(8,8,8)]
plotz = len(data)
for i in range(plotz-1):
for j in range(plotz):
if(j>i) :
print(i,j)
ax = plt.subplot2grid((plotz-1, plotz-1), (i,j-1))
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
plt.scatter(data[i],data[j]) # might be nice with shared axis limits
fig.show()
使用add_subplot,您可以获得从MATLAB继承的奇怪性,它对子图计数进行1索引。 (你也有一些计数错误。)这是一个只跟踪各种指数的例子:
from matplotlib import pyplot as plt
fig = plt.figure()
count = 0
data = [(1,2,3),(8,2,3),(0,5,2),(4,7,1),(9,5,2),(8,8,8)]
plotz = len(data)
for i in range(plotz-1):
for j in range(plotz):
if(j>i):
print(count, i,j, count -i)
ax = fig.add_subplot(plotz-1, plotz-1, count-i)
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
plt.text(.15, .5,'i %d, j %d, c %d'%(i,j,count))
count += 1
fig.show()
N.b:显而易见的错误(您的原始代码add_subplot(5,5,cnt))
是一个很好的暗示:
...用户/ lib / python2.7 / site-packages / matplotlib / axes.pyc in init (自我,无花果,* args,** kwargs)
9249 self._subplotspec = GridSpec(行, cols)[num [0] - 1:num 1]
9250其他:
- > 9251 self._subplotspec = GridSpec(rows,cols)[int(num) - 1]
9252 #num - 1用于从MATLAB转换为 python索引