有没有办法让iPython在给定数据框架的情况下生成这些类型的图表?

时间:2013-10-16 14:47:37

标签: python numpy pandas scipy ipython

This picture

请忽略背景图片。前景图表是我有兴趣使用pandas或numpy或scipy(或iPython中的任何内容)显示的内容。

我有一个数据框,每行代表一天的温度。 这是一些行的示例:

            100   200   300   400   500   600 ...... 2300
10/3/2013  53*C  57*C  48*C  49*C  54*C  54*C        55*C
10/4/2013  45*C  47*C  48*C  49*C  50*C  52*C        57*C

有没有办法使用第一列作为“零”来获取表示从小时到小时的变化的图表

2 个答案:

答案 0 :(得分:2)

假设您的数据框名为df,那么快速而肮脏的东西可能会让您大部分都在那里:

import matplotlib.pyplot as plt
plt.imshow(df.T.diff().fillna(0.0).T.drop(0, axis=1).values)

由于我无法使用您的确切列标签轻松构建示例版本,因此可能需要稍微补充一点,以摆脱diff中包含的并通过转置移动的任何索引列。但是这可以在一个随机数据示例中为我制作一个简单的热图。

然后你可以创建一个matplotlib图形或轴对象,并指定你想要的x轴和y轴标签。

答案 1 :(得分:0)

您可以为每一行绘制一条带有偏移的行:

nrows, ncols = 12, 30

# make up some fake data:
d = np.random.rand(nrows, ncols)
d *= np.sin(2*np.pi*np.arange(ncols)*4/ncols)
d *= np.exp(-0.5*(np.arange(nrows)-nrows/2)**2/(nrows/4)**2)[:,None]

#this is all you need, if you already have the data:
for i, r in enumerate(d):
    plt.fill_between(np.arange(ncols), r+(nrows-i)/2., lw=2, facecolor='white')

Overlapping lines

如果您不需要填充颜色来阻止上一行,则可以一次完成所有操作:

d += np.arange(nrows)[:, None]
plt.plot(d.T)

Not filled