Ser*_*rKo 2 python matplotlib seaborn
我正在尝试使用seabornpairplot
进行一些可视化,并且我需要有正确的对角线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')
Run Code Online (Sandbox Code Playgroud)
它给了我下图:
显然,我这里的归一化是错误的(可能是在最大值上归一化的)并且 y 轴线本身丢失了。
默认情况下,每行的 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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1696 次 |
最近记录: |