code: def plot_thermodynamic_properties(self, tmin, tmax, ntemp, ylim=None, **kwargs):
          
          temperatures = np.linspace(tmin, tmax, ntemp)
  
          mol = "" if self.structure else "-c"
  
          fig = self._plot_thermo(self.dos.cv, temperatures, ylabel="Thermodynamic properties", ylim=ylim,
                                  label=r"$C_v$ (J/K/mol{})".format(mol), **kwargs)
          self._plot_thermo(self.dos.entropy, temperatures, ylim=ylim, ax=fig.axes[0],
                            label=r"$S$ (J/K/mol{})".format(mol), **kwargs)
          self._plot_thermo(self.dos.internal_energy, temperatures, ylim=ylim, ax=fig.axes[0], factor=1e-3,
                            label=r"$\Delta E$ (kJ/K/mol{})".format(mol), **kwargs)
          self._plot_thermo(self.dos.helmholtz_free_energy, temperatures, ylim=ylim, ax=fig.axes[0], factor=1e-3,
                            label=r"$\Delta F$ (kJ/K/mol{})".format(mol), **kwargs)
  
          fig.axes[0].legend(loc="best")
  
          return fig
docs: Plots all the thermodynamic properties in a temperature range.
  
          Args:
              tmin: minimum temperature
              tmax: maximum temperature
              ntemp: number of steps
              ylim: tuple specifying the y-axis limits.
              kwargs: kwargs passed to the matplotlib function 'plot'.
          Returns:
              matplotlib figure