我有一个障碍,我有一个看起来像下面这样的DataSet:
现在我想自定义热图的X轴为"A-Z",Y轴也是如此,然后将数据集放到热图中,似乎没有办法满足我的要求,除非我将数据集更改为以下形式:
我的想法对吗?非常感谢。
发布于 2021-03-29 16:17:12
您可以将dataframe与包含所有x和y值的虚拟dataframe连接起来。在进行重复数据消除和旋转之后,将创建一个完整的矩阵(大多数值将为nan
)。
下面是一个例子。LogNorm
用于着色,因为问题中的值范围似乎很宽。
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import seaborn as sns
import pandas as pd
import numpy as np
sns.set_style('white')
df = pd.DataFrame({'x': np.random.choice([*'KGORD'], 20),
'y': np.random.choice([*'CGLKU'], 20),
'extraction': 10000 ** np.random.uniform(0, 1, 20)})
df_dummy = pd.DataFrame({'x': [*'ABCDEFGHIJKLMNOPQRSTUVWXYZ'],
'y': [*'ABCDEFGHIJKLMNOPQRSTUVWXYZ'],
'extraction': np.nan})
keep='first').set_index(['x', 'y']).unstack()
df1 = pd.concat([df, df_dummy]) \
.drop_duplicates(subset=['x', 'y'], keep='first') \
.pivot(index='y', columns='x', values='extraction')
ax = sns.heatmap(data=df1, norm=LogNorm(), cmap='rocket_r')
ax.tick_params(labelrotation=0)
plt.tight_layout()
plt.show()
发布于 2021-03-29 09:46:15
Seaborn为整个数据帧创建一个热图,假设您使用的是pandas。尽管如此,我还是没有真正理解你的问题。是否要将x和y轴更改为字母顺序?如果是这样的话,我建议您在生成热图之前对数据进行排序。我相信熊猫有一些功能可以做到这一点。如果我不能正确理解你的问题,请告诉我!
https://stackoverflow.com/questions/66851180
复制相似问题