Pandas seaborn 热图:水平文本标签[重复]

问题描述 投票:0回答:1

我是seaborn 图书馆的新手。我创建了一个用于群组分析的热图。 y 标签的文本是垂直的。相反,我希望水平显示文本标签。非常感谢您的支持 - 非常感谢。 红色标记应该旋转,因此文本是水平的。我认为这不完全是 y 标签。

**dataframe: df_cohort**
        cohort  order_month n_customers period_number
1   0   2023-01 2023-01 1018    0
2   1   2023-01 2023-02 384 1
3   2   2023-01 2023-03 502 2
4   3   2023-01 2023-04 423 3
5   4   2023-01 2023-05 468 4
6   5   2023-01 2023-06 371 5
7   6   2023-01 2023-07 332 6
8   7   2023-01 2023-08 226 7
9   8   2023-01 2023-09 351 8
10  9   2023-01 2023-10 321 9
11  10  2023-01 2023-11 262 10
12  11  2023-01 2023-12 221 11
13  12  2023-02 2023-02 621 0
14  13  2023-02 2023-03 179 1
15  14  2023-02 2023-04 205 2
16  15  2023-02 2023-05 235 3
17  16  2023-02 2023-06 184 4
18  17  2023-02 2023-07 142 5
19  18  2023-02 2023-08 84  6
20  19  2023-02 2023-09 166 7
21  20  2023-02 2023-10 157 8
22  21  2023-02 2023-11 102 9
23  22  2023-02 2023-12 92  10
24  23  2023-03 2023-03 412 0
25  24  2023-03 2023-04 111 1
26  25  2023-03 2023-05 124 2
27  26  2023-03 2023-06 112 3
28  27  2023-03 2023-07 72  4
29  28  2023-03 2023-08 42  5
30  29  2023-03 2023-09 88  6
31  30  2023-03 2023-10 69  7
32  31  2023-03 2023-11 56  8
33  32  2023-03 2023-12 43  9
34  33  2023-04 2023-04 211 0
35  34  2023-04 2023-05 48  1
36  35  2023-04 2023-06 50  2
37  36  2023-04 2023-07 43  3
38  37  2023-04 2023-08 25  4
39  38  2023-04 2023-09 40  5
40  39  2023-04 2023-10 35  6
41  40  2023-04 2023-11 26  7
42  41  2023-04 2023-12 16  8
43  42  2023-05 2023-05 171 0
44  43  2023-05 2023-06 41  1
45  44  2023-05 2023-07 32  2
46  45  2023-05 2023-08 23  3
47  46  2023-05 2023-09 37  4
48  47  2023-05 2023-10 35  5
49  48  2023-05 2023-11 24  6
50  49  2023-05 2023-12 14  7
51  50  2023-06 2023-06 139 0
52  51  2023-06 2023-07 23  1
53  52  2023-06 2023-08 18  2
54  53  2023-06 2023-09 34  3
55  54  2023-06 2023-10 24  4
56  55  2023-06 2023-11 33  5
57  56  2023-06 2023-12 16  6
58  57  2023-07 2023-07 80  0
59  58  2023-07 2023-08 16  1
60  59  2023-07 2023-09 18  2
61  60  2023-07 2023-10 14  3
62  61  2023-07 2023-11 9   4
63  62  2023-07 2023-12 16  5
64  63  2023-08 2023-08 31  0
65  64  2023-08 2023-09 8   1
66  65  2023-08 2023-10 12  2
67  66  2023-08 2023-11 8   3
68  67  2023-08 2023-12 6   4
69  68  2023-09 2023-09 84  0
70  69  2023-09 2023-10 16  1
71  70  2023-09 2023-11 20  2
72  71  2023-09 2023-12 13  3
73  72  2023-10 2023-10 60  0
74  73  2023-10 2023-11 14  1
75  74  2023-10 2023-12 9   2
76  75  2023-11 2023-11 35  0
77  76  2023-11 2023-12 3   1
78  77  2023-12 2023-12 43  0


cohort_pivot = df_cohort.pivot_table(index = 'cohort',
                                     columns = 'period_number',
                                     values = 'n_customers')
cohort_size = cohort_pivot.iloc[:,0]
retention_matrix = cohort_pivot.divide(cohort_size, axis = 0)
with sns.axes_style("white"):
    fig, ax = plt.subplots(1, 2, figsize=(12, 9), sharey=True, gridspec_kw={'width_ratios': [1, 11]})
    
    # retention matrix
    sns.heatmap(retention_matrix, 
                mask=retention_matrix.isnull(), 
                annot=True, 
                fmt='.0%', 
                cmap='RdYlGn', 
                ax=ax[1])
    ax[1].set_title('Monthly Cohorts: User Retention', fontsize=16)
    ax[1].set(xlabel='# of periods',
              ylabel='')

    # cohort size
    cohort_size_df = pd.DataFrame(cohort_size).rename(columns={0: 'cohort_size'})
    white_cmap = mcolors.ListedColormap(['white'])
    sns.heatmap(cohort_size_df, 
                annot=True, 
                cbar=False, 
                fmt='g', 
                cmap=white_cmap, 
                ax=ax[0])

    fig.tight_layout()

python pandas seaborn
1个回答
1
投票

要旋转刻度标签,您需要手动旋转它们或使用

pyplot.setp
辅助函数。您可能还需要将其水平对齐参数设置为“右”,以确保它们在旋转后正确对齐。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

#...

# approach 1
for label in ax.get_yticklabels():
    label.set(rotation=0, ha='right')

# approach 2
plt.setp(ax.get_yticklabels(), rotation=0, ha='right')

将其与一些随机生成的数据一起添加到代码片段中会产生:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from numpy.random import default_rng
import pandas as pd
import seaborn as sns

rng = default_rng(0)
retention_matrix = pd.DataFrame(rng.random(100).reshape(10, 10))
cohort_size = pd.Series(
    rng.integers(10, 100, size=len(retention_matrix)),
    index=pd.date_range('2000-01', freq='MS', periods=10).strftime('%Y-%m')
)


with sns.axes_style("white"):
    fig, ax = plt.subplots(1, 2, figsize=(12, 9), sharey=True, gridspec_kw={'width_ratios': [1, 11]})

    # retention matrix
    sns.heatmap(retention_matrix,
                mask=retention_matrix.isnull(),
                annot=True,
                fmt='.0%',
                cmap='RdYlGn',
                ax=ax[1])
    ax[1].set_title('Monthly Cohorts: User Retention', fontsize=16)
    ax[1].set(xlabel='# of periods',
              ylabel='')

    # cohort size
    cohort_size_df = pd.DataFrame(cohort_size).rename(columns={0: 'cohort_size'})
    white_cmap = mcolors.ListedColormap(['white'])
    sns.heatmap(cohort_size_df,
                annot=True,
                cbar=False,
                fmt='g',
                cmap=white_cmap,
                ax=ax[0])
    plt.setp(ax[0].get_yticklabels(), rotation=0, ha='right')

    fig.tight_layout()
    plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.