Pandaların Çizimi Tüm tarih değerlerini MMM-YYYY [kopya] olarak biçimlendirilmiş x ekseninde (matplolib yalnızca birkaç değer gösterir) görüntüleyin
import os
import pandas as pd
import matplotlib.pyplot as plt
import datetime
df = pd.read_excel(DATA_DIR+"/"+file_list[0], index_col="Date")
df.head(5)

smooth = df['Pur. Rate'].rolling(window=20).mean()
smooth.plot()

Aşağıdaki grafiği alıyorum ve x ekseninde her AY-YIL için tüm tarih değerlerini çizmem gerekiyor. X ekseninde çapraz olarak biçimlendirilmiş tüm ayları ve yılları (Şubat-19) biçiminde görüntülemek istiyorum. Jpg olarak kaydedeceğim için arsanın boyutunu her şeye sığacak şekilde büyütebilirim.
X ekseninin şu değerlere sahip olmasını istiyorum: 16 Ocak, 16 Şubat, 16 Mart, 16 Nisan, 16 Mayıs, 16 Haziran, 16 Temmuz, 16 Ağustos, 16 Eylül, 16 Ekim, 16 Kasım, 16 Aralık, 17 Ocak , 17 Şubat… (Tüm bu değerleri görüntülemek istiyorum, matplotlib bunu otomatik olarak kısaltır, bundan kaçınmak istiyorum)
Yanıtlar
Yorumlarda belirtildiği gibi, hem Konumlandırıcıyı hem de Biçimlendiriciyi ayarlamanız gerekir. Bu, genel olarak grafikler için matplotlib belgelerinde ve tarih saat eksenleri için ayrı olarak açıklanmıştır . Ayrıca TickLocators'ın açıklamasına bakın . Biçimlendirme kodları Python'un strftime () ve strptime () biçim kodlarından türetilmiştir .
from matplotlib import pyplot as plt
import pandas as pd
from matplotlib.dates import MonthLocator, DateFormatter
#fake data
import numpy as np
np.random.seed(123)
n = 100
df = pd.DataFrame({"Dates": pd.date_range("20180101", periods=n, freq="10d"), "A": np.random.randint(0, 100, size=n), "B": np.random.randint(0, 100, size=n),})
df.set_index("Dates", inplace=True)
print(df)
ax = df.plot()
#defines the tick location
ax.xaxis.set_major_locator(MonthLocator())
#defines the label format
ax.xaxis.set_major_formatter(DateFormatter("%b-%y"))
ax.tick_params(axis="x", labelrotation= 90)
plt.tight_layout()
plt.show()
Örnek çıktı:

Yalnızca pandalar işlevleriyle, tarih şema dizininizi '% Y-% m-% d' yeni bir '% b-% Y' biçimiyle ve grafikteki bazı parametreleri değiştirmek için stftime () kullanabilirsiniz .
smoothdf.plot(xticks=smoothdf.index.strftime('%m-%Y').unique()).set_xticklabels(smoothdf.index.strftime('%b-%Y').unique())
xticks ile kesinlikle görmek istediğiniz etiketi belirtin.
etiket listesini değiştirmek için set_xticklabels .
Pandas arsa yerine matplotlib kullanmanızı ve tarihleri belirttiğiniz formatta çizmek için şuna benzer bir şey yapmanızı öneririm:
import matplotlib.dates as mdates
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
myFmt = mdates.DateFormatter('%b-%Y') # date formatter for matplotlib
# %b is Month abbreviated name, %Y is the Year
# ... after some code
fig, ax = plt.subplots(figsize=(15,8))
ax.xaxis.set_major_formatter(myFmt)
fig.autofmt_xdate()
# Plot data ...
ax.set_xticks("""... define how often to show the date""")
Verileri veri çerçevesinden şu gibi bir şeyle alabilirsiniz: .to_numpy()
veya .values()
.
Bu bakınız dokümantasyon için set_xticks
işlevi.