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()
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()
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
1 Asked on October 25, 2020 by raffa-ferreira
1 Asked on October 22, 2020
1 Asked on October 21, 2020 by gonalo
1 Asked on October 21, 2020 by leonardo-vinicius
0 Asked on October 20, 2020 by fabrcio-pinheiro-dos-santos
1 Asked on October 14, 2020 by gleison
1 Asked on October 10, 2020 by userdel
1 Asked on October 9, 2020 by andr-machoski
2 Asked on October 7, 2020 by thaissa
3 Asked on October 6, 2020 by leandro-marzullo
1 Asked on September 29, 2020 by nfe
1 Asked on September 23, 2020 by ivan-ferrer
0 Asked on September 22, 2020 by bruno-maciel
0 Asked on September 21, 2020 by igor
1 Asked on September 13, 2020 by ramonvicente
Get help from others!
Recent Answers
Recent Questions
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP