问题
Is there a way to force scientific notation using Seaborn's Pairplot? I'm hoping for some consistency between plots (examples below). I've found suggestions for other seaborn plots, but have not successfully implemented anything with Pairplot.
https://seaborn.pydata.org/generated/seaborn.pairplot.html
Versions:
seaborn 0.8.1
numpy 1.13.1
matplotlib 2.0.2
pandas 0.23.0
Current plot:
import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats
import matplotlib.pyplot as plt
#remove NAs
dfna = df.dropna()
#Correlation function
mean = np.zeros(3)
cov = np.random.uniform(.2, .4, (3, 3))
cov += cov.T
cov[np.diag_indices(3)] = 1
def corrfunc(x, y, **kws):
r, _ = stats.pearsonr(x, y)
ax = plt.gca()
ax.annotate("{:.2f}".format(r),
xy=(.3, .45), xycoords=ax.transAxes, fontsize = 30)
#2D regression + distribution
p = sns.pairplot(dfna, diag_kind="kde", diag_kws=dict(shade=True, color = "Blue"), plot_kws=dict(s=5, edgecolor="Blue", color = "Blue", linewidth=1))
p.fig.text(0.5, 1.00,'BLAHH', fontsize=30)
p.map_upper(plt.scatter, color = "White", edgecolor = "White")
p.map_upper(corrfunc)
p.fig.text(0.35, -0.04, "xxx", ha ='left', fontsize = 20)
p.fig.text(-0.04, 0.68, "xxx", ha ='left', fontsize = 20, rotation = 90)
#p.savefig('pairplot.svg')
Unsuccessful attempts to reformat:
plt.ticklabel_format(style = 'sci')
import matplotlib.ticker as tkr formatter = tkr.ScalarFormatter(useMathText=True) formatter.set_scientific(True) p = sns.pairplot(dfna, plot_kws = {'format': formatter})
Current:
Goal:
回答1:
You need to apply your formatter to each of the axes created by pairplot
. actually, the axes on the edge would be sufficient, but it's easier to apply the same thing to all axes equally. I would do:
for ax in g.axes.flatten():
ax.ticklabel_format(style='sci', scilimits=(0,0), axis='both')
来源:https://stackoverflow.com/questions/50744067/how-to-use-scientific-notation-in-pairplot-seaborn