Форматирование меток даты с использованием Seaborn FacetGrid - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу создать фацетную сетку с именами переменных в качестве столбцов и отделами в виде строк, а каждая небольшая диаграмма представляет собой диаграмму рассеяния с y = значением и x = датой

Мои данные являются своего рода например: import pandas как pd import numpy как np import seaborn as sns import matplotlib.pyplot as plt из datetime import datetime import matplotlib.dates as mdates импорт случайный

datelist = pd.date_range(start="march 1 2020", end="may 20 2020", freq="w").tolist()
varlist = ["x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y", "z"]
deptlist = ["a", "a", "b", "a", "a", "b", "a", "a", "b", "a", "a", "b"]
vallist =  random.sample(range(10, 30), 12)
df = pd.DataFrame({'date': datelist, 'value': vallist, 'variable': varlist, 'department': deptlist})

Я хочу сделать сетка фасетов с именами переменных в качестве столбцов и отделами в виде строк, а каждая небольшая диаграмма представляет собой диаграмму рассеяния с y = значением и x = датой

Вот что я имею до сих пор. Это почти работает, за исключением того, что я хочу видеть даты внизу, которые не сжимаются вместе, поэтому я хотел бы видеть "3/1 4/1 5/1" вместо полных дат. Но я не могу понять, как его отформатировать.

plt.style.use('seaborn-darkgrid')
xformatter = mdates.DateFormatter("%m-%d")
g = sns.FacetGrid(df2, row="department", col="variable", sharey='row')
g = g.map(plt.plot, "date", "value", marker='o', markersize=0.7)
datelist = pd.date_range(start="march 1 2020", end="june 1 2020", freq="MS").tolist()
g.set(xticks=datelist)

enter image description here

Это довольно близко, но обратите внимание на даты вдоль нижней оси x , Они все сжаты вместе. Вот почему я пытался использовать специальный форматер даты, но не смог заставить его работать. На самом деле мне бы хотелось, чтобы каждая дата отображалась как mon-dd, и я могу контролировать, сколько там отметок отмечается галочкой.

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете получить доступ к объекту Оси FacetGrid как g.axes (двумерный массив). Вы можете перебрать этот массив и изменить свойства всех осей, но в вашем случае у вас есть sharex=True (по умолчанию), это означает, что изменение оси X одного из вспомогательных графиков изменит одновременно все вспомогательные участки .

g = sns.FacetGrid(df, row="department", col="variable", sharey='row')
g = g.map(plt.plot, "date", "value", marker='o', markersize=0.7)

xformatter = mdates.DateFormatter("%m/%d")
g.axes[0,0].xaxis.set_major_formatter(xformatter)

enter image description here

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