我正在尝试使用seaborn pairplot进行一些可视化,我需要有合适的对角线Y轴(可见!)根本没有规格化(只是计数)或密度规格化( bin值的总和= 1)。做这件事的更好方法是什么?
这就是我想要做的:
import numpy as np
import seaborn as sns
import pandas as pd
data = np.random.normal(0,2,[1000,3])
sss = sns.pairplot(pd.DataFrame(data),corner=True)
sss.axes[0][0].yaxis.tick_right()
sss.axes[0][0].get_yaxis().set_visible(True)
sss.axes[0][0].axis('on')
sss.axes[0][0].yaxis.set_label_position("right")
sss.axes[0][0].set_ylabel('Counts')它给我提供了以下数字:

显然,我这里的归一化是错误的(它可能是在最大值上归一化的),并且y轴线本身丢失了。
发布于 2020-12-18 05:21:38
默认情况下,每行上的y轴是共享的,对角线图的y轴基本上是没有意义的。
如果你想在那里绘制一些东西,并保持你试图绘制的数据的规模,那么你应该以某种方式“打破”共享轴。我能想到的最简单的方法是使用twinx()在相同的位置创建一个新的轴。
当然,您需要使用PairGrid()而不是pairplot()
import numpy as np
import seaborn as sns
import pandas as pd
def my_hist(x, label, color):
ax0 = plt.gca()
ax = ax0.twinx()
sns.despine(ax=ax, left=True, top=True, right=False)
ax.yaxis.tick_right()
ax.set_ylabel('Counts')
ax.hist(x, label=label, color=color)
data = np.random.normal(0,2,[1000,3])
df = pd.DataFrame(data)
g = sns.PairGrid(df,corner=True)
g.map_diag(my_hist)
g.map_lower(sns.scatterplot)

https://stackoverflow.com/questions/65345377
复制相似问题