import pandas as pd import seaborn as sns # 读取数据 df = pd.read_csv('sales_data.csv') # 按照企业和产品型号分组,计算平均售价和标准差 grouped = df.groupby(['企业', '产品型号'])['售价'].agg(['mean', 'std']) grouped = grouped.reset_index() # 计算售价的上下界 grouped['lower'] = grouped['mean'] - grouped['std'] grouped['upper'] = grouped['mean'] + grouped['std'] # 将售价分成若干个区间,并为每个区间指定一个颜色 n_colors = 5 colors = sns.color_palette('RdYlBu', n_colors) grouped['color'] = pd.cut(grouped['mean'], n_colors, labels=colors[::-1]) # 将每个产品型号的售价按照区间映射到对应的颜色,并绘制色阶图 heatmap_data = pd.pivot_table(grouped, values='mean', index='企业', columns='产品型号') cmap = sns.diverging_palette(220, 10, n=n_colors, as_cmap=True) sns.heatmap(heatmap_data, cmap=cmap, center=grouped['mean'].mean())数据源包含企业、产品型号、市、售价,需要绘制同一企业同一型号不同市售价色阶图
时间: 2023-08-07 15:03:17 浏览: 84
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
根据您提供的代码,您已经按照企业和产品型号分组,并计算了每个组的平均售价和标准差。接下来,您需要将每个组的售价按照区间映射到对应的颜色,并绘制色阶图,以展示同一企业同一型号不同市的售价差异。
您可以按照以下步骤进行处理:
1. 修改分组的代码,将每个企业、产品型号和市作为分组依据,计算每个组的平均售价。
```python
grouped = df.groupby(['企业', '产品型号', '市'])['售价'].mean().reset_index()
```
2. 计算每个企业、产品型号和市的售价相对于该企业、产品型号组的平均售价的偏差,并根据偏差值将售价映射到对应的颜色。
```python
grouped['mean'] = grouped.groupby(['企业', '产品型号'])['售价'].transform('mean')
grouped['std'] = grouped.groupby(['企业', '产品型号'])['售价'].transform('std')
grouped['diff'] = (grouped['售价'] - grouped['mean']) / grouped['std']
grouped['color'] = pd.cut(grouped['diff'], n_colors, labels=colors[::-1])
```
3. 将每个企业、产品型号和市的售价按照区间映射到对应的颜色,并绘制色阶图。
```python
heatmap_data = pd.pivot_table(grouped, values='color', index=['企业', '市'], columns='产品型号', aggfunc='first')
sns.heatmap(heatmap_data, cmap=cmap, center=None)
```
这样,您就可以绘制同一企业同一型号不同市售价的色阶图了。
阅读全文