Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tick frequency when using seaborn/matplotlib boxplot

Tags:

I am plotting with seaborn a series of boxplots with

sns.boxplot(full_array) 

where full_array contains 200 arrays. Therefore, I have 200 boxplots and ticks on the x-axis from 0 to 200.

The xticks are too close to each other and I would like to show only some of them, for instance, a labeled xtick every 20, or so.

I tried several solutions as those mentioned here but they did not work.

Every time I sample the xticks, I get wrong labels for the ticks, as they get numbered from 0 to N, with unit spacing.

For instance, with the line ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) I get a labelled xtick every 20 but the labels are 1, 2, 3, 4 instead of 20, 40, 60, 80...

Thanks to anyone who's so kind to help.

like image 454
Michele Avatar asked Jun 13 '17 12:06

Michele


People also ask

How do you adjust the number of ticks in Seaborn plots?

set_yticks() functions in axes module of matplotlib library are used to Set the ticks with a list of ticks on X-axis and Y-axis respectively. Parameters: ticks: This parameter is the list of x-axis/y-axis tick locations. minor: This parameter is used whether set major ticks or to set minor ticks.

How do you change Yticks in MatPlotLib?

To create a list of ticks, we will use numpy. arange(start, stop, step) with start as the starting value for the ticks, stop as the non-inclusive ending value and step as the integer space between ticks. Below example illustrate the matplotlib. pyplot.

How do I get rid of Xticks in Seaborn?

Use tick_params() for changing the appearance of ticks and tick labels. Use left=false and bottom=false to remove the tick marks.


1 Answers

The seaborn boxplot uses a FixedLocator and a FixedFormatter, i.e.

print ax.xaxis.get_major_locator() print ax.xaxis.get_major_formatter() 

prints

<matplotlib.ticker.FixedLocator object at 0x000000001FE0D668> <matplotlib.ticker.FixedFormatter object at 0x000000001FD67B00> 

It's therefore not sufficient to set the locator to a MultipleLocator since the ticks' values would still be set by the fixed formatter.

Instead you would want to set a ScalarFormatter, which sets the ticklabels to correspond to the numbers at their position.

import matplotlib.pyplot as plt import matplotlib.ticker as ticker import seaborn.apionly as sns import numpy as np  ax = sns.boxplot(data = np.random.rand(20,30))  ax.xaxis.set_major_locator(ticker.MultipleLocator(5)) ax.xaxis.set_major_formatter(ticker.ScalarFormatter())  plt.show() 

enter image description here

like image 65
ImportanceOfBeingErnest Avatar answered Sep 28 '22 07:09

ImportanceOfBeingErnest