如何在条形图上绘制时间序列数据

编程入门 行业动态 更新时间:2024-10-07 04:29:24
本文介绍了如何在条形图上绘制时间序列数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下数据框:

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()

更多推荐

如何在条形图上绘制时间序列数据

本文发布于:2023-07-18 08:14:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1142739.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:条形   序列   图上   时间   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!