Dear Wannier90 community,

I am using Wannier90/3.1.0 to plot a slice of my data. The postw90.x creates 
the necessary python code but I get the following error when running this 
python script:

 File 
"/gpfs/scratch/vaskarpo/Mn3Ge_hex/kslice/wannier90-kslice-curv_x+fermi_lines.py",
 line 64, in <module>
    valint = ml.griddata(points_x,points_y, val_log, xint,yint)
AttributeError: module 'matplotlib.mlab' has no attribute ‘griddata'

Does any one know how to remedy this? I tried replacing the ml.griddata with 
scipy.interpolate.griddata but then I get the following error:

  File 
"/gpfs/scratch/vaskarpo/Mn3Ge_hex/kslice/wannier90-kslice-curv_x+fermi_lines.py",
 line 64, in <module>
    valint = interpolate.griddata(points_x,points_y, val_log, grid_x, grid_y)
  File 
"/cvmfs/soft.computecanada.ca/easybuild/software/2020/avx512/Core/scipy-stack/2023b/lib/python3.10/site-packages/scipy/interpolate/_ndgriddata.py",
 line 253, in griddata
    if ndim == 1 and method in ('nearest', 'linear', 'cubic'):
ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

I am attaching the python script.

Any suggestion is appreciated.

Thanks,
Vahid

import pylab as pl
import numpy as np
import matplotlib.mlab as ml
from scipy import interpolate
from collections import OrderedDict
 
points = np.loadtxt('wannier90-kslice-coord.dat')
# Avoid numerical noise
points_x=np.around(points[:,0],decimals=10)
points_y=np.around(points[:,1],decimals=10)
num_pt=len(points)
 
area=    0.660576
 
square= False                    
 
if square:
  x_coord=list(OrderedDict.fromkeys(points_x))
  y_coord=list(OrderedDict.fromkeys(points_y))
  dimx=len(x_coord)
  dimy=len(y_coord)
else:
  xmin=np.min(points_x)
  ymin=np.min(points_y)
  xmax=np.max(points_x)
  ymax=np.max(points_y)
  a=np.max(np.array([xmax-xmin,ymax-ymin]))
  num_int=int(round(np.sqrt(num_pt*a**2/area)))
  xint = np.linspace(xmin,xmin+a,num_int)
  yint = np.linspace(ymin,ymin+a,num_int)
 
# Energy level for isocontours (typically the Fermi level)
ef=   11.879500
 
bands=np.loadtxt('wannier90-kslice-bands.dat')
numbands=bands.size//num_pt
if square:
  bbands=bands.reshape((dimy,dimx,numbands))
  for i in range(numbands):
    Z=bbands[:,:,i]
    pl.contour(x_coord,y_coord,Z,[ef],colors='black')
else:
  bbands=bands.reshape((num_pt,numbands))
  bandint=[]
  grid_x, grid_y = np.meshgrid(xint,yint)
  for i in range(numbands):
    bandint.append(interpolate.griddata((points_x,points_y), bbands[:,i], (grid_x,grid_y), method='nearest'))
    pl.contour(grid_x,grid_y,bandint[i],[ef],colors='black')
 
outfile = 'wannier90-kslice-curv_x.pdf'
 
val = np.loadtxt('wannier90-kslice-curv.dat', usecols=(0,))
 
val_log=np.array([np.log10(abs(elem))*np.sign(elem) if abs(elem)>10 else elem/10.0 for elem in val])
 
if square: 
  Z=val_log.reshape(dimy,dimx)
  mn=int(np.floor(Z.min()))
  mx=int(np.ceil(Z.max()))
  ticks=range(mn,mx+1)
  pl.contourf(x_coord,y_coord,Z,ticks,origin='lower')
  #pl.imshow(Z,origin='lower',extent=(min(x_coord),max(x_coord),min(y_coord),max(y_coord)))
else: 
  valint = ml.griddata(points_x,points_y, val_log, xint,yint)
  mn=int(np.floor(valint.min()))
  mx=int(np.ceil(valint.max()))
  ticks=range(mn,mx+1)
  pl.contourf(xint,yint,valint,ticks)
  #pl.imshow(valint,origin='lower',extent=(min(xint),max(xint),min(yint),max(yint)))
 
ticklabels=[]
for n in ticks:
 if n<0: 
  ticklabels.append('-$10^{%d}$' % abs(n))
 elif n==0:
  ticklabels.append(' $%d$' %  n)
 else:
  ticklabels.append(' $10^{%d}$' % n)
 
cbar=pl.colorbar()
cbar.set_ticks(ticks)
cbar.set_ticklabels(ticklabels)
 
ax = pl.gca()
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)
 
pl.savefig(outfile,bbox_inches='tight')
pl.show()
_______________________________________________
Wannier mailing list
[email protected]
https://lists.quantum-espresso.org/mailman/listinfo/wannier

Reply via email to