我是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()
要旋转刻度标签,您需要手动旋转它们或使用
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()