【问题标题】:Plot multiple lines on matplotlib graph for time series plot在 matplotlib 图上为时间序列图绘制多条线
【发布时间】:2017-12-11 18:51:39
【问题描述】:

我想要一个时间序列图,x 轴为年份,y 轴为县/失业率。

问题与建议的重复项类似,这就是我想使用的方法。主要区别在于我无法弄清楚如何正确处理数据。

数据是这样显示的

name  employment_2007  employment_2008  employment_2009
Napa              200              230              215
Lake              140              130              150

Sample of what I'm going for

screenshot of code and error

请注意,在图片中我已经隔离了一个县以使问题更简单,我计划在解决此问题后添加所有县。

这可能更像是一个数据转换问题,所以我应该注意我正在使用 Pandas 数据框来存储所有内容。

【问题讨论】:

  • 你有什么办法解决这个问题,为什么它对你不起作用?
  • 我尝试制作两个数组并绘制它们
  • 请在您的帖子中添加代码,不要将此添加为评论

标签: python pandas matplotlib


【解决方案1】:

这可以通过以下步骤实现:

  1. 从列标签中提取年份字符串
  2. 将年份字符串转换为日期时间
  3. 通过迭代 groupby 对象在同一轴上绘图。

类似:

from StringIO import StringIO
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv(StringIO("""name, employment_2007, employment_2008, employment_2016
Napa, 200, 230,215
Lake, 140, 130,150"""),sep=',',index_col=['name'])


#Get year string and convert to date time
df = df.unstack().reset_index()
df['Year'] = df['level_0'].str.split('_').apply(lambda x: x[1])        
df['TimeStamp'] = pd.to_datetime(df['Year'],format='%Y')

#Get Rid of extra columns and rename series to plot
df = df[['name',0,'TimeStamp']]
df = df.rename(columns={0:'Employment'})
fig,ax= plt.subplots()
for n, group in df.groupby('name'):
    group.plot(x='TimeStamp',y='Employment', ax=ax,label=n)

这会产生如下情节:

【讨论】:

    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 2018-04-02
    • 2022-11-10
    • 1970-01-01
    • 2017-01-02
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多