Seaborn 热图显示不正确的 x 轴值

Posted

技术标签:

【中文标题】Seaborn 热图显示不正确的 x 轴值【英文标题】:Seaborn heatmap showing incorrect x-axis values 【发布时间】:2018-03-24 13:40:36 【问题描述】:

我有一个看起来像这样的 Pandas 数据框(“df”):

      Variable1    Var2         Parameters           Values
0        10.000     1.1           0.296342         0.170009   
1        10.015     1.1           0.297013         0.168656   
2        10.030     1.1           0.297659         0.167326   
3        10.045     1.1           0.298282         0.166018   
4        10.060     1.1           0.298883         0.164731   
5        10.075     1.1           0.299462         0.162223
...         ...     ...                ...              ...
4038     24.565     1.0           0.563698         0.222069

使用以下命令旋转数据框,

# Pivot dataframe
df = df.pivot('Var2', 'Variable1', 'Values')

我得到以下旋转数据框:

Variable1    10.000    10.015    10.030    10.045    10.060    10.075  \
Var2                                                                  
1.0        0.219987  0.218130  0.216290  0.214465  0.212654  0.210856   
1.1        0.170009  0.168656  0.167326  0.166018  0.164731  0.163467   
1.2        0.133185  0.132202  0.131230  0.130269  0.129318  0.128378   
1.3        0.104472  0.103893  0.103312  0.102729  0.102147  0.101564   

Variable1    ...       24.865    24.880    24.895    24.910    24.925  
Var2         ...                
1.0          ...     0.212118  0.211691  0.211272  0.210860  0.210456     
1.1          ...     0.174883  0.174566  0.174257  0.173956  0.173662   
1.2          ...     0.147406  0.147154  0.146907  0.146664  0.146425   
1.3          ...     0.126780  0.126616  0.126456  0.126301  0.126150   

但是,当我尝试使用 Seaborn 的 heatmap 使用以下命令对此进行成像时:

# Pivot dataframe
df = df.pivot('Var2', 'Variable1', 'Values')

# Create heatmap
f, ax = plt.subplots(figsize=(20, 10))
sns.heatmap(df)
ax.xaxis.set_major_locator(ticker.MultipleLocator(20))
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
plt.show()

我得到一个显示变量 1 的索引 (0,1,2,3,4,...) 的图,而我需要它来显示变量 1 的 (10, 10.015 、10.030、10.045 等)。我已经包含了一个示例来说明。

我错过了什么?

【问题讨论】:

您能否包含部分旋转的df @akilat90 -- 很抱歉,我跑题了。我纠正了我的问题。我之前拥有的是旋转数据框。我已经包含了原始数据框的示例。 我在您提供的样本数据上遵循了与您相同的步骤,并且能够使用 seaborn 0.7.1 获得热图 @akilat90 - 您的 x 轴读取了 Variable1 的正确值?如果有什么不同,我会在 Jupyter Notebook 中运行它。 是的,看我的回答 【参考方案1】:

复制您的样本数据,

Variable1    Var2         Parameters           Values
    0        10.000     1.1           0.296342         0.170009   
    1        10.015     1.1           0.297013         0.168656   
    2        10.030     1.1           0.297659         0.167326   
    3        10.045     1.1           0.298282         0.166018   
    4        10.060     1.1           0.298883         0.164731   
    5        10.075     1.1           0.299462         0.162223
    4038     24.565     1.0           0.563698         0.222069

df = pd.read_clipboard()
df = df.pivot('Var2', 'Variable1', 'Values')

df 的样子:

Variable1    10.000    10.015    10.030    10.045    10.060    10.075  \
Var2                                                                    
1.0             NaN       NaN       NaN       NaN       NaN       NaN   
1.1        0.170009  0.168656  0.167326  0.166018  0.164731  0.162223   

Variable1    24.565  
Var2                 
1.0        0.222069  
1.1             NaN 

只使用sns.heatmap(df) 返回,

【讨论】:

我不确定发生了什么,但只需运行sns.heatmap(df)(如您所建议的那样)即可解决问题。感谢您的帮助——直到关于pd.read_clipboard() 最后一件事——如何为我的 x 轴定义我的(开始、结束、增量)? 一种方法是使用ax = sns.heatmap(df)并将一个numpy数组传递给ax.xaxis.set_ticklabels()

以上是关于Seaborn 热图显示不正确的 x 轴值的主要内容,如果未能解决你的问题,请参考以下文章

seaborn 热图彩色图

seaborn 热图的人工刻度标签

使用 Seaborn 和 Matplotlib 在热图和线图的共享子图中对齐 x 轴刻度

热图中的日期轴 seaborn

根据 Seaborn 中的散点图绘制热图

Seaborn 热图 - 要显示的行和列统计信息