用seaborn包画共用x轴的柱状图和折线图
时间: 2024-11-12 11:45:38 浏览: 21
Seaborn是一个强大的数据可视化库,在Python中常用于统计图形的绘制。如果你想在同一张图表上同时展示柱状图和折线图,并共享相同的X轴,你可以使用`facet_grid()`函数创建小提琴图网格,然后分别在每个格子中画出柱状图和折线图。这是一个示例:
```python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 假设你有一个DataFrame df,其中包含两个时间序列的数据列,如'time'和'value1', 'value2'
# 创建一个 FacetGrid 对象
grid = sns.FacetGrid(df, col="variable", sharex=True)
# 绘制柱状图
grid.map(sns.barplot, "time", "value1")
grid.set_titles(col_template="{col_name}")
# 继续在同一网格中绘制折线图
grid.map(sns.lineplot, "time", "value2")
grid.add_legend() # 添加图例
# 显示图表
plt.show()
```
在这个例子中,`variable`是你想要区分的列名,"time"是共同的X轴变量,`value1`和`value2`是你要比较的两个系列。
相关问题
用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绘制堆积柱状图和折线图到一张画布上的示例代码:
```python
import seaborn as sns
import matplotlib.pyplot as plt
# 创建数据
data1 = {'Year': [2015, 2016, 2017, 2018, 2019],
'Sales': [100, 120, 140, 160, 180],
'Expenses': [80, 90, 100, 110, 120]}
data2 = {'Year': [2015, 2016, 2017, 2018, 2019],
'Profit': [20, 30, 40, 50, 60]}
# 创建画布和轴对象
fig, ax1 = plt.subplots(figsize=(10, 6))
ax2 = ax1.twinx()
# 绘制堆积柱状图
sns.barplot(x='Year', y='Sales', data=data1, color='blue', ax=ax1)
sns.barplot(x='Year', y='Expenses', data=data1, color='red', ax=ax1, bottom=data1['Sales'])
# 绘制折线图
sns.lineplot(x='Year', y='Profit', data=data2, color='green', ax=ax2)
# 设置轴标签和标题
ax1.set_ylabel('Sales and Expenses')
ax2.set_ylabel('Profit')
ax1.set_xlabel('Year')
ax1.set_title('Sales, Expenses and Profit by Year')
# 显示图形
plt.show()
```
解释:
1. 首先,我们创建两个数据集data1和data2,分别表示销售额、成本和利润的数据。
2. 然后,我们创建画布和轴对象,使用twinx()方法创建一个新的Y轴,使得堆积柱状图和折线图使用不同的Y轴。
3. 接着,我们使用seaborn的barplot()方法绘制堆积柱状图,其中color参数指定柱状图的颜色,bottom参数指定第二个柱状图的底部位置,使其叠加在第一个柱状图之上。
4. 然后,我们使用seaborn的lineplot()方法绘制折线图,其中color参数指定折线图的颜色。
5. 最后,我们设置轴标签和标题,然后调用show()方法显示图形。
运行以上代码,将会得到一张堆积柱状图和折线图到一张画布上的图形。
阅读全文