code: def _plot_thermo(self, func, temperatures, factor=1, ax=None, ylabel=None, label=None, ylim=None, **kwargs):
          
  
          ax, fig, plt = get_ax_fig_plt(ax)
  
          values = []
  
          for t in temperatures:
              values.append(func(t, structure=self.structure) * factor)
  
          ax.plot(temperatures, values, label=label, **kwargs)
  
          if ylim:
              ax.set_ylim(ylim)
  
          ax.set_xlim((np.min(temperatures), np.max(temperatures)))
          ylim = plt.ylim()
          if ylim[0] < 0 < ylim[1]:
              plt.plot(plt.xlim(), [0, 0], 'k-', linewidth=1)
  
          ax.set_xlabel(r"$T$ (K)")
          if ylabel:
              ax.set_ylabel(ylabel)
  
          return fig
docs: Plots a thermodynamic property for a generic function from a PhononDos instance.
  
          Args:
              func: the thermodynamic function to be used to calculate the property
              temperatures: a list of temperatures
              factor: a multiplicative factor applied to the thermodynamic property calculated. Used to change
                  the units.
              ax: matplotlib :class:`Axes` or None if a new figure should be created.
              ylabel: label for the y axis
              label: label of the plot
              ylim: tuple specifying the y-axis limits.
              kwargs: kwargs passed to the matplotlib function 'plot'.
          Returns:
              matplotlib figure