Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Settings for timedata in seaborn FacetGrid plots

I want to plot data monthly and show year label once per each year. Here is the data:

timedates = ['2013-01-01', '2013-02-01', '2013-03-01', '2013-04-01', '2013-05-01', '2013-06-01', '2013-07-01', 
         '2013-08-01', '2013-09-01', '2013-10-01', '2013-11-01', '2013-12-01', '2014-01-01', '2014-02-01', 
         '2014-03-01', '2014-04-01', '2014-05-01', '2014-06-01', '2014-07-01', '2014-08-01', '2014-09-01', 
         '2014-10-01', '2014-11-01', '2014-12-01']

timedates = pd.to_datetime(timedates)

amount = [38870, 42501, 44855, 44504, 41194, 42087, 43687, 42347, 45098, 43783, 47275, 49767, 
      39502, 35951, 47059, 47639, 44236, 40826, 46087, 41462, 38384, 41452, 36811, 37943]

types = ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 
     'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']

df_x = pd.DataFrame({'timedates': timedates, 'amount': amount, 'types': types})

I found out how to do that with matplotlib

plt.style.use('ggplot')

fig, ax = plt.subplots()
ax.plot_date(df_x.timedates, df_x.amount, 'v-')
ax.xaxis.set_minor_locator(md.MonthLocator()) 
ax.xaxis.set_minor_formatter(md.DateFormatter('%m'))

ax.xaxis.grid(True, which="minor")
ax.yaxis.grid()

ax.xaxis.set_major_locator(md.YearLocator())
ax.xaxis.set_major_formatter(md.DateFormatter('\n\n%Y'))
plt.show()

Plot data monthly with labels

Now I move to seaborn to take into account different types of data. Is it possible to have the same style of ticks using seaborn FacetGrid?

g = sns.FacetGrid(df_x, hue='types', size=8, aspect=1.5)
g.map(sns.pointplot, 'timedates', 'amount')
plt.show()

Seaborn timedata ticks When I try to apply ticks formatting - they just disappear.

like image 967
Katerina Avatar asked Aug 24 '16 08:08

Katerina


People also ask

What does FacetGrid do in Seaborn?

FacetGrid object takes a dataframe as input and the names of the variables that will form the row, column, or hue dimensions of the grid. The variables should be categorical and the data at each level of the variable will be used for a facet along that axis.

Which parameter of the Seaborn method Lmplot () allows for wrapping column variables into multiple rows?

col_wrap : (optional) This parameter is of int type, “Wrap” the column variable at this width, so that the column facets span multiple rows.

How do you plot multiple variables in Seaborn?

In Seaborn, we will plot multiple graphs in a single window in two ways. First with the help of Facetgrid() function and other by implicit with the help of matplotlib. data: Tidy dataframe where each column is a variable and each row is an observation.

What is Factorplot in Seaborn?

Factor Plot is used to draw a different types of categorical plot . The default plot that is shown is a point plot, but we can plot other seaborn categorical plots by using of kind parameter, like box plots, violin plots, bar plots, or strip plots.


1 Answers

You could format the xticks to just include the month and year of the datetime object and get a pointplot with xticks corresponding to the position of scatter plot points.

df['timedates'] = df['timedates'].map(lambda x: x.strftime('%Y-%m'))


def plot(x, y, data=None, label=None, **kwargs):
    sns.pointplot(x, y, data=data, label=label, **kwargs)

g = sns.FacetGrid(df, hue='types', size=8, aspect=1.5)
g.map_dataframe(plot, 'timedates', 'amount')
plt.show()

Image

like image 88
Nickil Maveli Avatar answered Oct 04 '22 04:10

Nickil Maveli