Как выровнять разные графики xticks / figure size (один график из matplotlib, другой из seaborn) - PullRequest
0 голосов
/ 08 мая 2020

Я написал пример:

import pandas as pd
import numpy as np
import seaborn as sns

np.random.seed(42)
feature = pd.DataFrame({'ds': pd.date_range('20200101', periods=100*24, freq='H'), 
                        'y': np.random.randint(0,20, 100*24) , 
                        'yhat': np.random.randint(0,20, 100*24) , 
                        'price': np.random.choice([6600, 7000, 5500, 7800], 100*24)})

sns.set(rc={'figure.figsize':(16,16),'font.family': 'WenQuanYi Micro Hei'})
f = plt.figure()

a = feature.set_index('ds').resample('D').sum()

ax1 = plt.subplot(2,1,1)
plt.title('销量')

x_dates = feature['ds'].dt.strftime('%Y-%m-%d').sort_values().unique()

plt.plot(x_dates, a['y'], label='实际销量')
plt.plot(x_dates, a['yhat'], label='预测销量')

ax1.set_xticks(np.arange(x_dates.shape[0])[::2])
ax1.set_xticklabels(labels=x_dates[::2], rotation=45, ha='right')


plt.legend()

ax3 = plt.subplot(2,1,2)
plt.title('价格箱型图')
date_feature = feature.assign(date=lambda df:df.ds.dt.date)
sns.boxplot(x=date_feature['date'], y=date_feature['price'], ax=ax3)
ax3.set_xticks(np.arange(x_dates.shape[0])[::2])
ax3.set_xticklabels(labels=x_dates[::2], rotation=45, ha='right')
print(1)

Вы можете видеть изображение ниже, в графике matplotlib есть пробелы, как мне сделать так, чтобы xtick на каждом графике выровнялся по вертикали?

enter image description here

PS: измените plt.plot на sns.lineplot, действуйте так же.

1 Ответ

1 голос
/ 08 мая 2020

Я нашел решение xlim

Линейный график на самом деле не учитывает ввод x, это добавит некоторое значение. Итак, что мне нужно сделать, это добавить одинаковые xlim для каждого графика:

plt.xlim(-2, x_dates.shape[0] +2 )

Затем xtcks выравниваются по вертикали (хотя не выравниваются по графику):

enter image description here

...