Colorindo gráficos de dispersão por valores de coluna
Em Python, a biblioteca Matplotlib fornece vários meios de personalizar a estética do gráfico de dispersão. Uma tarefa comum é atribuir cores com base em valores em uma coluna específica.
Seaborn Integration
Uma solução é aproveitar a biblioteca Seaborn, que se baseia no Matplotlib. Seaborn oferece funções de alto nível como sns.relplot e sns.FacetGrid que permitem mapear facilmente gráficos de dispersão em colunas específicas. Ao especificar o parâmetro hue, você pode colorir pontos de acordo com uma terceira coluna contendo rótulos de categoria.
import seaborn as sns
sns.relplot(data=df, x='Weight (kg)', y='Height (cm)', hue='Gender')
Diretamente usando Matplotlib
Como alternativa, você pode usar diretamente a função plt.scatter do Matplotlib para criar gráficos de dispersão e especificar cores manualmente. Isso requer a criação de um dicionário de cores personalizado que mapeia rótulos de categoria para cores.
def dfScatter(df, xcol='Height', ycol='Weight', catcol='Gender'):
fig, ax = plt.subplots()
categories = np.unique(df[catcol])
colors = np.linspace(0, 1, len(categories))
colordict = dict(zip(categories, colors))
df['Color'] = df[catcol].apply(lambda x: colordict[x])
ax.scatter(df[xcol], df[ycol], c=df.Color)
return fig
Ao chamar esta função, você pode gerar um gráfico de dispersão colorido pela coluna de categoria especificada:
df = pd.DataFrame({'Height': np.random.normal(size=10),
'Weight': np.random.normal(size=10),
'Gender': ["Male", "Male", "Unknown", "Male", "Male",
"Female", "Did not respond", "Unknown", "Female", "Female"]})
fig = dfScatter(df)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3