AnswerBun.com

Definir as cores de um ponto em um gráfico scatter do matplotlib

Stack Overflow em Português Asked by Thiago Buchignani on January 4, 2022

Estou tratando dados recebidos de um arduino a partir de um arquivo .txt. No codigo, eu gero 4 arrays (X,Y,Z e F), sendo que X,Y e Z são coordenadas e F é a força do sinal.

Gostaria de plotar o gráfico 3D com a função scatter do matplotlib, mas definir a cor de cada ponto a partir dos valores de F. Por exemplo, definir um colormap e colorir cada ponto a partir do respectivo valor no vetor F.

O código abaixo faz o plot 3D das coordenadas, mas todos os pontos são da mesma cor. Como eu posso controlar a cor individualmente de cada ponto?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

def separador(string,sep):
    '''
    Função para ler os valores do Arduino e separá-los em listas
    '''
    lista = []
    k = 0
    j = k
    for i in range(len(string)):
        if string[i] in sep:
            j = i
            pal = string[k:j]
            k = j+1
            lista.append(float(pal))
    return lista

file = open('saidas_arduinoscanner_oreo.txt')
output = file.readlines()
file.close()

# distancia ate a mesa e forca do sinal
dist_mesa = float(output[4][0:len(output[4])-1])
str_mesa = float(output[6][0:len(output[6])-1])

# linha em que começa a leitura
line_xyz = 0
for i in range(20):
    if output[i] == 'x,y,z,strn':
        line_xyz = i+1
        break
    
# salva os dados em vetores
X = []
Y = []
Z = []
F = []
for i in range(line_xyz,len(output)-1):
    linha = separador(output[i],('n',','))
    X.append(linha[0])
    Y.append(linha[1])
    Z.append(linha[2])
    F.append(linha[3])
    
X = np.array(X)
Y = np.array(Y)
Z = np.array(Z)
F = np.array(F)
    
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# aqui eu gostaria de definir o colormap pra cada ponto
ax.set_zlim(-20,20)
ax.scatter(X,Y,Z)
plt.show()

One Answer

a documentação, em inglês, indica que o scatter pode receber um argumento c que será usado para colorir os pontos. Esse argumento pode receber uma cor, sequência de cores, etc. Em particular, se esse argumento receber um vetor de escalares, então esses escalares são passados para um mapa de cores (cmap), gerando um gradiente.

Modificando-se a parte relevante do código:

# dados artificiais

rnd = np.random.default_rng()
X, Y, Z, F = rnd.uniform(-20,20, size=(4,20))

# figura

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# aqui eu gostaria de definir o colormap pra cada ponto
ax.set_zlim(-20,20)
ax.scatter(X,Y,Z, c=F, cmap='RdYlBu')
plt.show()

scatterplot com gradiente

você pode verificar outras opções de cores neste site (em inglês).

PS: uma figura 3D é um tipo de visualização que só faz sentido em situações muito particulares, muitas vezes se você plotar os dados em 2D e usar cores, tamanhos e formas para representar as informações que você quer representar em outras dimensões o resultado fica melhor.

Answered by rms on January 4, 2022

Add your own answers!

Related Questions

Como aplico um filtro python/django

2  Asked on November 7, 2021 by eliaquim

     

Como remover espaços em branco

1  Asked on November 7, 2021 by frybii

     

Como paginar um retorno Json no PHP

1  Asked on November 7, 2021 by guga_opala

     

Comparação simples entre datas

3  Asked on November 5, 2021 by vinicius

 

Upload de array de imagens PHP e MySQL

1  Asked on November 5, 2021 by wagner-viana

     

Micro sistema de classes em C

3  Asked on November 5, 2021 by daniel-carvalho

     

O usuário terá 3 tentativas para acertar a senha

3  Asked on November 5, 2021 by rayra

       

Erro de exited, segmentation fault em C

2  Asked on November 5, 2021

       

TypeError no Python, preciso modificar um string

1  Asked on November 5, 2021 by ezequiel

   

Acessar valores JSON via PHP

1  Asked on November 5, 2021 by cristiano-facirolli

     

Grid de Tabelas CSS criando novas linhas quando não deveria

1  Asked on November 5, 2021 by nicolas-gordiano

     

como remover httpredirect web.config

0  Asked on November 5, 2021 by jonas-centenaro

     

CoffeeCode Router Erro 400 em todas as rotas

1  Asked on November 5, 2021 by lucas-arend

   

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP