如何将变量名称放在Seaborn PairGrid
的对角线上,如PerformanceAnalytics
R套件chart.Correlation
function中那样?
我想这涉及到传递给map_diag
的自定义函数,但不知道如何为它提取变量名。
例如,这显示整个数组:
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset('iris')
def diagfunc(x, **kws):
ax = plt.gca()
ax.annotate(x, xy=(.1, .9), xycoords=ax.transAxes)
sns.PairGrid(iris).map_diag(diagfunc)
答案 0 :(得分:2)
这里的原始解决方案不适用于seaborn> = 0.9的情况。这是由于#1464中所做的更改,因此从现在开始,数据将作为不包含name
的numpy数组而不是pandas系列传递。
一种解决方法是,假设对网格中的轴顺序遵循数据框中列的顺序。然后使用该顺序可以遍历列名。
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('iris')
it = iter(list(df.columns))
def diagfunc(*args, **kws):
plt.gca().annotate(next(it), xy=(0, 1), xytext=(5,-5), ha="left", va="top",
xycoords=plt.gca().transAxes, textcoords="offset points")
sns.PairGrid(df).map_diag(diagfunc)
plt.show()
答案 1 :(得分:0)
在x.name
函数中使用map_diag
,该函数会传递每列的系列。
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset('iris')
def diagfunc(x, **kws):
ax = plt.gca()
ax.annotate(x.name, xy=(0.05, 0.9), xycoords=ax.transAxes)
sns.PairGrid(iris).map_diag(diagfunc)
要同时删除普通轴标题,请按照Remove axis titles from Seaborn PairGrid添加:
for ax in g.axes.flatten():
ax.set_ylabel('')
ax.set_xlabel('')