I’m having some trouble with passing an arbitrary number of arguments to plt.plot(). For each argument I try to pass via *args my function calls plt.plot() two times creating duplicates for each optional argument. The read_n_plot function is meant to read some datafile, spit out the data as lists, and create a plot of said data. If I want to create a plot of an XRD standard for a crystal I want to make it easily distinguishable from whatever experimental data I’m comparing it with.
From what I understand *args is a tuple containing all the arguments passed to my function. But I can’t seem to figure out how to pass everything inside *args as is, and not calling plt.plot(arg1) -> plt.plot(arg2) -> etc
Got any hints I could try?
Here is my code:
import matplotlib.pyplot as plt
#def read_n_plot(datafile, color, thickness, style = ‘-‘, *args):
def read_n_plot(datafile, *args, **kwargs):
vinkel = []
intensitet = []
with open(datafile, encoding=’utf8′, errors=’ignore’) as f:
if datafile.endswith(‘.int’):
next(f); next(f)
lines = f.readlines()
for line in lines:
if line and line[0].isalpha():
continue
data = line.split()
theta, counts = float(data[0]), float(data[1])
vinkel.append(theta)
intensitet.append(counts)
intensitet_norm = [i/max(intensitet) for i in intensitet]
plt.plot(vinkel, intensitet_norm, label = datafile, *args, **kwargs)
return vinkel, intensitet_norm
plt.figure(figsize=(16,9))
read_n_plot(‘NaCl_data.xy’, ‘k’, ‘–‘, lw = 1.0)
plt.legend(loc=’best’)
plt.xlabel(r’$2\theta$’)
plt.xlim(0, 65)
plt.ylabel(‘Intensitet (a.u.)’)
plt.tick_params(left=None)
plt.yticks([])
plt.show()
Example below uses standard powder XRD data for NaCl. It seems the ‘–‘ argument for linestyle didn’t get through at all. The legend says there are two plots.
NaCl XRD data duplicate: