2016-08-15 4 views
3

С точки зрения производительности, следующий фрагмент кода отлично подходит для меня при построении графика в mayavi.10,000+ Точечные диаграммы с точками 3D в Python (с быстрой рендерингом)

import numpy as np 
from mayavi import mlab 

n = 5000 
x = np.random.rand(n) 
y = np.random.rand(n) 
z = np.random.rand(n) 
s = np.sin(x)**2 + np.cos(y) 

mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, scale_mode='none') 

Но mayavi начинает задыхаться раз . Аналогичная процедура 3D-графика в matplotlib, (Axes3D.scatter) аналогично борется с наборами данных такого размера (почему я начал сначала искать в mayavi).

Во-первых, есть что-то в mayavi (тривиальное или нетривиальное), которое мне не хватает, что сделало бы 10 000+ пунктов разброса разброса намного проще для рендеринга?

Во-вторых, если ответ выше, нет, какие другие варианты (либо в mayavi, либо в другом пакете python) мне нужно отображать наборы данных этой величины?

Я отметил, что ParaView просто добавляет, что рендеринг моих данных в ParaView идет гладко, что заставляет меня поверить, что я не пытаюсь сделать что-то необоснованное.

Update:

Указание режима в качестве 2D-символа проходит долгий путь к проносящихся вещи вверх. Например.

mlab.points3d(x, y, z, s, colormap="RdYlBu", scale_factor=0.02, 
       scale_mode='none', mode='2dcross') 

может легко поддерживать до 100000 точек

enter image description here

Было бы еще неплохо, если бы кто-нибудь мог бы добавить некоторую информацию о том, как ускорить рендеринг 3D глифов.

ответ

2

PyQtGraph - это гораздо более совершенный план построения, хотя и не такой «красивый», как matplotlib или mayavi. Он предназначен для хрустания числа и поэтому должен легко отображать точки порядка десяти тысяч.

Что касается mayavi и matplotlib: Я думаю, что с таким количеством пунктов вы достигли того, что возможно с этими пакетами.

Редактировать: VisPy кажется преемником PyQtGraph и некоторых других пакетов визуализации. Может быть немного перебор, но он может отображать несколько сотен тысяч точек легко, выгружая вычисления на GPU.

+0

Спасибо за реанимацию этого вопроса! Хотя VisPy действительно представляет собой очень мощный пакет визуализации, на первый взгляд это API сложнее, чем я привык к пакетам python, и, похоже, он специально предназначен для динамического построения/рендеринга. Во всяком случае, я посмотрю, подходит ли оно моим целям в ближайшие дни, спасибо! – lanery