# -*- coding: utf-8 -*-
# ChemTools is a collection of interpretive chemical tools for
# analyzing outputs of the quantum chemistry calculations.
#
# Copyright (C) 2016-2019 The ChemTools Development Team
#
# This file is part of ChemTools.
#
# ChemTools is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# ChemTools is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>
#
# --
"""Simple Plotting Module."""
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
from matplotlib import rcParams
__all__ = ['plot_scatter']
[docs]def plot_scatter(x, y, fname, color='b', xlabel=None, ylabel=None, xlim=None, ylim=None):
r"""Scatter plot of y versus x.
Parameters
----------
x : 1-D array or sequence.
Array or sequence containing data on x axis.
y : 1-D array or sequence.
Array or sequence containing data on y axis.
fname : str
A string representing the path to a filename for storing the plot.
If the given filename does not have a proper extension, the 'png' format is used
by default, i.e. plot is saved as filename.png.
Supported formats, which can be specified as filename extensions, include:
- 'svgz' or 'svg' (Scalable Vector Graphics)
- 'tif' or 'tiff' (Tagged Image File Format)
- 'raw' (Raw RGBA bitmap)
- 'png' (Portable Network Graphics)
- 'ps' (Postscript)
- 'eps' (Encapsulated Postscript)
- 'rgba' (Raw RGBA bitmap)
- 'pdf' (Portable Document Format)
color : str, optional
Color of plot. To customize color, see http://matplotlib.org/users/colors.html
xlabel : str, optional
The x axis label.
ylabel : str, optional
The y axis label.
xlim : 1-D array or sequence of length 2, optional
The lower and higher limit of x axis.
ylim : 1-D array or sequence of length 2, optional
The lower and higher limit of y axis.
"""
# set font
rcParams['font.family'] = 'serif'
rcParams['font.serif'] = ['Times New Roman']
rcParams['mathtext.fontset'] = 'stix'
# create figure
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
# scatter plot
if len(x) != len(y):
raise ValueError('Length of x & y does not match! {0}!={1}'.format(len(x), len(y)))
plt.scatter(x, y, marker='o', color=color)
# set axis range
if xlim:
if len(xlim) != 2:
raise ValueError('Argument xlim={0} should have a length 2!'.format(len(xlim)))
plt.xlim(*xlim)
if ylim:
if len(ylim) != 2:
raise ValueError('Argument ylim={0} should have a length 2!'.format(len(ylim)))
plt.ylim(*ylim)
# set axis label
if xlabel:
plt.xlabel(xlabel, fontsize=12, fontweight='bold')
if ylabel:
plt.ylabel(ylabel, fontsize=12, fontweight='bold')
# hide the right, top and bottom spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()
# save plot ('.png' extension is added by default, if filename is not a supported format)
plt.savefig(fname, dpi=800)