Python 共享x轴且数据不完整的熊猫

Python 共享x轴且数据不完整的熊猫,python,pandas,matplotlib,Python,Pandas,Matplotlib,我在使用Pandas制作排名图时遇到了麻烦,因为其中一些数据可能是新的,并且只有介于数据日期范围中间的数据 下面是一些测试数据和显示问题的图像。首先,X标签似乎是从最后一次调用plot得到的,其次,第一天缺少数据的数据是在我想要的地方左1天绘制的 如何修复此绘图,使“最近”线正确移动,并且X轴上的日期也正确 import pandas as pd import matplotlib.pyplot as plt from io import StringIO from matplotlib.tic

我在使用Pandas制作排名图时遇到了麻烦,因为其中一些数据可能是新的,并且只有介于数据日期范围中间的数据

下面是一些测试数据和显示问题的图像。首先,X标签似乎是从最后一次调用plot得到的,其次,第一天缺少数据的数据是在我想要的地方左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()
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
从io导入StringIO
从matplotlib.ticker导入MaxNLocator
TESTDATA=StringIO(“”)
2017-10-10 A 30
2017-10-10 B 40
2017年10月10日C 60
2017-10-10D20
2017年10月11日A 60
2017年10月11日B 20
2017年10月11日C 30
2017年10月11日第10天
2017年10月11日最近50
2017年10月12日A 40
2017-10-12 B 20
2017-10-12 C 17
2017年10月12日第15天
2017年10月12日最近45
""")
#最近的
headers=['Date'、'Name'、'Downloads']
df=pd.read\u csv(TESTDATA,sep='\t',name=headers)
df[“Ranking”]=df.groupby([“Date”])[“Downloads”].rank(method=“first”,升序=False)
打印(df)
df.set_索引('Date',inplace=True)
图,ax=plt.子批次(图大小=(10,5),sharex=True)
标签=[]
对于键,df.groupby(['Name'])中的grp:
#grp=grp[grp.Ranking如果您想使用

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