2016-05-05 9 views
1

証券を表す多くの列を持つデータフレームと、00:00〜23:55(各行は​​5分間隔です)の時刻を持つインデックスがあり、各セルセキュリティをプロットしてからPythonで取引される時間

Sketch of desired plot

しかし、私が持っているすべてのバイナリ値なので、私は混乱して取得しています:私は、私がここに描かれているようなものと同様のデータを可視化することができます箱ひげ図のいくつかのフォームをプロットしたいのですが1または0のいずれかを持っています時間に対してプロットするときには使用できません。私はpandasとmatplotlibの使用に制限されています。

+0

データフレームの外観の小さな例を投稿できますか?私はあなたの言うことを得たと思うが、確かにそうだ。 – Grr

+0

例の画像は次のとおりです。https://drive.google.com/file/d/0B4RoYkI5yaxbLU5XdzNwaXBCTWs/view?usp=sharing – dgouder

+0

こんにちは@dgouderです。私はあなたの質問はこれと非常に似ていると信じていますhttp://stackoverflow.com/questions/36880103/creating-horizo​​ntal-bar-plot-with-time-series-data-in-python/36992409#36992409。どうぞ、サンプルデータセットを提供できますか? –

答えて

1

最初のデータセットは異なりますが、上記でコメントしたリンクを使用する方法もあります。手順は、各列に割り当てられた数値で構成され、以下のように、NaNにすることによってゼロに変更:

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.read_csv("testdata.txt",parse_dates=0,index_col=0) 
df = df.applymap(lambda x:x if x else pd.np.nan) 
for n, col in enumerate(df.columns): df[col] = df[col]*n 
df.plot(lw=10,legend=False) 
plt.yticks(pd.np.arange(len(df.columns)), df.columns) 
plt.tight_layout() 
plt.show() 

結果データフレームがある:

     A B C D E 
time         
2016-05-05 00:00:00 0 NaN NaN NaN 4 
2016-05-05 00:05:00 0 NaN NaN 3.0 4 
2016-05-05 00:10:00 0 NaN NaN 3.0 4 
2016-05-05 00:15:00 0 NaN NaN 3.0 4 

プロット:

enter image description here

0

あなたが使用できるものは、matplotlibの破損した棒グラフです。ドキュメントはhereです。

私がテストした簡単なバージョンは次のとおりです。 残念ながら、残念ながら、私は操作を資本でベクトル化する方法を見つけられませんでした。

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

df = pd.DataFrame() 
df['qqq'] = [1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,0,0,0] 
df['dia'] = [0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1] 

ones = [] 
for col in df.columns: 
    one = df[df[col].diff() != 0][:][col] 
    one = one[one == 1] 
    ones.append(one) 

hranges = [] 
for col in df.columns: 
    diff = df[df[col].diff() != 0] 
    spread = pd.DataFrame(diff[col].index, columns=[col]) 
    spread = spread.set_value(len(spread), col, len(df[col].index)) 
    spread = spread.diff(periods=-1).fillna(spread[pd.isnull(spread.diff()) == True])*-1 
    spread = spread.drop(spread.index[-1]) 
    re_index = pd.DataFrame(df[df[col].diff() != 0][:][col].tolist()) 
    re_index = re_index[re_index[0] == 0] 
    hranges.append(spread.drop(re_index[re_index[0] == 0].index)) 
    hranges[j].columns = ['width'] 
    hranges[j]['hval'] = ones[j].index.tolist() 
    cols = hranges[j].columns 
    cols = cols[-1:] | cols [:-1] 
    hranges[j] = hranges[j][cols] 
    j += 1 

vals = [] 
for j in range(len(hranges)):  
    val = [(hranges[j].hval[i], hranges[j].width[i]) for i in hranges[j].index] 
    vals.append(val) 

fig, ax = plt.subplots() 
j = 0 
for col in df.columns: 
    ax.broken_barh(vals[j], ((j+1)*10,10)) 
    j += 1 
ax.set_yticks([((k+1) * 10) + 5 for k in range(j)]) 
ax.set_yticklabels(df.columns)  
plt.show() 

結果は次のようになります。

enter image description here

明らかにあなたの例は、x軸の時間値を持っているでしょうが、私はあなたがそれを把握できたと想像します。

関連する問題