Python、Seaborn:如何复制corrplot?
Python, Seaborn: how to replicate corrplot?
我正在 UDemy 上一门关于数据可视化的课程(我会向你推荐它,但它可能看起来像垃圾邮件),在那门课程之前,我一直在使用 matplotlib 进行可视化,所以Seaborn 对我来说很新。在课程中他们谈到了 corrplot()
函数,它可以产生如下图所示的东西:
但现在,corrplot()
已被弃用。我一直在查看 Seaborn 文档和网络上的一些链接,"closer" 我所做的是:
当然,我更喜欢原始的 corrplot()
输出,而且它更容易实现,使用 heatmap()
或任何其他函数执行相同操作的方法是什么?
顺便说一句:生成图表的数据不同,第一个来自视频的捕获,而另一个是我电脑的屏幕截图,所以值不一样。
首先,corrplot()
贬值并不意味着你不能使用它。它很可能会在 seaborn 的某些未来版本中被删除,或者伴随着一些其他问题。但是,如果您对它现在给您的东西感到满意,您仍然可以使用它。
为了获得类似于 corrplot
但使用 heatmap
的结果,您可能需要稍微调整一下绘图。
示例如下:
import numpy as np; np.random.seed(1)
import pandas as pd
import seaborn.apionly as sns
import matplotlib.pyplot as plt
# Generate a random dataset
cols = [s*4 for s in list("ABCD")]
df = pd.DataFrame(data=np.random.rayleigh(scale=5, size=(100, 4)), columns=cols)
# Compute the correlation matrix
corr = df.corr()
print(corr)
# Generate a mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
# Set up the matplotlib figure
fig, ax = plt.subplots()
# Draw the heatmap with the mask and correct aspect ratio
vmax = np.abs(corr.values[~mask]).max()
sns.heatmap(corr, mask=mask, cmap=plt.cm.PuOr, vmin=-vmax, vmax=vmax,
square=True, linecolor="lightgray", linewidths=1, ax=ax)
for i in range(len(corr)):
ax.text(i+0.5,len(corr)-(i+0.5), corr.columns[i],
ha="center", va="center", rotation=45)
for j in range(i+1, len(corr)):
s = "{:.3f}".format(corr.values[i,j])
ax.text(j+0.5,len(corr)-(i+0.5),s,
ha="center", va="center")
ax.axis("off")
plt.show()
for i in range(len(corr)):
ax.text(i+0.5,(i+0.5), corr.columns[i], ha="center", va="center", rotation=45)
for j in range(i+1, len(corr)):
s = "{:.3f}".format(corr.values[i,j])
ax.text(j+0.5,(i+0.5),s,
ha="center", va="center")[my plt.show][1]
下面这个简单的事情让我得到了一个corrplot。现在你可以玩 map_upper 和 map_lower 并生成你想要的东西了。
tech_rets_corr= tech_rets.dropna().corr()
sns.heatmap(tech_rets_corr, annot=True, fmt='.2f')
plt.show()
我正在 UDemy 上一门关于数据可视化的课程(我会向你推荐它,但它可能看起来像垃圾邮件),在那门课程之前,我一直在使用 matplotlib 进行可视化,所以Seaborn 对我来说很新。在课程中他们谈到了 corrplot()
函数,它可以产生如下图所示的东西:
但现在,corrplot()
已被弃用。我一直在查看 Seaborn 文档和网络上的一些链接,"closer" 我所做的是:
当然,我更喜欢原始的 corrplot()
输出,而且它更容易实现,使用 heatmap()
或任何其他函数执行相同操作的方法是什么?
顺便说一句:生成图表的数据不同,第一个来自视频的捕获,而另一个是我电脑的屏幕截图,所以值不一样。
首先,corrplot()
贬值并不意味着你不能使用它。它很可能会在 seaborn 的某些未来版本中被删除,或者伴随着一些其他问题。但是,如果您对它现在给您的东西感到满意,您仍然可以使用它。
为了获得类似于 corrplot
但使用 heatmap
的结果,您可能需要稍微调整一下绘图。
示例如下:
import numpy as np; np.random.seed(1)
import pandas as pd
import seaborn.apionly as sns
import matplotlib.pyplot as plt
# Generate a random dataset
cols = [s*4 for s in list("ABCD")]
df = pd.DataFrame(data=np.random.rayleigh(scale=5, size=(100, 4)), columns=cols)
# Compute the correlation matrix
corr = df.corr()
print(corr)
# Generate a mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
# Set up the matplotlib figure
fig, ax = plt.subplots()
# Draw the heatmap with the mask and correct aspect ratio
vmax = np.abs(corr.values[~mask]).max()
sns.heatmap(corr, mask=mask, cmap=plt.cm.PuOr, vmin=-vmax, vmax=vmax,
square=True, linecolor="lightgray", linewidths=1, ax=ax)
for i in range(len(corr)):
ax.text(i+0.5,len(corr)-(i+0.5), corr.columns[i],
ha="center", va="center", rotation=45)
for j in range(i+1, len(corr)):
s = "{:.3f}".format(corr.values[i,j])
ax.text(j+0.5,len(corr)-(i+0.5),s,
ha="center", va="center")
ax.axis("off")
plt.show()
for i in range(len(corr)):
ax.text(i+0.5,(i+0.5), corr.columns[i], ha="center", va="center", rotation=45)
for j in range(i+1, len(corr)):
s = "{:.3f}".format(corr.values[i,j])
ax.text(j+0.5,(i+0.5),s,
ha="center", va="center")[my plt.show][1]
下面这个简单的事情让我得到了一个corrplot。现在你可以玩 map_upper 和 map_lower 并生成你想要的东西了。
tech_rets_corr= tech_rets.dropna().corr()
sns.heatmap(tech_rets_corr, annot=True, fmt='.2f')
plt.show()