Python 共享x轴且数据不完整的熊猫
我在使用Pandas制作排名图时遇到了麻烦,因为其中一些数据可能是新的,并且只有介于数据日期范围中间的数据 下面是一些测试数据和显示问题的图像。首先,X标签似乎是从最后一次调用plot得到的,其次,第一天缺少数据的数据是在我想要的地方左1天绘制的 如何修复此绘图,使“最近”线正确移动,并且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
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()