python - الباندا Dataframe تاريخ عرض مؤامرة خط على xaxis



pandas datetime (1)

بشكل عام ، فإن أدوات وقت الباندا و matplotlib غير متوافقة. لذا matplotlib.dates محاولة استخدام كائن matplotlib.dates على محور تاريخ تم إنشاؤه باستخدام الباندا في معظم الحالات.

سبب واحد هو على سبيل المثال ينظر من الوثائق

يتم تحويل كائنات datetime إلى أرقام الفاصلة العائمة التي تمثل الوقت بالأيام منذ 0001-01-01 UTC ، بالإضافة إلى 1 . على سبيل المثال ، 0001-01-01 ، 06:00 هو 1.25 ، وليس 0.25.

ومع ذلك ، ليس هذا هو الفرق الوحيد ، وبالتالي فمن المستحسن عدم خلط الباندا و matplotlib عندما يتعلق الأمر بأشياء وقت.

ومع ذلك ، هناك خيار لإخبار الباندا بعدم استخدام تنسيق التاريخ والوقت الخاص به. في هذه الحالة باستخدام علامات matplotlib.dates أمر ممكن. يمكن توجيه هذا عبر.

df.plot(x_compat=True)

نظرًا لأن الباندا لا توفر إمكانات تنسيق متطورة للتواريخ ، فيمكن للمرء استخدام matplotlib للتخطيط والتنسيق.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates

df = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
df['date'] = pd.to_datetime(df['date'])

usePandas=True
#Either use pandas
if usePandas:
    df = df.set_index('date')
    df.plot(x_compat=True)
    plt.gca().xaxis.set_major_locator(dates.DayLocator())
    plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
    plt.gca().invert_xaxis()
    plt.gcf().autofmt_xdate(rotation=0, ha="center")
# or use matplotlib
else:
    plt.plot(df["date"], df["ratio1"])
    plt.gca().xaxis.set_major_locator(dates.DayLocator())
    plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
    plt.gca().invert_xaxis()

plt.show()

قارن الكود التالي:

test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()

أضفت DateFormatter في النهاية:

test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()
ax.xaxis.set_minor_formatter(dates.DateFormatter('%d\n\n%a')) ## Added this line

المشكلة في الرسم البياني الثاني هي أنه يبدأ في 5-24 بدلاً من 5-25 . أيضا ، 5-25 من 2017 هو الخميس ليس الاثنين. ما الذي يسبب المشكلة؟ هل هذه المنطقة الزمنية مرتبطة؟ (لا أفهم لماذا يتم تكديس أرقام التاريخ أعلى بعضها البعض أيضًا)





matplotlib