Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot non-square Seaborn jointplot or JointGrid

I am trying to plot my non-symmetric data using Seaborn's JointGrid. I can get it to use an equal aspect ratio, but then I have unwanted whitespace:

Seaborn 2D heatmap jointplot with extra white space

How do you remove the padding? The documentation for both jointplot and JointGrid simply say

size : numeric, optional

Size of the figure (it will be square).

I also tried going into feeding the extent kwarg to both jointplot and JointGrid, as well as ylim with no luck.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
x = np.random.normal(0.0, 10.0, 1000)
y = np.random.normal(0.0, 1.0, 1000)
joint = sns.jointplot(x, y)
joint.plot_marginals(sns.distplot, kde=False)
joint.ax_joint.set_aspect('equal')  # equal aspect ratio
plt.show() 
like image 793
crypdick Avatar asked Apr 28 '15 03:04

crypdick


People also ask

What is the advantage of using Jointplot to plot data?

Draw a plot of two variables with bivariate and univariate graphs. This function provides a convenient interface to the JointGrid class, with several canned plot kinds. This is intended to be a fairly lightweight wrapper; if you need more flexibility, you should use JointGrid directly.

What is a Jointplot?

A Jointplot comprises three plots. Out of the three, one plot displays a bivariate graph which shows how the dependent variable(Y) varies with the independent variable(X). Another plot is placed horizontally at the top of the bivariate graph and it shows the distribution of the independent variable(X).

How do you remove a histogram from a joint plot?

In case you want to remove the histogram/distribution plot appearing on the jointplot's axes the command that you need to use is? You cannot remove the distribution plot from the Jointplot. In case you don't want it, you can always use pyplot. scatter() or sns.


1 Answers

Stumbled upon this question looking for the answer myself. Having figured it out I thought I'd post the solution. As the jointplot code seems quite insistent on having the figure square I don't know if this is considered bad practice, but anyhow...

If we look through the jointplot code and follow it into JointGrid, the size parameter to jointplot (and equally JointGrid) is used in the following expression:

f = plt.figure(figsize=(size, size))
# ... later on
self.fig = f

So to get a non-square JointGrid plot, simply run:

grid = sns.jointplot(...)
grid.fig.set_figwidth(6)
grid.fig.set_figheight(4)
grid.savefig("filename.png", dpi=300)

for a 6x4 figure.

like image 176
karihre Avatar answered Sep 22 '22 09:09

karihre