"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como codificar gráficos de dispersão por cores por valores de coluna em Python?

Como codificar gráficos de dispersão por cores por valores de coluna em Python?

Publicado em 2024-11-09
Navegar:290

How to Color-Code Scatter Plots by Column Values in Python?

Gráficos de dispersão de codificação de cores por valores de coluna em Python

Na visualização de dados, atribuir cores a diferentes categorias pode aumentar a clareza e revelar padrões. Essa funcionalidade está prontamente disponível no ggplot2 para R, mas como podemos conseguir o mesmo em Python usando pandas e matplotlib?

Atualização: Seaborn Enhancements

Desde a resposta original , Seaborn emergiu como uma biblioteca poderosa para a criação de enredos informativos e visualmente atraentes. Suas atualizações recentes oferecem funções convenientes para colorir gráficos de dispersão com base nos valores das colunas:

  • Usando seaborn.relplot: Esta função de alto nível combina aspectos de matplotlib.pyplot.scatter e Seaborn FacetaGrid. Ele lida automaticamente com a codificação de cores com base em parâmetros de matiz e ordem especificados. FacetGrid e personalize cores com base no matiz.
  • Abordagem Original Pandas e Matplotlib

Para aqueles que buscam uma abordagem direta com Matplotlib, aqui está uma função personalizada que atribui cores para pontos com base em uma coluna categórica:

import matplotlib.pyplot as plt importar pandas como pd def dfScatter(df, xcol='Altura', ycol='Peso', catcol='Sexo'): fig, machado = plt.subplots() categorias = np.unique(df[catcol]) cores = np.linspace(0, 1, len(categorias)) colordict = dict(zip(categorias, cores)) df["Cor"] = df[catcol].apply(lambda x: colordict[x]) ax.scatter(df[xcol], df[ycol], c=df["Cor"]) return fig

Esta função cria um dicionário de cores a partir de valores de categoria exclusivos e atribui cores correspondentes aos pontos de dados. O gráfico de dispersão é então gerado com pontos codificados por cores.
import matplotlib.pyplot as plt
import pandas as pd

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
Exemplo

Usando o dataframe de amostra fornecido:

df = pd. DataFrame({'Altura': np.append(np.random.normal(6, 0,25, tamanho=5), np.random.normal(5,4, 0,25, tamanho=5)), 'Peso': np.append(np.random.normal(180, 20, tamanho=5), np.random.normal(140, 20, tamanho=5)), 'Gênero': ["Masculino", "Masculino", "Masculino", "Masculino", "Masculino", "Female", "Female", "Female", "Female", "Female"]})

Chamando a função dfScatter com o dataframe:
import matplotlib.pyplot as plt
import pandas as pd

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
fig = dfScatter(df ) fig.savefig('color_coded_scatterplot.png')

Produz um gráfico de dispersão onde os pontos são coloridos por gênero:
fig = dfScatter(df)
fig.savefig('color_coded_scatterplot.png')

Seaborn's advanced recursos e a função dfScatter personalizada fornecem opções flexíveis para adicionar codificação de cores a gráficos de dispersão em Python, tornando a visualização de dados mais informativa e visualmente envolvente.

Declaração de lançamento Este artigo foi reimpresso em: 1729320380 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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