Как вручную добавить метки в matplotlib с помощью Python - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь вручную добавить labels к моему seaborn plot, но это не выводит метки

Вот как выглядит мой dataframe:

import pandas as pd
df = pd.DataFrame({'Product_ID': ['20','23', '20','24','24', '24', '24', '24','24', '20'],
 'ProductNames': ['Gem','Wil', 'Gem','Wefdem','Wefdem','Wefdem', 'Wefdem', 'Wefdem', 'Wefdem','Gem']})

Вот мой элемент для построения и добавления меток вручную

# It is a large dataframe, this is just a subset thats why I selected the first largest 10 with nlargest

order=df["Product_ID"].value_counts().nlargest(10).index

# again the actual dictionary is larger than this, this is just a shorter one of it
product_keys = {"20": "Gem", "23": "Wil", "24": "Wefdem"}

plt.figure(figsize=(20,20))
g = sns.countplot(df["Product_ID"], order=order)
g.axes.set_title("Most popular IDs", fontsize=40)
g.axes.set_xlabel("Product IDs", fontsize=30)
g.axes.set_ylabel("Frequency count", fontsize=30)
g.tick_params(labelsize=24)

plt.legend([g], [product_keys[key] for key in order]) # <--- This does not work or shows only one label

Пожалуйста, как я могу решить эту проблему?

1 Ответ

2 голосов
/ 25 марта 2020

Документы seaborn утверждают, что порядок

, hue_orderlists из строк, необязательный Order для построения категориальных уровней, в противном случае уровни выводятся из объектов данных.

Суть в том, что Seaborn взаимодействует с объектами из matplotlib. В качестве такового я рекомендую сначала изучить matplotlib, прежде чем углубляться в морскую природу. Функция countplot ищет активную фигуру, которую вы создали plt.figure. Аргумент hue ищет уровни в данных, которые находятся во втором столбце вашего фрейма данных.

Я позволил себе сделать ваш код немного более питонским c:

import pandas as pd
df = pd.DataFrame({'Product_ID': ['20','23', '20','24','24', '24', '24', '24','24', '20'],
 'ProductNames': ['Gem','Wil', 'Gem','Wefdem','Wefdem','Wefdem', 'Wefdem', 'Wefdem', 'Wefdem','Gem']})

import matplotlib.pyplot as plt,\
seaborn as sns
order=df["Product_ID"].value_counts().nlargest(10).index

# again the actual dictionary is larger than this, this is just a shorter one of it
product_keys = {"20": "Gem", "23": "Wil", "24": "Wefdem"}
fig, ax = plt.subplots()
sns.countplot(x = "Product_ID", data = df,\
              order = order, ax = ax,\
              hue = "ProductNames" )
ax.set_title("Most popular IDs", fontsize=40)
ax.set_xlabel("Product IDs", fontsize=30)
ax.set_ylabel("Frequency count", fontsize=30)
ax.axes.tick_params(labelsize=24)
fig.show()

enter image description here

...