我正在绘制一个来自pandas数据帧的叠加折线图。在两天的过程中不定期地收集数据。在下图中,您可以看到相等间隔之间的时间变化(等间隔间隔约7小时至约36小时)。我不希望这种情况发生,我希望图形上的点被适当地拉伸和挤压,使得时间与x轴线性地成比例。我怎么能这样做?
数据内容如下:
df = pd.read_csv("filepath", index_col=0)
df = df.T
上面,我不得不将大熊猫堆叠线图的数据帧转换为我想要的工作。情节如下:
plot = df.plot.area(rot=90)
plot.axhline(y=2450, color="black")
作为对ImportanceOfBeingErnest的回应,这是一个最小,完整且可验证的例子:
import numpy as np
import pandas as pd
import matplotlib.pyplot as mpl
dateTimeIndex = ["04.12.17 23:03", "05.12.17 00:09", "05.12.17 21:44", "05.12.17 22:34", "08.12.17 16:23"]
d = {'one' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex),
'two' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex),
'three' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex)}
df = pd.DataFrame(d)
plot = df.plot.area(rot=90)
以下是数据框的外观(随机值会有所不同):
one three two
04.12.17 23:03 0.472832 0.283329 0.739657
05.12.17 00:09 3.166099 1.065015 0.561079
05.12.17 21:44 0.209190 0.674236 0.143453
05.12.17 22:34 1.275056 0.764328 0.650507
08.12.17 16:23 0.764038 0.265599 0.342435
并制作了情节:
正如您所知,dateTimeIndex条目相当随机,但它们在x轴上的间距相等。我不介意刻度标记是否与数据点重合。我只想要时间线性扩展。如何实现这一目标?
答案 0 :(得分:1)
上面发生的事情是熊猫只是将字符串用作x-ticks。您需要将dateTimeIndex
设为日期时间对象:
dateTimeIndex = pd.to_datetime( ["04.12.17 23:03", "05.12.17 00:09",
"05.12.17 21:44", "05.12.17 22:34", "08.12.17 16:23"])
d = {'one' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex),
'two' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex),
'three' : pd.Series(abs(np.random.randn(5)), index=dateTimeIndex)}
df = pd.DataFrame(d)
plot = df.plot.area(rot=90)