Python 使用时间戳的熊猫多线图
Python Panda multi Line graph using time stamp
我正在尝试使用 python panda 绘制图形,到目前为止我能够读取 sqlite 数据库。我无法使用时间戳生成图形。我想用 python 熊猫绘制多线图。我想要不同行的月(X 轴)与值(Y 轴)图表。
下面是我输出的数据框(df):
这是我的代码
import sqlite3
from pylab import *
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
conn = sqlite3.connect('Metrics.db')
df = pd.read_sql("SELECT * FROM ABC", conn)
我尝试使用 df.plot(),但没有成功。
提前谢谢你。
似乎有两个不同的目标。一种是按 'Type' 对数据进行分组并分别绘制每条线。为此,您可以使用 df.groupby()
然后遍历组:
for key, grp in df.groupby('Type'):
plt.plot(grp['Timestamp'], grp['Value'])
第二个问题是如何设置时间戳的格式以显示月份。为此,首先将您的时间戳转换为日期时间,然后使用格式化程序仅打印月份名称。
这是执行此操作的一些代码,结合了我们在第一部分中已有的代码:
df['date'] = [pd.to_datetime(t, unit='s') for t in df['Timestamp']]
for key, grp in df.groupby('Type'):
plt.plot(grp['date'], grp['Value'])
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%B'))
如果要更改刻度标签格式,可以调整 DateFormatter 的参数。
下面将数据帧索引转换成Pandas时间戳:
import datetime
df.index = [pd.Timestamp(datetime.datetime.fromtimestamp(ts)) for ts in df.Timestamp]
我正在尝试使用 python panda 绘制图形,到目前为止我能够读取 sqlite 数据库。我无法使用时间戳生成图形。我想用 python 熊猫绘制多线图。我想要不同行的月(X 轴)与值(Y 轴)图表。
下面是我输出的数据框(df):
这是我的代码
import sqlite3
from pylab import *
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
conn = sqlite3.connect('Metrics.db')
df = pd.read_sql("SELECT * FROM ABC", conn)
我尝试使用 df.plot(),但没有成功。
提前谢谢你。
似乎有两个不同的目标。一种是按 'Type' 对数据进行分组并分别绘制每条线。为此,您可以使用 df.groupby()
然后遍历组:
for key, grp in df.groupby('Type'):
plt.plot(grp['Timestamp'], grp['Value'])
第二个问题是如何设置时间戳的格式以显示月份。为此,首先将您的时间戳转换为日期时间,然后使用格式化程序仅打印月份名称。
这是执行此操作的一些代码,结合了我们在第一部分中已有的代码:
df['date'] = [pd.to_datetime(t, unit='s') for t in df['Timestamp']]
for key, grp in df.groupby('Type'):
plt.plot(grp['date'], grp['Value'])
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%B'))
如果要更改刻度标签格式,可以调整 DateFormatter 的参数。
下面将数据帧索引转换成Pandas时间戳:
import datetime
df.index = [pd.Timestamp(datetime.datetime.fromtimestamp(ts)) for ts in df.Timestamp]