Как я могу уменьшить количество xticks, отображаемых на графике matplotlib? - PullRequest
0 голосов
/ 06 июня 2018

Я строю данные временных рядов, и я хотел бы сохранить разрешение на кривых, но я хочу, чтобы на оси х отображалось меньше лет.Я проанализировал столбец «Год» как даты и превратил этот столбец в индекс информационного блока.Я чувствую, что должно быть легко уменьшить частоту меток, но все, что я пробовал, просто делало метки неточными.

DataFrame имеет форму:

print(total_df.head())

         All ages  Age 18 or older
Year                           
1978     131.0            183.0
1979     133.0            185.0
1980     138.0            191.0
1981     153.0            211.0
1982     170.0            232.0

И я использовал этот код для создания своего графика.

with sns.axes_style("whitegrid"):
    fig, ax = plt.subplots(figsize=(10,7))
    ax.plot(total_df['All ages'])
    ax.plot(total_df['Age 18 or older'])
    ax.set_title('Total Imprisonment Rates (table: p16f01)')
    ax.set_xlabel('Year')
    ax.set_ylabel('People imprisoned (per 100k US population)')
    ax.set_xticklabels(total_df.index, rotation=70)
    ax.legend()
    ax.set_ylim([0, 1.1*max([total_df['All ages'].max(), 
                             total_df['Age 18 or older'].max()])])

, который производит total imprisonment plot

1 Ответ

0 голосов
/ 06 июня 2018

Этого не должно быть.И этого не произойдет, если вы убедитесь, что ваш индекс - это действительные числа, а не строки.

Чтобы преобразовать ваш индекс в числа, используйте, например,

df.index = df.index.values.astype(int)

Затем удалите строку set_xticklabels, потому что в любом случае это будет иметь смысл, если вы также установите тики с помощью set_ticks,Это будет гарантировать, что matplotlib автоматически выберет полезные интервалы между галочками.

Полный пример:

import matplotlib.pyplot as plt
import numpy as np;np.random.seed(9)
import pandas as pd

inx = np.arange(1978,2017).astype(str)
a = np.cumsum(np.random.randn(len(inx),2), axis=0)+10
df = pd.DataFrame(a, index=inx, columns=list("AB"))

df.index = df.index.values.astype(int)

fig, ax = plt.subplots(figsize=(10,7))
ax.plot(df['A'])
ax.plot(df['B'])

ax.set_xlabel('YEAR')

ax.legend()
ax.set_ylim([0, 1.1*max([df['A'].max(), 
                         df['B'].max()])])

plt.show()

enter image description here

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