Seaborn: पौराणिक कथाओं को Seaborn barplot में कैसे जोड़ा जाए

Dec 12 2020

मैं अपने seabornबार प्लॉट में किंवदंती जोड़ने की कोशिश कर रहा हूं । मैंने पहले से ही जोड़ने की कोशिश की, लेकिन यह कहते हुए त्रुटि हुई कि IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).मैंने इसे लेबल पैरामीटर देकर अन्य समाधान की कोशिश की। यहाँ कोड है

plt.figure(figsize=[15,12])                     
sns.barplot(x=customer['gender'].unique(),y=customer.groupby(['gender'])['gender'].count(),
            data=customer,label=customer['gender'].unique())
plt.legend(loc="upper left")

यह परिणाम है, यह परिणाम गलत है। बार में उनके रंग के अनुसार महिला और पुरुष का लेबल होना चाहिए। महिला और पुरुष को अलग-अलग रंगों के साथ अलग किया जाना चाहिए। मैंने पहले ही यह , यह और यह अनुसरण करने की कोशिश की , लेकिन उनमें से कोई भी मेरे लिए काम नहीं करता है। मैं इसे कैसे करूं?

जवाब

1 lys Dec 13 2020 at 07:06

यहाँ एक लाइनर है जिसे आप अपने मौजूदा कोड handlesमें किंवदंती के लिए परम सेट करके उपयोग कर सकते हैं :

patches = [matplotlib.patches.Patch(color=sns.color_palette()[i], label=t) for i,t in enumerate(t.get_text() for t in plot.get_xticklabels())]

इस तरह का उपयोग करें:

plt.legend(handles=patches, loc="upper left") 

पूरी स्क्रिप्ट:

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import random

#generate random test data
genders = ['Male', 'Female']
sampling = random.choices(genders, k=100)
customer = pd.DataFrame({'gender': sampling})

#you can change the palette and it will still work
sns.set_palette("Accent")
                  
plot = sns.barplot(x=customer['gender'].unique(),y=customer.groupby(['gender'])['gender'].count(),
            data=customer) 

patches = [matplotlib.patches.Patch(color=sns.color_palette()[i], label=t) for i,t in enumerate(t.get_text() for t in plot.get_xticklabels())]
plt.legend(handles=patches, loc="upper left")    
3 StupidWolf Dec 13 2020 at 06:54

मुझे लगता है कि आप समूह के साथ अधिक उलझी हुई चीजें हैं। आप sns.countplot का उपयोग कर सकते हैं:

customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)