Метки тиков перекрывают гистограмму панд - PullRequest
0 голосов
/ 04 июня 2018

TL; DR: В пандах, как мне построить гистограмму так, чтобы ее метки на оси x были похожи на метки линейного графика?

Я сделал временной ряд равномерноинтервалы (по одному элементу в день), и можно изобразить их так просто:

intensity[350:450].plot()
plt.show()

default line chart with nice tick labels

Но переход на гистограмму создал этот беспорядок:

intensity[350:450].plot(kind = 'bar')
plt.show()

bar chart with overlapping tick labels

Затем я создал гистограмму напрямую, используя matplotlib, но в ней отсутствует симпатичный формататор меток меток временных рядов дат для панд:

def bar_chart(series):
    fig, ax = plt.subplots(1)
    ax.bar(series.index, series)
    fig.autofmt_xdate()
    plt.show()

bar_chart(intensity[350:450])

bar chart with arbitrarily placed tick labels

Вот выдержка из серии интенсивности:

intensity[390:400]

2017-03-07    3
2017-03-08    0
2017-03-09    3
2017-03-10    0
2017-03-11    0
2017-03-12    0
2017-03-13    2
2017-03-14    0
2017-03-15    3
2017-03-16    0
Freq: D, dtype: int64 

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

1 Ответ

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

Pandas bar blot являются категориальными участками.Они создают один тик (+ метка) для каждой категории.Если категории являются датами, и эти даты являются непрерывными, можно стремиться к тому, чтобы определенные даты были пропущены, например, построить только каждую пятую категорию,

ax = series.plot(kind="bar")
ax.set_xticklabels([t if not i%5 else "" for i,t in enumerate(ax.get_xticklabels())])

enter image description here

Напротив, гистограммы matplotlib - это цифровые графики.Здесь может быть использован полезный тикер, который помечает даты еженедельно, ежемесячно или что угодно.

Кроме того, matplotlib позволяет полностью контролировать позиции тиков и их метки.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import dates

index = pd.date_range("2018-01-26", "2018-05-05")
series = pd.Series(np.random.rayleigh(size=100), index=index)

plt.bar(series.index, series.values)
plt.gca().xaxis.set_major_locator(dates.MonthLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter("%b\n%Y"))
plt.show()

enter image description here

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