Как раздвинуть графики между собой по оси Y?
Есть код:
def my_plot(data, rot=45, **kwargs):
ncols = df["Location"].nunique()
nrows = df["Type"].nunique()
f, axes = plt.subplots(nrows, ncols, **kwargs)
for col, loc in enumerate(df["Location"].unique()):
d = df.query("Location == @loc")
for row, typ in enumerate(d["Type"].unique()):
(d
.set_index("Date")
.query("Type == @typ")
[["Price"]]
.plot(grid=True, rot=rot, ax=axes[row, col], title=f"{loc}, {typ}"))
plt.tight_layout()
Нужно, чтобы даты всех графиков были видны и чтобы они были равномерно и читаемо расположены по всем осям Х, а не были прибиты к их левому краю.
Насколько я понимаю, нужно что-то сделать с plt.subplots_adjust(). Я установил plt.subplots_adjust(hspace = 1, wspace=1, top=5, bottom=0.2) и настраиваю hspace. В итоге расстояние между графиками увеличивается, но видимость дат от этого не появляется.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
import matplotlib.dates as mdates
def my_plot(
df,
rot=45,
dt_fmt="%d.%m.%y",
subplots_adjust_args=dict(hspace=1, wspace=.3, top=2, bottom=0.2),
**kwargs):
ncols = df["Location"].nunique()
nrows = df["Type"].nunique()
f, axes = plt.subplots(nrows, ncols, **kwargs)
for col, loc in enumerate(df["Location"].unique()):
d = df.query("Location == @loc")
for row, typ in enumerate(d["Type"].unique()):
(d
.set_index("Date")
.query("Type == @typ")
[["Price"]]
.plot(grid=True, rot=rot, ax=axes[row, col], title=f"{loc}, {typ}", xlabel=""))
if not kwargs.get("sharex", False):
axes[row, col].xaxis.set_major_formatter(mdates.DateFormatter(dt_fmt))
plt.subplots_adjust(**subplots_adjust_args)
# plt.tight_layout()
df = (pd
.read_csv('ap-northeast-1.csv', parse_dates=["Date"],
names=['Date','Type','OS', 'Location', 'Price'])
.query("OS == 'Windows' and Type.str[0] == 'i'"))
my_plot(df, rot=0, subplots_adjust_args=dict(hspace=.7, wspace=.3, top=1.4),
dt_fmt="%d.%m", figsize=(12,9), sharex=False, sharey=False)
PS все графики на полотно не вмещаются - попробуйте поиграться с параметрами subplots_adjust_args


