如何在 Pairplot (seaborn) 中使用科学记数法

Posted

技术标签:

【中文标题】如何在 Pairplot (seaborn) 中使用科学记数法【英文标题】:How to use scientific notation in Pairplot (seaborn) 【发布时间】:2018-11-17 12:52:30 【问题描述】:

有没有办法使用 Seaborn 的 Pairplot 强制使用科学记数法?我希望图之间有一些一致性(下面的示例)。我找到了其他 seaborn 地块的建议,但没有成功地用 Pairplot 实现任何东西。

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

版本: seaborn 0.8.1 numpy 1.13.1 matplotlib 2.0.2 熊猫 0.23.0

当前剧情:

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') 

尝试重新格式化失败:

    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)
    

当前:

目标:

【问题讨论】:

“我找到了其他 seaborn 地块的建议” 这些建议是什么? 我列出的两次尝试都是基于对其他 seaborn 地块的建议。 ***.com/questions/36780948/… 和 ***.com/questions/35418989/…。也试过修改***.com/questions/29647749/… 29647749 是关于热图注释的。 35418989 是关于热图颜色条的。 36780948 很有帮助,但仅适用于单个图。但是,它包含两个链接,您可以从中获得将格式化程序设置为轴的一般概念。所以剩下的问题是从你的pairplot中得到一个轴ax。这是使用例如完成的。 g.axes[2,0] 用于左下图。 您的第二个解决方案有什么问题?它似乎给出了正确的输出? 第二种解决方案是针对不同的数据集。对于较大的值,轴似乎默认为科学记数法。我最初有链接指出第二张图像是“正确情节”的示例,但标签似乎已被编辑以显示完整图像 【参考方案1】:

您需要将格式化程序应用于pairplot 创建的每个轴。实际上,边缘上的轴就足够了,但是更容易将相同的东西平等地应用于所有轴。我会这样做:

for ax in g.axes.flatten():
    ax.ticklabel_format(style='sci', scilimits=(0,0), axis='both')

【讨论】:

帮了我一大忙。

以上是关于如何在 Pairplot (seaborn) 中使用科学记数法的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 seaborn pairplot 中仅 x 或 y 标签的字体大小?

隐藏seaborn pairplot的传说

机器学习——可视化绘图matplotlib和seaborn

斯科特是谁? - Seaborn pairplot 中的 ValueError:无法将字符串转换为浮点数:'scott'

Python使用matplotlib可视化分组多变量两两关系图使用seaborn中的pairplot函数可视化分组多变量两两关系图对角线为分组密度图其它图像为分组两两散点图

Seaborn