gpt4 book ai didi

python - 如何将相关矩阵绘制为一组椭圆,类似于 R 露天包?

转载 作者:太空狗 更新时间:2023-10-29 22:07:43 28 4
gpt4 key购买 nike

下图是使用open-air R包绘制的:

a correlation matrix showing the relationships between variables

我知道 matplotlib 有 plt.matshow 函数,
但不能同时清楚地显示变量之间的关系。

这是我早期的作品:

df 是一个带有 7 个变量的 pandas 数据框,如下所示:

enter image description here

我不知道如何将 .csv 文件附加到 StackOverflow。

使用plt.matshow(df.corr(),cmap = plt.cm.Greens),图中显示如下:

enter image description here

第二张图不能像第一张图那样清楚地表示变量的相关关系。

编辑:

我将 csv 文件上传到 Google 文档 here .

最佳答案

我不知道有任何现有的 Python 库可以绘制这些“椭圆图”,但使用 matplotlib.collections.EllipseCollection 实现它并不是特别困难:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.collections import EllipseCollection

def plot_corr_ellipses(data, ax=None, **kwargs):

M = np.array(data)
if not M.ndim == 2:
raise ValueError('data must be a 2D array')
if ax is None:
fig, ax = plt.subplots(1, 1, subplot_kw={'aspect':'equal'})
ax.set_xlim(-0.5, M.shape[1] - 0.5)
ax.set_ylim(-0.5, M.shape[0] - 0.5)

# xy locations of each ellipse center
xy = np.indices(M.shape)[::-1].reshape(2, -1).T

# set the relative sizes of the major/minor axes according to the strength of
# the positive/negative correlation
w = np.ones_like(M).ravel()
h = 1 - np.abs(M).ravel()
a = 45 * np.sign(M).ravel()

ec = EllipseCollection(widths=w, heights=h, angles=a, units='x', offsets=xy,
transOffset=ax.transData, array=M.ravel(), **kwargs)
ax.add_collection(ec)

# if data is a DataFrame, use the row/column names as tick labels
if isinstance(data, pd.DataFrame):
ax.set_xticks(np.arange(M.shape[1]))
ax.set_xticklabels(data.columns, rotation=90)
ax.set_yticks(np.arange(M.shape[0]))
ax.set_yticklabels(data.index)

return ec

例如,使用您的数据:

data = df.corr()
fig, ax = plt.subplots(1, 1)
m = plot_corr_ellipses(data, ax=ax, cmap='Greens')
cb = fig.colorbar(m)
cb.set_label('Correlation coefficient')
ax.margins(0.1)

enter image description here

负相关可以绘制为相反方向的椭圆:

fig2, ax2 = plt.subplots(1, 1)
data2 = np.linspace(-1, 1, 9).reshape(3, 3)
m2 = plot_corr_ellipses(data2, ax=ax2, cmap='seismic', clim=[-1, 1])
cb2 = fig2.colorbar(m2)
ax2.margins(0.3)

enter image description here

关于python - 如何将相关矩阵绘制为一组椭圆,类似于 R 露天包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34556180/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com