Source code for bnlcrl.visualize
from io import StringIO # StringIO behaves like a file object
import numpy as np
[docs]def plot_data(df, elements, property, thickness, e_min, e_max, n_points, file_name='data', x_label=None,
figsize=(10, 6), show_plot=False):
from matplotlib import pyplot as plt
thickness = ', thickness={} [$\mathrm{{\mu}}$m]'.format(thickness) if property == 'transmission' else ''
fig = plt.figure(figsize=figsize)
axes = fig.add_subplot(111)
ax = df.plot(x_label, grid=True, ax=axes)
ax.set_title(r'{}: {} ({}-{} eV, {} points{})'.format(
property.capitalize(),
', '.join(elements),
e_min,
e_max,
n_points,
thickness,
))
ax.set_xlabel(x_label)
ax.set_ylabel('{}'.format(property.capitalize()))
plt.savefig('{}.png'.format(file_name))
if show_plot:
plt.show()
[docs]def save_to_csv(df, file_name='data', index=False):
df.to_csv('{}.csv'.format(file_name), index=index)
[docs]def to_dataframe(d, elements):
"""Convert a list of strings, each representing the read data, to a Pandas DataFrame object.
:param d: a list of strings, each representing the read data.
:param elements: Chemical elements of interest.
:return: a tuple of DataFrame and the parsed columns.
"""
import pandas as pd
df = None
columns = None
for i, str_data in enumerate(d):
element = elements[i]
c = StringIO(str_data)
title, columns = str_data.split('\n')[0:2]
columns = [x.strip() for x in columns.strip().split(',')]
columns[1] = '{} {}'.format(columns[1], element) if len(elements) > 1 else columns[1]
data = np.loadtxt(c, skiprows=2)
if df is None:
df = pd.DataFrame(data[:, :2], columns=columns[:2])
else:
df[columns[1]] = data[:, 1]
return df, columns