2017-10-19 10 views
1

パンダを使用してデータの一部が新しくなり、データの日付範囲の半分からデータを取得するだけの場合、問題が発生します。x軸と不完全なデータを共有しているパンダ

以下は、テストデータとその問題を示すイメージです。 1つは、Xラベルはplotへの最後の呼び出しから導出されたように見えます。第2に、最初の日のデータが欠落しているデータが1日余分に残っています。

「最近の」行が正しくシフトされ、X軸の日付も正しくなるように、このプロットを修正するにはどうすればよいですか?

import pandas as pd 
import matplotlib.pyplot as plt 
from io import StringIO 
from matplotlib.ticker import MaxNLocator 

TESTDATA=StringIO(""" 
2017-10-10 A 30 
2017-10-10 B 40 
2017-10-10 C 60 
2017-10-10 D 20 

2017-10-11 A 60 
2017-10-11 B 20 
2017-10-11 C 30 
2017-10-11 D 10 
2017-10-11 Recent 50 

2017-10-12 A 40 
2017-10-12 B 20 
2017-10-12 C 17 
2017-10-12 D 15 
2017-10-12 Recent 45 
""") 

# recent 

headers = ['Date','Name','Downloads'] 
df = pd.read_csv(TESTDATA, sep='\t', names=headers) 
df["Ranking"] = df.groupby(["Date"])["Downloads"].rank(method="first", ascending=False) 
print(df) 
df.set_index('Date', inplace=True) 
fig, ax = plt.subplots(figsize=(10, 5), sharex=True) 
labels = [] 

for key, grp in df.groupby(['Name']): 
    #grp = grp[grp.Ranking <=3] 
    grp.plot(ax=ax, kind='line', y='Ranking', linewidth=4, sharex=True) 
    labels.append(key) 
lines, _ = ax.get_legend_handles_labels() 
ax.legend(lines, labels, loc='best') 
plt.gca().invert_yaxis() 
ax.xaxis 
#ax.set_ylim(4.5, 0.5) 

ax.yaxis.set_major_locator(MaxNLocator(integer=True)) 

plt.xlabel('Date') 
plt.ylabel('Rank') 
plt.title('Daily Download Ranks') 
plt.show() 

enter image description here

答えて

1

あなたはpandas

df.pivot('Date','Name','Downloads').rank(method="first", ascending=False,axis=1).plot() 

enter image description here

を使用したい場合
関連する問題