Изменить маркер / цвет в трехмерном точечном графике в зависимости от условий - PullRequest
0 голосов
/ 27 марта 2019

Я хочу сделать трехмерный точечный график в Python с помощью matplotlib, где, например, точки> 5 показаны красным, а остальное синим.

Проблема в том, что я все еще получаю все значения, нанесенные на оба маркера / цвета, и я также знаю, почему это так, но я не достаточно глубоко в Python, чтобы решить эту проблему.

X = [3, 5, 6, 7,]
Y = [2, 4, 5, 9,]
Z = [1, 2, 6, 7,]

#ZP is for differentiate between ploted values and "check if" values

ZP = Z

for ZP in ZP:

    if ZP > 5:
        ax.scatter(X, Y, Z, c='r', marker='o')
    else:
        ax.scatter(X, Y, Z, c='b', marker='x')

plt.show()

Возможно, решение - это то, что я еще не изучил, но, на мой взгляд, это не должно быть трудно заставить это работать.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы можете просто использовать индексирование NumPy.Поскольку NumPy уже является зависимостью matplotlib, вы можете использовать индексирование массивов, преобразовав свои списки в массивы.

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X = np.array([3, 5, 6, 7])
Y = np.array([2, 4, 5, 9])
Z = np.array([1, 2, 6, 7])

ax.scatter(X[Z>5], Y[Z>5], Z[Z>5], s=40, c='r', marker='o')
ax.scatter(X[Z<=5], Y[Z<=5], Z[Z<=5], s=40, c='b', marker='x')

plt.show()

enter image description here

0 голосов
/ 27 марта 2019

Создание отдельных точек для каждого условия:

X1,Y1,Z1 = zip(*[(x,y,z) for x,y,z in zip(X,Y,Z) if z<=5])
X2,Y2,Z2 = zip(*[(x,y,z) for x,y,z in zip(X,Y,Z) if z>5])

ax.scatter(X1, Y1, Z1, c='b', marker='x')   
ax.scatter(X2, Y2, Z2, c='r', marker='o')
...