import numpy as np import scipy.stats as ss import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df=pd.read_excel("./tmp_apply2.xlsx") sns.set_context(font_scale=20) plt.rcParams['font.family'] = 'FangSong' plv_tb=pd.pivot_table(df,values="sale",index=["FactoryName","JiJXH"],columns=["Xian"],aggfunc=np.mean) fig, ax = plt.subplots(figsize=(200,10)) sns.heatmap(plv_tb,vmin=plv_tb.min().min(), vmax=plv_tb.max().max(),cmap=sns.color_palette("RdYlBu",n_colors=10),annot=True, fmt='g', annot_kws={"size": 20}, ax=ax) plt.show()能否使x轴xian折叠成多行显示,这样使图不至于很长
时间: 2023-12-10 09:37:16 浏览: 26
可以使用`FacetGrid`函数实现x轴Xian的分行显示。
首先需要导入`FacetGrid`函数:
```python
from seaborn import FacetGrid
```
然后将`plv_tb`转换为DataFrame,并添加Xian列:
```python
plv_df = plv_tb.reset_index()
plv_df['Xian'] = plv_df['Xian'].astype(str)
```
接着,将`FacetGrid`应用于`plv_df`并指定`col`参数为`Xian`,`col_wrap`参数为想要分行的数量。然后使用`map_dataframe`函数绘制热力图,并设置其他参数:
```python
g = FacetGrid(plv_df, col="Xian", col_wrap=4, sharex=False, sharey=False, height=5, aspect=1.5)
g = g.map_dataframe(sns.heatmap, x="FactoryName", y="JiJXH", cbar=False, annot=True, fmt='g', annot_kws={"size": 16}, cmap=sns.color_palette("RdYlBu",n_colors=10))
```
其中,`sharex=False`和`sharey=False`参数可以避免x轴和y轴的刻度标签重叠。
完整代码如下:
```python
import numpy as np
import scipy.stats as ss
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from seaborn import FacetGrid
df=pd.read_excel("./tmp_apply2.xlsx")
sns.set_context(font_scale=20)
plt.rcParams['font.family'] = 'FangSong'
plv_tb=pd.pivot_table(df,values="sale",index=["FactoryName","JiJXH"],columns=["Xian"],aggfunc=np.mean)
plv_df = plv_tb.reset_index()
plv_df['Xian'] = plv_df['Xian'].astype(str)
g = FacetGrid(plv_df, col="Xian", col_wrap=4, sharex=False, sharey=False, height=5, aspect=1.5)
g = g.map_dataframe(sns.heatmap, x="FactoryName", y="JiJXH", cbar=False, annot=True, fmt='g', annot_kws={"size": 16}, cmap=sns.color_palette("RdYlBu",n_colors=10))
plt.show()
```