Как убрать белые области внутри matplotlib.pyplot? - PullRequest
0 голосов
/ 18 апреля 2020

Ошибка в matplotlib.pyplot Я строю тепловую диаграмму пластины. когда я положил аналогичные длины по осям X и Y, все в порядке. Однако, если я добавлю длину оси 150 быков и длину оси 1, то внутри будут белые пятна. печать Temp2d я вижу, что есть правильные значения внутри. для пластины я полагаю, что нижняя и левая стороны изолированы, а верхняя и правая стороны имеют температуру Tn и Te соответственно.

import time
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from scipy.linalg import solve

#info
Tn=None
Te=None
Lx=None
Ly=None
N=None
while Tn==None or Te==None or Lx==None or Ly==None or N==None:
        try:
                Tn=int(input('Temperature at north side='))
                Te=int(input('Temperature at east side='))
                Lx=int(input('Length of x axis='))
                Ly=int(input('Length of y axis='))
                N=int(input('Minimum nodes per side='))
        except ValueError:
                print("Not an integer value.")

start_time=time.time()


if Ly<Lx:
        Ny=N
        Ygrid=np.linspace(0,Ly,Ny)
        dY=Ygrid[1]-Ygrid[0]
        dX=dY
        Nx=Lx/dX+1
        Nx=int(Nx)
        print('Nx=',Nx,'Ny=',Ny)
        Xgrid=np.linspace(0,Lx,Nx)
        dX=Xgrid[1]-Xgrid[0]
else:
        Nx=N
        Xgrid=np.linspace(0,Lx,Nx)
        dX=Xgrid[1]-Xgrid[0]
        dY=dX
        Ny=Ly/dY+1
        Ny=int(Ny)
        print('Nx=',Nx,'Ny=',Ny)
        Ygrid=np.linspace(0,Ly,Ny)
        dY=Ygrid[1]-Ygrid[0]
print('dX=',dX,'dY=',dY)

Snodes=Nx*Ny
print('Total Nodes=',Snodes)

Xnodes=np.zeros((2,Snodes)) 
for j in range (0,Ny):
        for i in range (0, Nx):
                node=j*Nx+i
                Xnodes[0,node]=i*dX
                Xnodes[1,node]=j*dY
fig,ax=plt.subplots(1,1)
ax.plot(Xnodes[0],Xnodes[1],marker='.',ls='-')
plt.show(block=False)


A=np.zeros((Snodes,Snodes))
B=np.zeros(Snodes)


##External Nodes

#Adiabetic Walls
i=0 #node=j*Nx+i=j*Nx
for j in range (0,Ny-1):
        node=j*Nx
        nodep1=j*Nx+1
        A[node,node]=1
        A[node,nodep1]=-1

j=0 #node=j*Nx+i=i
for i in range (1,Nx-1):
        node=i
        nodep1=Nx+i
        A[node,node]=1
        A[node,nodep1]=-1

#Dirchlet
i=Nx-1
for j in range (0,Ny-1):
        node=j*Nx+i
        A[node,node]=1
        B[node]=Te

j=Ny-1
for i in range (0,Nx-1):
        node=j*Nx+i
        A[node,node]=1
        B[node]=Tn

#Node between Te and Tn side
A[Nx*Ny-1,Nx*Ny-1]=1
B[Nx*Ny-1]=(Te+Tn)/2


##Internal Nodes

for i in range (1,Nx-1):
        for j in range (1,Ny-1):
                node=j*Nx+i
                nodeip1=j*Nx+i+1
                nodeim1=j*Nx+i-1
                nodejp1=(j+1)*Nx+i
                nodejm1=(j-1)*Nx+i
                A[node,node]+=-2/dX**2-2/dY**2
                A[node,nodeip1]+=1/dX**2
                A[node,nodeim1]+=1/dX**2
                A[node,nodejp1]+=1/dY**2
                A[node,nodejm1]+=1/dY**2


#Temperature

Temp= solve(A, B)

Temp2d=np.zeros((Ny,Nx))
for j in range (0,Ny):
        for i in range (0,Nx):
                node=j*Nx+i
                Temp2d[j,i]=Temp[node]

colorinterpolation = 50
colourMap = plt.cm.jet
fig,ax=plt.subplots(1,1)
cp=ax.contourf(Xgrid,Ygrid,Temp2d,colorinterpolation, cmap=colourMap)
fig.colorbar(cp)
plt.title("Contour of Temperature")
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show(block=False)


end_time=time.time()-start_time
print('Total time:')
print(end_time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...