簡體   English   中英

Plot 多個 2D 漸變數據集,帶有顏色條。 問題:Python 繪制多個顏色條

[英]Plot multiple 2D gradient Data sets with colorbar. Problem: Python plots mutiple colorbar

我正在做一些項目,我想比較我正在求解的某個方程的兩個不同解。 我有一些時間和空間(x,y)相關的數據。 這意味着我對於每個時間步 T 都有一個數據文件 T.dat,其中包含我正在求解的方程的 xy 和 Z 值。 當我 plot 方程的解單獨一切正常。 一旦我嘗試創建一個循環來迭代一些時間步驟,我就會遇到我的顏色條在第二次迭代中沒有被刪除的問題。 對於第一個 Plot,它工作正常,但在第二個之后,顏色條繼續在 plot 中累加。

這就是它的樣子。第二次迭代

經過四次迭代第四次迭代

這是我的代碼示例。 首先我導入了我的庫。

import numpy as np
import glob
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import animation
import scipy as sp
from IPython.display import set_matplotlib_formats
set_matplotlib_formats('jpg')
from mpl_toolkits.mplot3d import Axes3D
#%matplotlib qt
import animatplot as amp
from sklearn.preprocessing import StandardScaler

其次,我開始在 Dataframes 中導入我的數據(一些細節是我的更改,但它與我的問題無關)(請注意,路徑幾乎都是相同的,因為我想先測試 plot function。如果可行,我將把數據為了它 )

path_nonoise = r'Thesis/NCKSM/FieldData/'
path_noise_additive = r'Thesis/NCKSM/FieldData/'
path_noise_multiplicative = r'Thesis/NCKSM/FieldData/'
path_params_nonoise = r'Thesis/NCKSM/ParameterData/'
path_params_additive = r'Thesis/NCKSM/ParameterData/'
path_params_multiplicative= r'Thesis/NCKSM/ParameterData/'
all_files = len( sorted (glob.glob(path_nonoise + "/*.dat"))) #patern for the files

params_nonoise= pd.read_table(path_params_nonoise+'0'+'.dat',sep=':',names=['Params', 'Value',] )
params_Names_nonoise= np.asarray(params_nonoise['Params'].values.tolist())
params_Values_nonoise= np.asarray(params_nonoise['Value'].values.tolist())
quantum= int(params_Values_nonoise[3])
numberofdatas = np.arange(0,all_files)


#creat  a list of the names 

timesteps = np.arange(0,all_files*quantum,quantum )
nameofdata = [str(timesteps) for timesteps in timesteps]
# use your path

                                  
dfs_nonoise=[]
dfs_noise_additive=[]
dfs_noise_multiplicative=[]

for filename in nameofdata:
    foo1=pd.read_table(path_nonoise+filename+'.dat',sep='\s+',names=['X', 'Y','C','Rho'] )
    foo2=pd.read_table(path_noise_additive+filename+'.dat',sep='\s+',names=['X', 'Y','C','Rho'] )
    foo3=pd.read_table(path_noise_multiplicative+filename+'.dat',sep='\s+',names=['X', 'Y','C','Rho'] )
    dfs_nonoise.append(foo1)
    dfs_noise_additive.append(foo2)
    dfs_noise_multiplicative.append(foo3)

到目前為止,一切都很好。 現在這是我如何定義我的 Ploting function ,這就是我認為問題開始發生的地方。 我認為我的問題在於我如何在 function 中定義我的顏色條。

def plotgradient(fig,ax,X,Y,Z ,title  ):
    nbins= params_Values_nonoise[1] #this creats the gridpoints
    X_0= np.asarray(X.values.tolist())
    Y_0= np.asarray(Y.values.tolist())
    xi, yi = np.mgrid[X_0.min():X_0.max():nbins*1j, Y_0.min():Y_0.max():nbins*1j] #rearange the arrays 
    zi = np.asarray(Z.values.tolist()) #datas you need 
    t= ax.pcolormesh(xi, yi, zi.reshape(xi.shape), cmap='jet') #plottingfunction
    CS=ax.contour(xi, yi, zi.reshape(xi.shape) )
    ax.clabel(CS, inline=1, fontsize=10)
    colorbar=plt.colorbar(t, ax=ax, shrink=0.5, aspect=5) # colorbar
    ax.set_xlabel('x') #labels
    ax.set_ylabel('y')  
    ax.set_title(title) #title
    ax.grid()

現在,如果我想 plot 我的數據就是我所做的。 我剛做了一個for循環。

Fig, axes  = plt.subplots(ncols=2,nrows=1,figsize=(20,15))
my_path=r'/home/belkadi/Thesis/Plots/Plots27.01/additiveandnonoise/'
Ax1,Ax2=axes.flatten()


test=[0,1,2,3,4,5]
for i,j in zip(test,nameofdata[0:5]):
    f1=plotgradient(Fig, Ax1,dfs_nonoise[i]['X'],dfs_nonoise[i]['Y'], dfs_nonoise[i]['Rho'],'Density Gradient without noise' )
    f2=plotgradient(Fig, Ax2,dfs_nonoise[i]['X'],dfs_nonoise[i]['Y'], dfs_nonoise[i]['Rho'],'Density with noise' )
    plt.savefig(my_path+j+".png")
   
   

所以。 我試圖在循環結束時使用 plt.clf() Fig.clf() plt.close() 。 My idea was that Python doesn't delete the previous colourbar and thats why I tried to tell python he should clear clear the figure after every plot what it does is that i just delets the figure completly and i get two blank plot. 像這樣 [plt.clf() 之后的繪圖]3 然后我想也許我可以用 Ax1.cla() 清除軸,這也不起作用。

在此先感謝您的幫助。 我為我的物理學家意大利面條代碼道歉。

問候齊諾

我解決了我的問題。

基本上問題在於我如何定義我的 Plot function。

 def plotgradient_double(fig,ax1,ax2,X,Y,Z1,Z2 ,title1, title2 ):
    nbins= params_Values[1] #this creats t'he gridpoints
    axes= [ax1,ax2]
    xi, yi = np.mgrid[X.values.min():X.values.max():nbins*1j, Y.values.min():Y.values.max():nbins*1j] #rearange the arrays 
    #datas you need 
    t1= ax1.pcolormesh(xi, yi, Z1.values.reshape(int(nbins),int(nbins)), cmap='jet',vmax=1.) 
    t2= ax2.pcolormesh(xi, yi, Z2.values.reshape(int(nbins),int(nbins)), cmap='jet',vmin=0,vmax=1. )      #plottingfunction
    #CS1=ax1.contour(xi, yi, Z1.values.reshape(int(nbins),int(nbins)) )
    #CS2=ax2.contour(xi, yi, Z2.values.reshape(int(nbins),int(nbins)) )
    #ax1.clabel(CS1, inline=1, fontsize=10)
    #ax2.clabel(CS2, inline=1, fontsize=10)
    #colorbar=fig.colorbar(T, ax=axc, shrink=0.5, aspect=5)
    for ax in axes:
        ax.set_xlabel('x',fontsize=15) #labels
        ax.set_ylabel('y',fontsize=15)  
         #title
        #ax.grid()
    ax1.set_title(title1,fontsize=15)
    ax2.set_title(title2,fontsize=15) 
    return t1,t2

之后,我可以在 for 循環中為 plot 多個數據創建一個顏色條,並在每次迭代后將其刪除。

使用colorbar.remove()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM