web-dev-qa-db-fra.com

fréquence des ticks lors de l'utilisation de boxplot seaborn / matplotlib

Je trace avec Seaborn une série de boxplots avec

sns.boxplot(full_array)

full_array contient 200 tableaux. Par conséquent, j'ai 200 boîtes à moustaches et des graduations sur l'axe des x de 0 à 200.

Les xticks sont trop proches les uns des autres et je voudrais en montrer seulement certains, par exemple, un xtick étiqueté tous les 20 environ.

J'ai essayé plusieurs solutions comme celles mentionnées ici mais elles n'ont pas fonctionné.

Chaque fois que j'échantillonne les xticks, je reçois de mauvaises étiquettes pour les ticks, car ils sont numérotés de 0 à N, avec un espacement d'unité.

Par exemple, avec la ligne ax.xaxis.set_major_locator(ticker.MultipleLocator(20)) j'obtiens un xtick étiqueté tous les 20 mais les étiquettes sont 1, 2, 3, 4 au lieu de 20, 40, 60, 80 ...

Merci à tous ceux qui sont si gentils d'aider.

12
Michele

Le boxplot seaborn utilise un FixedLocator et un FixedFormatter, c'est-à-dire.

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

impressions

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

Il ne suffit donc pas de définir le localisateur sur MultipleLocator car les valeurs des ticks seraient toujours définies par le formateur fixe.

Au lieu de cela, vous souhaitez définir un ScalarFormatter, qui définit les ticklabels pour correspondre aux numéros à leur 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

11