Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated files to comply with style standards #8

Merged
merged 6 commits into from
Apr 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
*.DS_Store
*.pyc
*build/
*.spyproject/
348 changes: 182 additions & 166 deletions mcmcplot/mcmatplot.py

Large diffs are not rendered by default.

124 changes: 67 additions & 57 deletions mcmcplot/mcseaborn.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,96 +10,106 @@
import seaborn as sns
from .utilities import generate_names, check_settings

def plot_joint_distributions(chains, names = None, sns_style = 'white', settings = None):

def plot_joint_distributions(chains, names=None, sns_style='white',
settings=None):
"""
Plot joint distribution for each parameter set.

https://seaborn.pydata.org/generated/seaborn.jointplot.html

Args:
* **chains** (:class:`~numpy.ndarray`): Sampling chain for each parameter
* **names** (:py:class:`list`): List of strings - name of each parameter
* **sns_style** (:py:class:`str`): Style for seaborn plot. Default is `white`.
* **settings** (:py:class:`dict`): Settings for features of this method.

* **chains** (:class:`~numpy.ndarray`): Sampling chain
for each parameter
* **names** (:py:class:`list`): List of strings - name
of each parameter
* **sns_style** (:py:class:`str`): Style for seaborn plot.
Default is `white`.
* **settings** (:py:class:`dict`): Settings for features
of this method.

Returns:
* (:py:class:`tuple`): (figure handle, settings actually used in program)
* (:py:class:`tuple`): (figure handle, settings actually
used in program)
"""
default_settings = {
'skip': 1,
'sns_style': sns_style,
'sns': sns.axes_style(style = sns_style),
'jointplot': dict(kind='kde', data = None, height = 6.0, space=0)
}

settings = check_settings(default_settings = default_settings, user_settings = settings)
'skip': 1,
'sns_style': sns_style,
'sns': sns.axes_style(style=sns_style),
'jointplot': dict(kind='kde', data=None, height=6.0, space=0)
}
settings = check_settings(
default_settings=default_settings, user_settings=settings)
sns.set_style(settings['sns_style'], settings['sns'])

nsimu, nparam = chains.shape # number of rows, number of columns
names = generate_names(nparam = nparam, names = names)
nsimu, nparam = chains.shape # number of rows, number of columns
names = generate_names(nparam=nparam, names=names)
inds = range(0, nsimu, settings['skip'])

g = []
for jj in range(2,nparam+1):
for ii in range(1,jj):
chain1 = pd.Series(chains[inds,ii-1], name=names[ii-1])
chain2 = pd.Series(chains[inds,jj-1], name=names[jj-1])

for jj in range(2, nparam+1):
for ii in range(1, jj):
chain1 = pd.Series(chains[inds, ii-1], name=names[ii-1])
chain2 = pd.Series(chains[inds, jj-1], name=names[jj-1])
# Show the joint distribution using kernel density estimation
a = sns.jointplot(x = chain1, y = chain2, **settings['jointplot'])
a = sns.jointplot(x=chain1, y=chain2, **settings['jointplot'])
g.append(a)

return g, settings

def plot_paired_density_matrix(chains, names = None, sns_style = 'white', index = None, settings = None):

def plot_paired_density_matrix(chains, names=None, sns_style='white',
index=None, settings=None):
"""
Plot paired density matrix.

https://seaborn.pydata.org/generated/seaborn.PairGrid.html

Args:
* **chains** (:class:`~numpy.ndarray`): Sampling chain for each parameter
* **names** (:py:class:`list`): List of strings - name of each parameter
* **sns_style** (:py:class:`str`): Style for seaborn plot. Default is `white`.
* **settings** (:py:class:`dict`): Settings for features of this method.

* **chains** (:class:`~numpy.ndarray`): Sampling chain
for each parameter
* **names** (:py:class:`list`): List of strings - name
of each parameter
* **sns_style** (:py:class:`str`): Style for seaborn plot.
Default is `white`.
* **settings** (:py:class:`dict`): Settings for features
of this method.

Returns:
* (:py:class:`tuple`): (figure handle, settings actually used in program)
* (:py:class:`tuple`): (figure handle, settings actually
used in program)
"""
default_settings = {
'skip': 1,
'sns_style': sns_style,
'sns': sns.axes_style(style = sns_style),
'pairgrid': dict(diag_sharey = False, height=2.5),
'ld_type': sns.kdeplot,
'ld': {},
'md_type': sns.kdeplot,
'md': {},
'ud_type': sns.scatterplot,
'ud': {},
}
settings = check_settings(default_settings = default_settings, user_settings = settings)
'skip': 1,
'sns_style': sns_style,
'sns': sns.axes_style(style=sns_style),
'pairgrid': dict(diag_sharey=False, height=2.5),
'ld_type': sns.kdeplot,
'ld': {},
'md_type': sns.kdeplot,
'md': {},
'ud_type': sns.scatterplot,
'ud': {},
}
settings = check_settings(
default_settings=default_settings, user_settings=settings)
sns.set_style(settings['sns_style'], settings['sns'])

nsimu, nparam = chains.shape # number of rows, number of columns
names = generate_names(nparam = nparam, names = names)

df = pd.DataFrame(chains, columns = names)
if index is not None: # a valid categorical column must be appended in order to use hue
df = df.assign(index = index)

nsimu, nparam = chains.shape # number of rows, number of columns
names = generate_names(nparam=nparam, names=names)
df = pd.DataFrame(chains, columns=names)
# A valid categorical column must be appended in order to use hue
if index is not None:
df = df.assign(index=index)
g = sns.PairGrid(df, **settings['pairgrid'])
g.map_lower(settings['ld_type'], **settings['ld'])
g.map_upper(settings['ud_type'], **settings['ud'])
g.map_diag(settings['md_type'], **settings['md'])
return g, settings


class Plot:
'''
Wrapper routines for analyzing/plotting sampling chains from MCMC process.

Uses methods from the `seaborn` package:

https://seaborn.pydata.org/

Attributes:
Expand All @@ -108,4 +118,4 @@ class Plot:
'''
def __init__(self):
self.plot_joint_distributions = plot_joint_distributions
self.plot_paired_density_matrix = plot_paired_density_matrix
self.plot_paired_density_matrix = plot_paired_density_matrix