用seaborn绘制堆积柱状图和折线图到一张画布上,堆积柱状图和折线图分别使用不同的Y轴,但是图例放在一起
时间: 2024-06-06 10:08:17 浏览: 143
以下是一个示例代码,其中使用seaborn中的titanic数据集来绘制堆积柱状图和折线图:
```python
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据集
titanic = sns.load_dataset('titanic')
# 创建画布和两个子图
fig, ax1 = plt.subplots(figsize=(10, 6))
ax2 = ax1.twinx()
# 绘制堆积柱状图
sns.countplot(x='class', hue='survived', data=titanic, ax=ax1)
ax1.set_ylabel('Count')
# 绘制折线图
sns.lineplot(x='class', y='fare', data=titanic, ax=ax2, color='r')
ax2.set_ylabel('Fare')
# 设置图例
ax1.legend(['Not Survived', 'Survived', 'Fare'], loc='upper left')
# 显示图形
plt.show()
```
结果如下图所示:
![stacked_bar_line_plot.png](https://i.loli.net/2021/06/02/RVpJbFw8sHdIeT2.png)
相关问题
用seaborn绘制堆积柱状图和折线图到一张画布上,堆积柱状图和折线图分别使用不同的Y轴,但是堆积柱状图和折线图的图例放在一起
以下是一个示例代码,用于绘制堆积柱状图和折线图到一张画布上,并将它们的图例放在一起:
```python
import seaborn as sns
import matplotlib.pyplot as plt
# 生成数据
tips = sns.load_dataset("tips")
grouped = tips.groupby(["day", "sex"])["total_bill"].sum().reset_index()
# 绘制堆积柱状图
sns.set_style("whitegrid")
ax1 = sns.barplot(x="day", y="total_bill", hue="sex", data=grouped, palette="Set2")
# 添加第二个Y轴和折线图
ax2 = ax1.twinx()
sns.lineplot(x="day", y="tip", data=tips, ax=ax2, linewidth=2.5, color="red")
# 设置Y轴标签
ax1.set_ylabel("Total Bill")
ax2.set_ylabel("Tip")
# 设置图例
handles1, labels1 = ax1.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
handles = handles1 + handles2
labels = labels1 + labels2
plt.legend(handles, labels, loc="upper left")
# 显示图形
plt.show()
```
这段代码使用Seaborn加载了一个小费数据集,并使用数据集创建了一个包含每天不同性别的总账单的分组数据集。然后,使用Seaborn绘制了一个堆积柱状图,并使用Matplotlib的twinx()方法添加了第二个Y轴和折线图。最后,将两个图例的标签和句柄组合在一起,并在“upper left”位置显示它们。
用seaborn绘制堆积柱状图和折线图到一张画布上,堆积柱状图和折线图分别使用不同的Y轴,都有图例
以下是一个示例代码,其中使用了Seaborn中的`barplot`和`lineplot`绘制堆积柱状图和折线图,使用了`twinx()`函数创建另一个Y轴,并使用`legend()`函数添加图例:
```python
import seaborn as sns
import matplotlib.pyplot as plt
# 创建数据
tips = sns.load_dataset('tips')
grouped = tips.groupby(['day', 'time']).agg({'total_bill': 'mean', 'tip': 'mean'}).reset_index()
# 创建画布和子图
fig, ax1 = plt.subplots(figsize=(10,6))
# 绘制堆积柱状图
sns.barplot(data=grouped, x='day', y='total_bill', hue='time', ax=ax1)
# 创建第二个Y轴并绘制折线图
ax2 = ax1.twinx()
sns.lineplot(data=grouped, x='day', y='tip', hue='time', ax=ax2, sort=False)
# 添加图例
ax1.legend(loc='upper left', bbox_to_anchor=(1,1))
ax2.legend(loc='upper right', bbox_to_anchor=(1,0.9))
# 设置坐标轴标签和标题
ax1.set_xlabel('Day')
ax1.set_ylabel('Total Bill')
ax2.set_ylabel('Tip')
plt.title('Total Bill and Tip by Day and Time')
plt.show()
```
这将生成以下图表:
![image.png](attachment:image.png)
阅读全文