Нечетные артефакты строк появляются в графике matplotlib mplot3d с использованием PolyCollection

Я использую пример mplot3d, который использует PolyCollection для укладки XY-графиков, http://matplotlib.org/examples/mplot3d/polys3d_demo.html

Тем не менее, я вижу некоторые странные артефакты линии на участках.

  • Как удалить горизонтальные линии, которые исчезают из видимой области?
  • Есть ли лучший способ для укладки графика XY вдоль направления глубины?

Следующий сценарий создает этот график,

Нечетные линии в графике mplot3d

from mpl_toolkits.mplot3d import Axes3D from matplotlib.collections import PolyCollection from matplotlib.colors import colorConverter import matplotlib.pyplot as plt import numpy as np zs = [] fig = plt.figure() ax = fig.gca(projection='3d') verts = [] # XY data (ie "normal line plots") count = 4 for i in range(count): xs, ys = [800.0, 900.0, 1000.0, 1100.], [0., 1., 1., 0.] verts.append(list(zip(xs, ys))) # Z position (ie depth at which the XY plot is drawn) zs = [0,1,2,3] colours = plt.cm.Blues(np.linspace(0.2, 0.8, len(zs))) poly = PolyCollection(verts, facecolors = colours ) ax.add_collection3d(poly, zs=zs, zdir='y') ax.set_xlabel('X') ax.set_xlim3d(800,1150) ax.set_ylabel('Y') ax.set_ylim3d(0, 4) ax.set_zlabel('Z') ax.set_zlim3d(0, 1) plt.show() 

One Solution collect form web for “Нечетные артефакты строк появляются в графике matplotlib mplot3d с использованием PolyCollection”

Если у вас все еще есть проблема, попробуйте вручную изменить соответствующие объекты Path. Вы должны изменить код самой последней вершины на STOP (код 0):

 from mpl_toolkits.mplot3d import Axes3D from matplotlib.collections import PolyCollection from matplotlib.colors import colorConverter import matplotlib.pyplot as plt import numpy as np zs = [] fig = plt.figure() ax = fig.gca(projection='3d') verts = [] # XY data (ie "normal line plots") count = 4 for i in range(count): xs, ys = [800.0, 900.0, 1000.0, 1100.], [0., 1., 1., 0.] verts.append(list(zip(xs, ys))) # Z position (ie depth at which the XY plot is drawn) zs = [0,1,2,3] colours = plt.cm.Blues(np.linspace(0.2, 0.8, len(zs))) poly = PolyCollection(verts, facecolors = colours ) for path in poly.get_paths() : # There is the fix : path.codes[-1] = 0 # we have to manually switch the last point in a path to STOP (code = 0) ax.add_collection3d(poly, zs=zs, zdir='y') ax.set_xlabel('X') ax.set_xlim3d(800,1150) ax.set_ylabel('Y') ax.set_ylim3d(0, 4) ax.set_zlabel('Z') ax.set_zlim3d(0, 1) plt.show() 

… и вот результат: введите описание изображения здесь

  • сюжет 3d в python с использованием трех списков
  • mplot3d анимация с прозрачным фоном
  • Подключение двух точек в 3D-графике в Python и matplotlib
  • Edgelines исчезают в mplot3d surf, когда указаны цветные
  • Графики контуров распределения по всем трем осям в 3D-графике
  • set_xlim, set_ylim, set_zlim команды в matplotlib не могут скопировать отображаемые данные
  • Построение нескольких трехмерных линий: преобразование данных
  • Как построить коллекцию 3D-патчей в matplotlib?
  • Python - лучший язык программирования в мире.