import pandas as pd import seaborn as sns import matplotlib.pyplot as plt plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(30, 25), dpi=300) # 创建 9 个子图 # 读取数据 df = pd.read_excel("test_Fd.xlsx") # 按照 FenDMC 进行分组 groups = df.groupby("FenDMC") # 遍历每个分组,绘制子图 for idx, (name, group) in enumerate(groups): # 按照 FactoryName 和 JiJXH 进行分组,计算平均售价 grouped = group.groupby(["FactoryName", "JiJXH"])['avg_sale'].mean().reset_index() # 在对应的子图中绘制热力图 row = idx col = idx ax = axes[row, col] sns.heatmap(grouped.pivot(index="FactoryName", columns="JiJXH", values="avg_sale"), cmap='YlGnBu', annot=True, fmt='.2f', cbar_kws={'label': '单台售价', 'shrink':0.8, 'aspect':40}, ax=ax) ax.set_xlabel(None) ax.set_ylabel(None) ax.set_title(name, fontsize=20) # 调整边距,使图像居中 plt.tight_layout() # 保存图像 plt.savefig('heatmap.png') # 显示图像 plt.show()还是提示 too many indices for array: array is 1-dimensional, but 2 were indexed
时间: 2024-01-11 08:03:58 浏览: 116
详解pandas数据合并与重塑(pd.concat篇)
5星 · 资源好评率100%
这个错误提示可能是由于 `axes` 变量的大小不正确导致的。在您的代码中,`axes` 是一个大小为 (1, 3) 的子图数组,应该只有一行三列,但是在 `sns.heatmap()` 中却使用 `idx` 作为行和列的索引,这会导致索引越界。可以尝试将 `axes` 变量修改为以下形式:
```python
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(10, 25), dpi=300) # 创建 3 个子图
```
并将 `ax = axes[row, col]` 改为 `ax = axes[idx]`。这样,就可以创建三个子图,每个子图一行,三列;并且在 `sns.heatmap()` 中使用 `idx` 作为子图的索引,就可以正确地绘制热力图了。
阅读全文