<think>
我们有两组数据:第一组(0行)为五月34,六月33,七月40;第二组(1行)为五月14,六月18,七月23。
使用seaborn绘制分组柱状图,我们需要将数据整理为长格式(long format),包含三列:月份、组别(0或1)、数值。
然后使用seaborn的barplot函数,x轴为月份,y轴为数值,hue为组别。
步骤:
1. 创建数据框(DataFrame):
月份: ['五月','五月','六月','六月','七月','七月']
组别: [0, 1, 0, 1, 0, 1]
数值: [34, 14, 33, 18, 40, 23]
2. 设置seaborn样式
3. 使用sns.barplot绘图,并设置x='月份', y='数值', hue='组别'
4. 添加标题、数据标签等
注意:seaborn的barplot会自动计算置信区间并绘制误差线,但我们这里不需要误差线(设置ci=None)。此外,由于数据是确定的,我们也可以添加数据标签。
参考引用[3]中的样式设置,我们可以设置一个合适的样式。
另外,引用[1]提到seaborn的figure级函数和axes级函数,barplot是axes级的,所以我们可以结合matplotlib的plt.subplots来创建画布。
由于数据量不大,我们可以直接使用barplot,然后通过循环添加数据标签。
具体代码如下:
</think>
我将使用 Seaborn 绘制五月、六月、七月数据的柱状图,具体实现如下:
```python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 数据准备
data = pd.DataFrame({
'月份': ['五月', '五月', '六月', '六月', '七月', '七月'],
'组别': ['0', '1', '0', '1', '0', '1'],
'数值': [34, 14, 33, 18, 40, 23]
})
# 设置Seaborn样式
sns.set(context='notebook', # 画幅大小
style='whitegrid', # 网格样式
palette='muted', # 调色板
font='SimHei', # 中文字体
font_scale=1.2) # 字体缩放比例
# 创建图表
plt.figure(figsize=(10, 6))
ax = sns.barplot(x='月份', y='数值', hue='组别', data=data,
ci=None, palette=['#3498db', '#e74c3c'])
# 添加标题和标签
plt.title('五月至七月数据对比', fontsize=16, pad=20)
plt.xlabel('月份', fontsize=14)
plt.ylabel('数值', fontsize=14)
# 添加数据标签
for p in ax.patches:
ax.annotate(f"{p.get_height():.0f}",
(p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center',
fontsize=12, color='black',
xytext=(0, 8),
textcoords='offset points')
# 调整图例
plt.legend(title='数据组别', loc='upper right')
# 优化布局
plt.tight_layout()
plt.show()
```
### 图表说明:
1. **数据结构**:
- 使用长格式数据:包含"月份"、"组别"和"数值"三列
- 组别"0"对应原始数据的第一行(五月34、六月33、七月40)
- 组别"1"对应原始数据的第二行(五月14、六月18、七月23)
2. **Seaborn样式设置**:
- `context='notebook'`:适合笔记本显示的画幅大小
- `style='whitegrid'`:白色背景+网格线,提高可读性
- `palette='muted'`:柔和的调色板
- `font='SimHei'`:确保中文字符正常显示[^3]
3. **可视化效果**:
- 分组柱状图清晰展示每月两组数据的对比
- 数据标签直接显示在柱子上方
- 蓝色表示组别0,红色表示组别1
- 网格线辅助数值读取
### 扩展建议:
1. **调整分组位置**:
```python
# 设置dodge=False使柱子重叠显示
sns.barplot(..., dodge=False)
```
2. **添加误差线**:
```python
# 当有多个样本时,显示标准差
sns.barplot(..., ci='sd')
```
3. **水平柱状图**:
```python
# 交换x和y轴变量
sns.barplot(x='数值', y='月份', hue='组别', data=data, orient='h')
```
Seaborn 的 `barplot` 函数会自动计算聚合统计量(默认显示均值),并提供丰富的样式配置选项,使数据对比更加直观[^1][^2]。