Как я могу изменить названия групп в панд, сгруппированных по boxplot?

#python #pandas #boxplot

#python #панды #boxplot

Вопрос:

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10, 3),
                  columns=['Col1', 'Col2', 'Col3'])
df['X'] = pd.Series(['A', 'A', 'A', 'A', 'A',
                     'B', 'B', 'B', 'B', 'B'])
df['Y'] = pd.Series(['A', 'B', 'A', 'B', 'A',
                     'B', 'A', 'B', 'A', 'B'])
boxplot = df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'])

plt.show()
  

введите описание изображения здесь

Я хотел бы изменить две метки Col1 и Col2 , я попытался передать аргумент labels=['Left label','Right label'] (в основную функцию matplotlib https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html#matplotlib.pyplot.boxplot ) но безуспешно:

 boxplot = df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'], labels=['Left label','Right label'])
  

выдает ошибку:

 ValueError: Dimensions of labels and X must be compatible
  

Ответ №1:

Попробуйте это, потому что boxplot здесь возвращает NumPy массив осей, вы можете использовать каждый элемент этого NumPy массива и set_title:

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10, 3),
                  columns=['Col1', 'Col2', 'Col3'])
df['X'] = pd.Series(['A', 'A', 'A', 'A', 'A',
                     'B', 'B', 'B', 'B', 'B'])
df['Y'] = pd.Series(['A', 'B', 'A', 'B', 'A',
                     'B', 'A', 'B', 'A', 'B'])
ax = df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'])

ax[0].set_title('AAA')
ax[1].set_title('BBB')

plt.show()
  

Ответ №2:

Возможно, вы захотите попробовать:

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10, 3),
                  columns=['Col1', 'Col2', 'Col3'])
df['X'] = pd.Series(['A', 'A', 'A', 'A', 'A',
                     'B', 'B', 'B', 'B', 'B'])
df['Y'] = pd.Series(['A', 'B', 'A', 'B', 'A',
                     'B', 'A', 'B', 'A', 'B'])
axes = df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'])
titles=['Left label','Right label']
for ax, title in zip(axes,titles):
    ax.set_title(title)