Matplotlib pyplot – контроль тика и дата показа
Мой matplotlib pyplot
имеет слишком много xticks
– в настоящее время он отображается каждый год и месяц на 15-летний период, например, «2001-01», но я хочу, чтобы ось x показывала год (например, 2001).
Выход будет линейным графиком, где ось x показывает даты, а ось y показывает цены продажи и аренды.
# Defining the variables ts1 = prices['Month'] # eg. "2001-01" and so on ts2 = prices['Sale'] ts3 = prices['Rent'] # Reading '2001-01' as year and month ts1 = [dt.datetime.strptime(d,'%Y-%m').date() for d in ts1] plt.figure(figsize=(13, 9)) # Below is where it goes wrong. I don't know how to set xticks to show each year. plt.xticks(ts1, rotation='vertical') plt.xlabel('Year') plt.ylabel('Price') plt.plot(ts1, ts2, 'r-', ts1, ts3, 'b.-') plt.gcf().autofmt_xdate() plt.show()
- Матпотлиб перекрывает аннотации
- Matplotlib анимация MovieWriters не работает на Ubuntu 12.04
- Тонкий контроль над размером шрифта на графиках Seaborn для академических работ
- Графический интерфейс Matplotlib не позволяет печатать в поле сохранения?
- Как изменить цвет фона?
Вы можете сделать это с помощью plt.xticks
.
Например, здесь я установил частоту xticks для отображения каждых трех индексов. В вашем случае вы, вероятно, захотите сделать это каждые двенадцать индексов.
import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y = np.random.randn(10) plt.plot(x,y) plt.xticks(np.arange(min(x), max(x)+1, 3)) plt.show()
В вашем случае, поскольку вы используете даты, вы можете заменить аргумент второй на последнюю строку выше с чем-то вроде ts1[0::12]
, который будет выбирать каждый 12-й элемент из ts1
или np.arange(0, len(dates), 12)
который будет выбирать каждый 12-й индекс, соответствующий тикам, которые вы хотите показать.
Попробуйте полностью удалить plt.xticks
функции plt.xticks
. Затем matplotlib будет использовать функцию AutoDateLocator
по умолчанию, чтобы найти оптимальные местоположения тика.
Альтернативно, если значение по умолчанию включает несколько месяцев, которые вы не хотите, вы можете использовать matplotlib.dates.YearLocator
который заставит тики быть только годами.
Вы можете установить локатор, как показано ниже, в кратком примере:
import matplotlib.pyplot as plt import matplotlib.dates as mdate import numpy as np import datetime as dt x = [dt.datetime.utcnow() + dt.timedelta(days=i) for i in range(1000)] y = range(len(x)) plt.plot(x, y) locator = mdate.YearLocator() plt.gca().xaxis.set_major_locator(locator) plt.gcf().autofmt_xdate() plt.show()
- Почему и где python интернировал строки при выполнении `a = 'python'`, в то время как исходный код не показывает это?
- Использует ли python операции сравнения и свопинга
- matplotlib и Qt: mouse press event.key всегда отсутствует
- Как установить диапазон оси y для морского ящика?
- Сохранение 3D-графика в формате PDF с помощью Python
- Как поместить заголовок на каждую рассеянную матрицу в jupyter + pandas
- Matplotlib: как установить текущий показатель?
- ImportError: libpng16.so.16: невозможно открыть файл общих объектов: нет такого файла или каталога
- Установка `axes.linewidth` без изменения глобального dict` rcParams`
- Настройте последовательность изображений с помощью matplotlib Python
- Как выразить классы по оси тепловой карты в Сиборне