- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个上三角相关矩阵,理想情况下我想将其叠加到下三角矩阵的另一张图片上。因此,我希望将 mask 颜色设置为无色或透明(否则,如果它是白色,我将无法叠加)...知道如何在 seaborn 中执行此操作吗?
编辑
这是我想做的:使用数据框中的一组列,我想绘制这些列的配对图(下三角)和相关图(上三角)
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
rs = np.random.RandomState(112358)
d1 = pd.DataFrame(data=rs.normal(size=(100, 10)), columns=[*'abcdefghij' ])
corr1 = d1.corr()
mask1 = np.tril(np.ones_like(corr1, dtype=bool))
fig, ax = plt.subplots(figsize=(11, 9))
sns.heatmap(corr1, mask=mask1, cmap='PRGn', vmax=.3, vmin=-.3,
square=True, linewidths=.5, cbar_kws={"shrink": .85, "pad":-.01}, ax=ax)
def hide_current_axis(*args, **kwds):
plt.gca().set_visible(False)
e = sns.pairplot(d1)
e.map_upper(hide_current_axis)
plt.show()
这段代码当然有效,但它分别绘制了两个图形。
最佳答案
创建三角形热图的常规方法是屏蔽掉不需要的部分。那里不会绘制任何东西,原始背景颜色将保持可见。如果您绘制第二个热图,它也只会绘制未被遮盖的地方。
下面是一些代码来演示这个想法。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="white")
rs = np.random.RandomState(112358)
d1 = pd.DataFrame(data=rs.normal(size=(100, 10)), columns=[*'abcdefghij' ])
d2 = pd.DataFrame(data=rs.normal(size=(100, 10)), columns=[*'abcdefghij' ])
corr1 = d1.corr()
corr2 = d2.corr()
mask1 = np.tril(np.ones_like(corr1, dtype=bool))
mask2 = np.triu(np.ones_like(corr2, dtype=bool))
fig, ax = plt.subplots(figsize=(11, 9))
sns.heatmap(corr1, mask=mask1, cmap='PRGn', vmax=.3, vmin=-.3,
square=True, linewidths=.5, cbar_kws={"shrink": .85, "pad":-.01}, ax=ax)
sns.heatmap(corr1, mask=mask2, cmap='RdYlBu', vmax=.3, vmin=-.3,
square=True, linewidths=.5, cbar_kws={"shrink": .85}, ax=ax)
# the following lines color and hatch the axes background, only the diagonals are visible
ax.patch.set_facecolor('grey')
ax.patch.set_edgecolor('yellow')
ax.patch.set_hatch('xx')
plt.show()
关于新问题,将配对图与三角形热图相结合。因为 pairplot 是 figure-level function ,它会创建自己的带有子图的图形。它应该首先创建。
作为第二步,可以使用 pairplot 子图的位置为热图创建一个特殊的 ax
。将其 facecolor 设置为“无”使其完全透明(默认为白色,隐藏所有内容)。
添加颜色条可能会更麻烦,因为 pairplot 没有留下放置它的好位置。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
def hide_current_axis(*args, **kwds):
plt.gca().set_visible(False)
rs = np.random.RandomState(112358)
d1 = pd.DataFrame(data=rs.normal(size=(20, 5)), columns=[*'abcde'])
e = sns.pairplot(d1)
e.map_upper(hide_current_axis)
(xmin, _), (_, ymax) = e.axes[0, 0].get_position().get_points()
(_, ymin), (xmax, _) = e.axes[-1, -1].get_position().get_points()
ax = e.fig.add_axes([xmin, ymin, xmax - xmin, ymax - ymin], facecolor='none')
corr1 = d1.corr()
mask1 = np.tril(np.ones_like(corr1, dtype=bool))
sns.heatmap(corr1, mask=mask1, cmap='seismic', vmax=.5, vmin=-.5,
linewidths=.5, cbar=False, annot=True, annot_kws={'size': 22}, ax=ax)
ax.set_xticks([])
ax.set_yticks([])
# ax.xaxis.tick_top()
# ax.yaxis.tick_right()
plt.show()
如评论中所述,一种更忠实于 seaborn 哲学的方法是根据相关性以及数字显示为右上角子图的轴着色。我找不到示例代码,这是我的尝试:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
def corrfunc(x, y, **kwds):
cmap = kwds['cmap']
norm = kwds['norm']
ax = plt.gca()
ax.tick_params(bottom=False, top=False, left=False, right=False)
sns.despine(ax=ax, bottom=True, top=True, left=True, right=True)
r, _ = pearsonr(x, y)
facecolor = cmap(norm(r))
ax.set_facecolor(facecolor)
lightness = (max(facecolor[:3]) + min(facecolor[:3]) ) / 2
ax.annotate(f"r={r:.2f}", xy=(.5, .5), xycoords=ax.transAxes,
color='white' if lightness < 0.7 else 'black', size=26, ha='center', va='center')
rs = np.random.RandomState(112358)
d1 = pd.DataFrame(data=rs.normal(size=(20, 5)), columns=[*'abcde'])
g = sns.PairGrid(d1)
g.map_lower(plt.scatter, s=10)
g.map_diag(sns.histplot, kde=False)
g.map_upper(corrfunc, cmap=plt.get_cmap('seismic'), norm=plt.Normalize(vmin=-.5, vmax=.5))
g.fig.subplots_adjust(wspace=0.06, hspace=0.06) # equal spacing in both directions
plt.show()
关于python - 如何结合 pairplot 和三角热图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66108908/
有没有办法用 seaborn.pairplot() 显示对相关值,如下例所示(使用 ggpairs() 在 R 中创建)?我可以使用附加的代码制作绘图,但不能添加相关性。谢谢 import numpy
尝试实现稳健的统计数据而不是普通的最小二乘法 (OLS) 拟合,这样离群值就不会成为我拟合的问题。我希望在 seaborn 的 pairplot 函数中实现这一点,但看不到从 AP 文档中添加这一点的
我正在尝试制作一个简单的 pairplot每个图形都有单独的颜色。我不知道这是否可行,因为我没有使用 hue . 我的数据集是这样的: High Jump Discus Throw L
我正在尝试制作一个上三角相关矩阵,理想情况下我想将其叠加到下三角矩阵的另一张图片上。因此,我希望将 mask 颜色设置为无色或透明(否则,如果它是白色,我将无法叠加)...知道如何在 seaborn
我不确定该怎么做,但我相信这是可行的。我有三个 dataframes 具有相同的列定义但来自不同年份的数据集。然后,我想对数字列逐一绘制,并绘制来自这些 df 的数据,适本地标记数据来自的集合。目标是
我有一个数据框,我正在使用 seaborn pairplot 绘制一个目标列与其余列的对比图。 代码如下, import seaborn as sns import matplotlib.pyplot
我有一个数据框,我正在使用 seaborn pairplot 绘制一个目标列与其余列的对比图。 代码如下, import seaborn as sns import matplotlib.pyplot
我想让 seaborn 在一个已经定义好的图形中做一个 pairplot。但是,当调用 sns.pairplot 时,它会创建一个新图形。 例如,以下代码创建两个图形,第一个空白,第二个包含配对图。
我有以下数据框: id date channel_id n_tickets country_1 1224871 1614666 2017-01-01
我有以下图 sns.pairplot() import seaborn as sns sns.set() df = pd.read_csv('filename.csv') sns.pairplot(d
我决定尝试 Seaborn 的 pairplot,但下面的代码行 ( https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.
我有一组分箱数据,我从中生成了一系列 seaborn pairplots。由于所有 bin 都具有相同的标签,但 bin 名称不同,因此我需要在下方用 bin 名称“n”注释 pairplots,以便
我使用以下代码在 seaborn 中创建了一个 pairplot: import numpy as np import pandas as pd import matplotlib.pyplot as
我正在使用 Seaborn 的配对图: g = sns.pairplot(df) 是否可以在每个散点图上绘制标识线? 最佳答案 定义一个函数,它将在当前轴上绘制标识线,并使用 PairGrid.map
好吧,我可能很厚,但是我如何才能在一个漂亮的行或 2x2 网格中获得对角线(从左上到右下)中的图形: import seaborn as sns; sns.set(style="ticks", col
好吧,我可能很厚,但是我如何才能在一个漂亮的行或 2x2 网格中获得对角线(从左上到右下)中的图形: import seaborn as sns; sns.set(style="ticks", col
Seaborn 有一个方便的函数 pairplot 来创建散点图矩阵。不幸的是,一些标准的 matplotlib 命令不能使用它。 sns.pairplot(matrix[cols[:4]].head
有没有办法使用 Seaborn 的 Pairplot 强制使用科学记数法?我希望图之间有一定的一致性(下面的示例)。我找到了其他seaborn图的建议,但还没有成功地用Pairplot实现任何东西。
我正在关注 this website 的教程我正在尝试可视化顺序模型df。 这是我的代码: # LAST MODIFIED: December 10, 2018 # NOTE: The loss fu
我有一个关于直方图的 y 轴的问题,它是在 seaborn 的默认配对图中生成的。 下面是一些示例代码: import pandas as pd import seaborn as sns impor
我是一名优秀的程序员,十分优秀!