import pandas as pd import seaborn as sns import matplotlib.pyplot as plt plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体 fig=plt.figure(figsize=(40,50), dpi=300) ax1=fig.add_subplot(131) ax2=fig.add_subplot(132) ax3=fig.add_subplot(133) # 读取数据 df = pd.read_excel("test_Fd.xlsx") # 按照 FactoryName 和 JiJXH 进行分组,计算售价最高值和最低值 grouped = df.groupby("FenDMC")['avg_sale'].agg(['min', 'max']).reset_index() grouped = grouped.rename(columns={'min': 'min_sale', 'max': 'max_sale'}) # 将售价最高值和最低值合并到原表中 df = pd.merge(df, grouped, on=["FenDMC"]) # 绘制热力图,并设置颜色取值范围 sns.set_context(font_scale=1.5) sns.heatmap(df.pivot_table(index=["FactoryName","JiJXH"], columns=["shi"], values="avg_sale"), cmap='YlGnBu', annot=True, fmt='.2f', cbar_kws={'label': '单台售价','shrink':0.8,'aspect':40}, vmin=grouped['min_sale'].min(), vmax=grouped['max_sale'].max()) plt.xlabel(None) plt.ylabel(None) plt.title('''200马力及以上四轮驱动拖拉机 各生产企业各型号在不同市单台平均售价''', fontsize=20) # 调整边距,使图像居中 plt.tight_layout() # 保存图像 plt.savefig('heatmap.png') plt.show()如何把不同FenDMC,按照FactoryName,jiJXH按照avg_sale绘制到不同子图
时间: 2023-08-10 18:04:40 浏览: 98
详解pandas数据合并与重塑(pd.concat篇)
5星 · 资源好评率100%
可以使用 Pandas 的 `groupby` 方法按照 `FenDMC` 进行分组,并遍历每个分组,将每个分组的数据绘制到不同的子图中。示例代码如下:
```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Fangsong' # 指定使用宋体字体
fig, axes = plt.subplots(nrows=3, 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 // 3
col = idx % 3
ax = axes[row, col]
sns.heatmap(grouped.pivot_table(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()
```
这样就可以将不同的 `FenDMC` 分别绘制到不同的子图中,每个子图中按照 `FactoryName` 和 `JiJXH` 绘制热力图,并显示对应的标题。
阅读全文