How to line plot timeseries data on a bar plot(如何在条形图上绘制时间序列数据)
本文介绍了如何在条形图上绘制时间序列数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据框:
data = {'date': ['3/24/2020', '3/25/2020', '3/26/2020', '3/27/2020'],
'Total1': [133731.9147, 141071.6383, -64629.74024, 647.5360108],
'Total2': [133731.9147, 274803.5529, 210173.8127, 210821.3487]}
df = pd.DataFrame(data)
date Total1 Total2
0 3/24/2020 133731.9147 133731.9147
1 3/25/2020 141071.6383 274803.5529
2 3/26/2020 -64629.74024 210173.8127
3 3/27/2020 647.5360108 210821.3487
df.info()为:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
date 4 non-null object
Total1 4 non-null float64
Total2 4 non-null float64
dtypes: float64(2), object(1)
memory usage: 168.0+ bytes
total2是total1的累计总数。我想做一个total1的条形图,然后用total2的折线图覆盖它。
ax = sns.barplot(x="date",y="NetPL",data=gby)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
这就是我当前用于条形图的内容。
我在将日期转换为日期时间后尝试了此操作
plt.style.use('ggplot')
ax =sns.barplot(x="date", y="Total1", data=df)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
# add lineplot
sns.lineplot(x='date', y='Total2', data=df, marker='o')
plt.show()
推荐答案
- 测试于
python 3.8.12
、pandas 1.3.4
、matplotlib 3.4.3
、seaborn 0.11.2
'date'
作为str
- 这是可行的,因为条形图的刻度位置是0索引的,而且由于
'date'
列值是字符串,所以线条图刻度位置也是0索引的。- 使用
p1.get_xticklabels()
检查位置和标签
- 使用
plt.style.use('ggplot')
p1 = sns.barplot(x="date", y="Total1", data=df)
p1.set_xticklabels(ax.get_xticklabels(), rotation=45)
# add lineplot to the same axes
p2 = sns.lineplot(data=df, x='date', y='Total2', marker='o', ax=p1)
p1.set(ylabel='Total', xlabel='Date')
plt.show()
'date'
作为datetime dtype
p2 = sns.lineplot(data=df, x='date', y='Total2', marker='o')
会导致以下xtick位置:p2.get_xticks()
→array([18345. , 18345.5, 18346. , 18346.5, 18347. , 18347.5, 18348. ])
,与条形图产生的0个索引xtick位置不对应
- 根据条形图xtick位置
p1.get_xticks()
绘制折线图,或使用df.index()
,只要索引为0索引RangeIndex
。
# convert date to a datetime dtype and extract only the date component
df['date'] = pd.to_datetime(df['date']).dt.date
p1 = sns.barplot(data=df, x='date', y='Total1')
p1.set_xticklabels(ax.get_xticklabels(), rotation=45)
# get the xtick locations
xticks = p1.get_xticks()
# plot the line to the xtick locs (or df.index)
p2 = sns.lineplot(data=df, x=xticks, y='Total2', marker='o', ax=p1)
p1.set(ylabel='Total', xlabel='Date')
plt.show()
这篇关于如何在条形图上绘制时间序列数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在条形图上绘制时间序列数据
基础教程推荐
猜你喜欢
- 如何在Python中绘制多元函数? 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01