web-dev-qa-db-fra.com

Ajouter des étiquettes x et y à un complot pandas

Supposons que le code suivant trace quelque chose de très simple avec des pandas:

import pandas as pd
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10, 
         title='Video streaming dropout by category')

Output

Comment définir facilement des étiquettes x et y tout en préservant ma capacité à utiliser des cartes de couleurs spécifiques? J'ai remarqué que l'encapsuleur plot() pour pandas _ DataFrames ne prend aucun paramètre spécifique pour cela.

145
Everaldo Aguiar

La fonction df.plot() renvoie un objet matplotlib.axes.AxesSubplot. Vous pouvez définir les étiquettes sur cet objet.

In [4]: ax = df2.plot(lw=2, colormap='jet', marker='.', markersize=10, title='Video streaming dropout by category')

In [6]: ax.set_xlabel("x label")
Out[6]: <matplotlib.text.Text at 0x10e0af2d0>

In [7]: ax.set_ylabel("y label")
Out[7]: <matplotlib.text.Text at 0x10e0ba1d0>

enter image description here

Ou, plus succinctement: ax.set(xlabel="x label", ylabel="y label").

Sinon, l'étiquette de l'axe des x de l'index est automatiquement définie sur le nom de l'index, le cas échéant. alors df2.index.name = 'x label' fonctionnerait aussi.

258
TomAugspurger

Vous pouvez utiliser le faire comme ceci:

import matplotlib.pyplot as plt 
import pandas as pd

plt.figure()
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
df2.plot(lw=2, colormap='jet', marker='.', markersize=10,
         title='Video streaming dropout by category')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.show()

Évidemment, vous devez remplacer les chaînes "xlabel" et "ylabel" par ce que vous voulez qu'elles soient.

32
jesukumar

Si vous étiquetez les colonnes et l’index de votre DataFrame, pandas fournira automatiquement les étiquettes appropriées:

import pandas as pd
values = [[1, 2], [2, 5]]
df = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                  index=['Index 1', 'Index 2'])
df.columns.name = 'Type'
df.index.name = 'Index'
df.plot(lw=2, colormap='jet', marker='.', markersize=10, 
        title='Video streaming dropout by category')

enter image description here

Dans ce cas, vous devrez toujours fournir les étiquettes y manuellement (par exemple, via plt.ylabel, comme indiqué dans les autres réponses).

28
shoyer

Il est possible de définir les deux étiquettes avec la fonction axis.set. Cherchez l'exemple:

import pandas as pd
import matplotlib.pyplot as plt
values = [[1,2], [2,5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], index=['Index 1','Index 2'])
ax = df2.plot(lw=2,colormap='jet',marker='.',markersize=10,title='Video streaming dropout by category')
# set labels for both axes
ax.set(xlabel='x axis', ylabel='y axis')
plt.show()

enter image description here

16
Serenity

Pour les cas où vous utilisez pandas.DataFrame.hist:

plt = df.Column_A.hist(bins=10)

Notez que vous obtenez un tableau de parcelles, plutôt que d'une parcelle. Ainsi, pour définir le label x, vous devrez faire quelque chose comme ceci

plt[0][0].set_xlabel("column A")
12
Selah

pandas utilise matplotlib pour les tracés de base de données. Ainsi, si vous utilisez pandas pour un tracé de base, vous pouvez utiliser matplotlib pour la personnalisation du tracé. Cependant, je propose ici une méthode alternative utilisant seaborn, qui permet une plus grande personnalisation du tracé sans entrer dans le niveau de base de matplotlib.

Code de travail:

import pandas as pd
import seaborn as sns
values = [[1, 2], [2, 5]]
df2 = pd.DataFrame(values, columns=['Type A', 'Type B'], 
                   index=['Index 1', 'Index 2'])
ax= sns.lineplot(data=df2, markers= True)
ax.set(xlabel='xlabel', ylabel='ylabel', title='Video streaming dropout by category') 

enter image description here

1
Dr. Arslan