用Matplotlib在同一个图形中显示两个不同性质的绘图

2024-04-23 19:13:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着画两个不同的图(一个是由一个带有色阶的矩阵生成的简单图形),另一个是由一组代表骨架的点组成的x和y轴的图形。矩阵色阶与骨架图相关联。它必须在一个循环中显示n次,每次画布关闭时,然后显示下一个绘图。你知道吗

但我只能一次显示每个图形,比如说,我必须有43块画布,每一块都有一个图形和一个色阶矩阵并排,相反,我得到86个图,一个是点图,另一个是比例矩阵,等等。你知道吗

代码在下面,所以每个情节的图片。我使用gridspec生成图形,使用一个简单的imgplot生成色阶矩阵。你知道吗

from pylab import *
from matplotlib import gridspec
import numpy as np
import sys
import math
import matplotlib.pyplot as plt


movimento = np.loadtxt("file01.txt")
qtd_posturas = int(len(movimento)/20)


c = 0
lista = []
for i in range(qtd_posturas):
lista.append(movimento[(i*20):((i+1)*20),:3]) 

matrixCoord = np.array(lista)


matrixDistance= np.zeros((qtd_posturas,20,20))
for k in range(qtd_posturas):
    for i in range(len(matrixDistance[0])):
        for j in range(len(matrixDistance[0])):
        matrixDistance[k,i,j] = np.linalg.norm(matrixCoord[k,i,:] -         matrixCoord[k,j,:])

num_plots = qtd_posturas
z = 0
for m in range(num_plots):
  img = matrixDistance[m]
  imgplot = plt.imshow(img)
  imgplot.set_cmap('PuBu')
  plt.colorbar()
  plt.show()
  z += 20
  esqueleto = movimento[:z,:2]
  x = esqueleto[:,0]
  y = -esqueleto[:,1]
  gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) 
  plt.figure()
  plt.subplot(gs[1])
  plt.scatter(x,y, s=50)
  plt.title('Esqueleto')
  plt.show()

图像:

enter image description hereenter image description here


Tags: inimport图形fornprangeplt矩阵
1条回答
网友
1楼 · 发布于 2024-04-23 19:13:11

您需要在循环的开始处创建带有子图的图形,然后在相应的子图中绘制图形:

for m in range(num_plots):
    gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1])  # create figure at start of loop

    img = matrixDistance[m]
    plt.subplot(gs[0])  # first subplot
    imgplot = plt.imshow(img)
    imgplot.set_cmap('PuBu')
    plt.colorbar()

    z += 20
    esqueleto = movimento[:z,:2]
    x = esqueleto[:,0]
    y = -esqueleto[:,1]
    plt.subplot(gs[1])  # second subplot
    plt.scatter(x,y, s=50)
    plt.title('Esqueleto')
    plt.show()

相关问题 更多 >