Source code for surfinpy.chemical_potential_plot

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from surfinpy import utils as ut

[docs]class ChemicalPotentialPlot: """Class that plots a phase diagram as a function of chemical potential. Parameters ---------- x : array like x axis, chemical potential of species x y : array like y axis, chemical potential of species y z : array like two dimensional grid, phase info labels : list list of phase labels ticks : list list of phases xlabel : str x axis label ylabel : str y axis label """ def __init__(self, x, y, z, labels, ticks, xlabel, ylabel): self.x = x self.y = y self.z = z self.labels = labels self.ticks = ticks self.xlabel = xlabel self.ylabel = ylabel
[docs] def plot_phase(self, temperature=0, output="phase.png", colourmap="viridis", set_style="default"): """ Plots a simple phase diagram as a function of chemical potential. Parameters ---------- temperature : int (optional) temperature output : str (optional) output filename colourmap : str colourmap for the plot """ plt.style.use(set_style) levels = ut.get_levels(self.z) ticky = ut.get_ticks(self.ticks) temperature_label = str(temperature) + " K" XLab = "$\Delta \mu_{" + self.xlabel + "}$" + " (eV)" YLab = "$\Delta \mu_{" + self.ylabel + "}$" + " (eV)" fig = plt.figure() ax = fig.add_subplot(111) CM = ax.contourf(self.x, self.y, self.z, levels=levels, cmap=colourmap) ax.set_ylabel(YLab, fontsize=14) ax.set_xlabel(XLab, fontsize=14) ax.text(0.1, 0.95, temperature_label, fontsize=15, color="white", horizontalalignment='center', verticalalignment='center', transform=ax.transAxes) ax.tick_params(labelsize=12) cbar = fig.colorbar(CM, ticks=ticky, pad=0.1) cbar.ax.set_yticklabels(self.labels) plt.tight_layout() plt.savefig(output, dpi=600) plt.show()
[docs] def plot_mu_p(self, temperature, output="phase.png", colourmap="viridis", set_style="default"): """ Plots a phase diagram with two sets of axis, one as a function of chemical potential and the second is as a function of pressure. Parameters ---------- temperature : int (optional) temperature output : str (optional) output filename colourmap : str colourmap for the plot """ plt.style.use(set_style) p1 = ut.pressure(self.x, temperature) p2 = ut.pressure(self.y, temperature) temperature_label = str(temperature) + " K" levels = ut.get_levels(self.z) ticky = ut.get_ticks(self.ticks) X1Lab = "$\Delta \mu_{" + self.xlabel + "}$" + " (eV)" Y1Lab = "$\Delta \mu_{" + self.ylabel + "}$" + " (eV)" X2Lab = "$P_" + "{" + self.xlabel + "}$" + " 298 K (bar)" Y2Lab = "$P_" + "{" + self.ylabel + "}$" + " 298 K (bar)" fig = plt.figure(dpi=96, facecolor='#eeeeee', tight_layout=1) ax = fig.add_subplot(121) gs = gridspec.GridSpec(1, 2, width_ratios=[.95, .05]) ax, axR = plt.subplot(gs[0]), plt.subplot(gs[1]) CM = ax.contourf(self.x, self.y, self.z, levels=levels, cmap=colourmap) ax.set_xlabel(X1Lab, fontsize=14) ax.set_ylabel(Y1Lab, fontsize=14) ax2 = ax.twinx() ax2.set_ylim(p2[0], p2[-1]) ax2.set_ylabel(Y2Lab, fontsize=13) ax3 = ax.twiny() ax3.set_xlim(p1[0], p1[-1]) ax3.set_xlabel(X2Lab, fontsize=12) ax.tick_params(labelsize=10) ax2.tick_params(labelsize=10) ax3.tick_params(labelsize=10) ax.text(0.13, 0.95, temperature_label, fontsize=15, color="white", horizontalalignment='center', verticalalignment='center', transform=ax.transAxes) cbar = fig.colorbar(CM, extend='both', cax=axR, ticks=ticky) cbar.ax.set_yticklabels(self.labels) axR.set_xlabel('$H_2O$ $nm^{-2}$', fontsize=12) plt.savefig(output, dpi=600) plt.show()
[docs] def plot_pressure(self, temperature, output="phase.png", colourmap="viridis", set_style="default"): """ Plots a phase diagram as a function of pressure. Parameters ---------- temperature : int (optional) temperature output : str (optional) output filename colourmap : str colourmap for the plot """ plt.style.use(set_style) p1 = ut.pressure(self.x, temperature) p2 = ut.pressure(self.y, temperature) temperature_label = str(temperature) + " K" levels = ut.get_levels(self.z) ticky = ut.get_ticks(self.ticks) XLab = "$P_" + "{" + self.xlabel + "}$" + " 298 K (bar)" YLab = "$P_" + "{" + self.ylabel + "}$" + " 298 K (bar)" fig = plt.figure() ax = fig.add_subplot(111) CM = ax.contourf(p1, p2, self.z, levels=levels, cmap=colourmap) ax.set_ylabel(YLab, fontsize=14) ax.set_xlabel(XLab, fontsize=14) ax.text(0.1, 0.95, temperature_label, fontsize=15, color="white", horizontalalignment='center', verticalalignment='center', transform=ax.transAxes) ax.tick_params(labelsize=12) cbar = fig.colorbar(CM, ticks=ticky, pad=0.1) cbar.ax.set_yticklabels(self.labels) plt.tight_layout() plt.savefig(output, dpi=600) plt.show()