Во-первых, я настоятельно рекомендую вам использовать библиотеку pandas
и ее объект DataFrame
для обработки ваших данных.Он имеет несколько очень полезных функций, таких как read_csv
, которые сэкономят вам немного работы.
Чтобы приложение matplotlib более разумно размещало xticks, вам нужно преобразовать даты вdatetime
объектов (вместо хранения ваших дат в виде строк).
Здесь я прочитаю ваши данные с помощью панд, проанализирую даты и упорядочу по дате:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Read data
df = pd.read_csv('/path/to/test.csv', names=['date', 'freq'], parse_dates=['date'])
# Sort by date
df.sort_values(by='date', inplace=True)
Затем вы можете продолжить и построить данные (вам понадобится последняя версия панд для автоматической обработки дат):
fig, ax = plt.subplots(1, 1)
# Plot date against frequency
ax.plot(df['date'], df['freq'], 'r-o')
# Rotate the tick labels
ax.tick_params(axis='x', rotation=45)
fig.tight_layout()
Если вы только хотелиотображать даты при изменении частоты, будет работать следующее
ax.set_xticks(df.loc[np.diff(df['freq']) != 0, 'date'])
, хотя я бы не рекомендовал это (неравный интервал выглядит грязным)