Увеличить размер участков в pandas python - PullRequest
1 голос
/ 06 января 2020

результат

   year  Month  Min_days    Avg_days    Median_days     Count MonthName-Year
    2015   1          9        12.56          10         4     2015-Jan
    2015   2          10       13.67          9          3     2015-Feb
   ........................................................
    2016   12       12       15.788           19          2    2016-Dec
    and so on...

I wi sh для создания линейного графика, на котором отображаются min_days, avg_days, median_days, подсчет по месяцам и годам. Код, используемый для этого (который отлично работает):

import matplotlib.pyplot as plt
result=freq_start_month_year_to_date_1(df,'Jan','2015','Dec','2019')

#Visualisations

fig, ax = plt.subplots()
for col in ["Min_days", "Median_days", "Count",'Target_days_before_customer_dead']:
    ax.plot(result["Month Name-Year"], result[col], label=col)
ax.legend(loc="best")
ax.tick_params(axis="x", rotation=30)

Я получаю сюжет. Единственная проблема заключается в том, что ось x слишком переполнена , и все значения 2015-январь, 2015-февраль и c перекрываются, поэтому ничего не читается по оси x , это выглядит как черный скрабблинг ... Я не могу увеличить размер графика.

Я пробовал код ниже, но это тоже не сработало

fig, ax = plt.subplots(2,2, figsize=(20,20))

Использование В приведенном выше коде я получил 4 пустых субплощадки

1 Ответ

1 голос
/ 06 января 2020

Проблема в том, что вы предварительно отформатировали свою ось X как строку и, таким образом, лишили matplotlib возможности применить свой собственный форматер. matplotlib попытался втиснуть все строки в ось, чтобы вы никогда не смогли сделать ее достаточно широкой, чтобы вместить все метки.

Создайте новый столбец даты и используйте его для формирования оси x:

from matplotlib import dates as mdates

# The new column to be used as x axis
result['Date'] = pd.to_datetime(result[['Year', 'Month']].assign(Day=1))

# Plot the data
fig, ax = plt.subplots(figsize=(10, 2))
for col in ['Min_days', 'Median_days', 'Count', 'Target_days_before_customer_dead']:
    ax.plot(result['Date'], result[col], label=col)

years = mdates.YearLocator()    # only print label for the years
months = mdates.MonthLocator()  # mark months as ticks
years_fmt = mdates.DateFormatter('%Y')

ax.xaxis.set_major_locator(years)
ax.xaxis.set_minor_locator(months)
ax.xaxis.set_major_formatter(years_fmt)

ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

Результат (со случайными данными):

matplotlib result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...