Отформатируйте метки оси X в швы, как на графике панд по умолчанию - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь установить для своих графиков символы, похожие на формат по умолчанию для фрейма данных pandas.

Я пытался установить с помощью функций plt.set_xticklabels, но безуспешно.

fig, axarr = plt.subplots(len(stations), 2, figsize=(10,11))
plt.subplots_adjust(bottom=0.05)
hPc3.plot(use_index=True, subplots=True, ax=axarr[0:len(stations),0], 
for i in range(0,len(axarr)):
    axarr[i,0].set_ylabel('$nT$')
axarr[len(stations)-1,0].set_xlabel('$(UT)$')
for i in range(0,len(axarr)):
    plot4 = axarr[i,1].pcolormesh(tti, wPc3_period[i], np.log10(abs(wPc3_power[i])), cmap = 'jet')
    axarr[i,1].set_yscale('log', basey=2, subsy=None)
    axarr[i,1].set_xlabel('$(UT)$')
    axarr[i,1].set_ylabel('$Period$ $(s)$')
    axarr[i,1].set_ylim([np.min(wPc3_period[i]), np.max(wPc3_period[i])])
    axarr[i,1].invert_yaxis()
    axarr[i,1].plot(tti, te_coi3, 'w')
    cbar_coord = replace_at_index1(make_axes_locatable(axarr[i,1]).get_position(), [0,2], [0.92, 0.01])
    cbar_ax = fig.add_axes(cbar_coord)
    cbar = plt.colorbar(plot4, cax=cbar_ax,  boundaries=np.linspace(-10, 10, 512),
                    ticks=[-10, -5, 0, 5, 10], label='$log_{2}$')
    cbar.set_clim([-10,5])

на левой панели отображается метка по умолчанию для графика фрейма данных pandas. Правая панель как моё форматирование

the left panel show the default label of pandas data frame plot. The right panel is how is my formatation

1 Ответ

0 голосов
/ 17 мая 2018

Matplotlib date api предоставляет множество удобных функций и классов для представления и преобразования данных даты и времени.

Вы можете воспроизвести стиль pandas, используя простую комбинацию DateFormatter, DayLocator и HourLocator. Вот пример для фиктивного набора данных, учитывая, что вы не предоставили полный рабочий код, но его нетрудно адаптировать к вашему варианту использования.

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

# create toy dataset
index = pd.date_range("2018-05-25 00:00:00", "2018-05-26 00:00:00", freq = "1min")
series = pd.Series(np.random.random(len(index)), index=index)
x = index.to_pydatetime()
y = series

# plot
fig = plt.figure(figsize=(5,1))
ax = fig.gca()

ax.xaxis.set_minor_formatter(mdates.DateFormatter("%H:%M"))
ax.xaxis.set_minor_locator(mdates.HourLocator(interval=3))
ax.tick_params(which='minor', labelrotation=30)

ax.xaxis.set_major_formatter(mdates.DateFormatter("%d-%b"))
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.tick_params(which='major', pad=10, labelrotation=30)

ax.set_xlim(x.min(), x.max())

ax.plot(x, y)
plt.show()

enter image description here

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