Skip to content

Commit

Permalink
Merge 0d7fe39 into b12141d
Browse files Browse the repository at this point in the history
  • Loading branch information
Paul Miles committed Apr 12, 2019
2 parents b12141d + 0d7fe39 commit b4718c7
Show file tree
Hide file tree
Showing 8 changed files with 763 additions and 575 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -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
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

0 comments on commit b4718c7

Please sign in to comment.