我已經通過手動設定我的 xticks 設法繞過了這個問題。但是,我想了解這個“問題”背后的原因。
我有以下資料:

如您所見,我已經計算了我們每周廣告系列的平均購物籃。但是,如果我嘗試繪制它,前幾個日期會更改。
plt.figure(figsize=(16,6))
plt.plot(pd.to_datetime(avg_basket_pbm["trunc_usage_date"]), avg_basket_pbm["average_base_spend"], label="Monday Coupon Users")
plt.plot(pd.to_datetime(avg_basket_reg["TRUNC(EV.EFFECTIVE_DAY,'DD')"]), avg_basket_reg["average_base_spend"], label="Regular Coupon Users")
# plt.xticks(pd.to_datetime(avg_basket_pbm["trunc_usage_date"],format="%Y-%m-%d"), labels = avg_basket_pbm["trunc_usage_date"])
plt.title("Average Basket", weight = "bold", fontsize=14)
plt.legend()

這似乎只影響前幾個日期,后者保持不變。
可重現的例子:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
dates = ['2021-10-11 00:00:00',
'2021-10-18 00:00:00',
'2021-10-25 00:00:00',
'2021-11-01 00:00:00',
'2021-11-08 00:00:00',
'2021-11-15 00:00:00',
'2021-11-22 00:00:00']
stamps = pd.to_datetime(dates)
vals = np.random.random(7)
plt.figure(figsize=(14,6))
plt.plot(stamps, vals)
uj5u.com熱心網友回復:
Matplotlib 不會嘗試將刻度與您的資料完全匹配,因為在大多數情況下這看起來很糟糕。為了說明這一點,我修改了您的示例并僅添加了四個資料點并強制 xticks 匹配資料:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
dates = ['2021-10-11 00:00:00',
'2021-10-18 00:00:00',
'2021-10-25 00:00:00',
'2021-11-01 00:00:00',
'2021-11-08 00:00:00',
'2021-11-09 00:00:00', # added
'2021-11-10 00:00:00', # added
'2021-11-11 00:00:00', # added
'2021-11-12 00:00:00', # added
'2021-11-15 00:00:00',
'2021-11-22 00:00:00']
stamps = pd.to_datetime(dates)
vals = np.random.random(11)
plt.figure(figsize=(14,6))
plt.xticks(stamps, labels = dates)
plt.plot(stamps, vals)

刻度標簽重疊且不可讀。如果您注釋掉該plt.xticks行,則允許 matplotlib “做自己的事情”并將刻度線放在它認為“合理”的地方。在這種特定情況下,它似乎是“每周,從每月 1 號開始”。如果您對您認為“合理”的刻度線位置有不同的意見/演算法,那么您必須手動放置它們。
uj5u.com熱心網友回復:
- 繪制 a 的正確方法
pandas.DataFrame是 with
- 指定
xticks=df1.date1或xticks=df2.date2,來自一個 DataFrame 的所有日期將位于 x 軸上。- 兩個 DataFrame 中的日期不一樣。
ax = df1.plot(x='date1', marker='o', figsize=(12, 5)) df2.plot(x='date2', marker='o', ax=ax, xticks=df1.date1, rot=90, grid=True) ax.set_title("Average Basket", weight="bold", fontsize=14)
- 組合來自兩個 DataFrame 的日期以用作
xticks
# combine the dates to be used for xticks xticks = df1.date1.tolist() df2.date2.tolist() # plot the dataframe ax = df1.plot(x='date1', marker='o', figsize=(12, 5)) df2.plot(x='date2', marker='o', ax=ax, xticks=xticks, rot=90, grid=True) ax.set_title("Average Basket", weight="bold", fontsize=14)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371227.html標籤:Python 熊猫 matplotlib 时间序列
- 指定
