Как включить p-значения в тепловую карту

Я создал тепловую карту корреляции из 4 переменных, используя Seaborn. В каждую ячейку тепловой карты я хотел бы включить как корреляцию, так и значение p, связанное с корреляцией. В идеале p-значение должно быть на новой строке и в квадратных скобках. Я пытаюсь использовать аргумент annot для отображения как корреляции, так и значения p на тепловой карте. Тем не менее, я получаю сообщение об ошибке ниже, и я не уверен, как это исправить. ---> 12 corr_matrix, pvalues ​​= data.corr(метод=лямбда x, y: pearsonr(x, y)) ValueError: установка элемента массива с последовательностью.

Я был бы очень признателен, если бы кто-то мог мне помочь. Заранее благодарим вас за ваше время.

Вот мой код

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import pearsonr

# Generate a synthetic dataset of 4 variables
np.random.seed(42)
data = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))

# Calculate the correlation matrix and p-values
corr_matrix, pvalues = data.corr(method=lambda x, y: pearsonr(x, y))

# Generate the heatmap of the correlation matrix
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
sns.set(style='white')
fig, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', mask=mask, cbar_kws = {'shrink': 0.8},
            ax=ax, vmin=-1, vmax=1, center=0)
for i in range(corr_matrix.shape[0]):
    for j in range(corr_matrix.shape[1]):
        if i >= j:
            continue
        value = '{:.2f}\n(p = {:.2e})'.format(corr_matrix.iloc[i, j], pvalues.iloc[i, j])
        ax.text(j+0.5, i+0.5, value, ha='center', va='center', fontsize=10, color='white')
plt.title('Correlation Heatmap')
plt.tight_layout()
plt.show()
plt.close()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
126
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потребовалось немного времени, чтобы пройтись по коду и ознакомиться с тем, что вы пытались сделать. Но я думаю, это то, что вы ищете.

Вы были очень, очень близки. По сути, я разбил его на две части.

np.random.seed(42)
data = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD'))

# Calculate the correlation matrix using Pearson correlation coefficients
corr_matrix = data.corr(method='pearson')

# Calculate the p-values for the correlation coefficients
pvalues = round(data.corr(method=lambda x, y: pearsonr(x, y)[1]), 4)

# Generate the heatmap of the correlation matrix
mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
sns.set(style='white')
fig, ax = plt.subplots(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', mask=mask, cbar_kws = {'shrink': 0.8},
            ax=ax, vmin=-1, vmax=1, center=0)

# Update the heatmap labels with correlation coefficients and p-values
for i in range(corr_matrix.shape[0]):
    for j in range(corr_matrix.shape[1]):
        if i >= j:
            continue
        corr = '{:f}'.format(corr_matrix.iloc[i, j]),
        pval = pvalues.iloc[i, j]
        ax.text(j+0.5, i+0.5, corr, ha='center', va='center', fontsize=10, color='white')
        ax.text(i+0.5, j+0.6, pval, ha='center', va='center', fontsize=10, color='green')

plt.title('Correlation Heatmap')
plt.tight_layout()
plt.show()
plt.close()

Другие вопросы по теме