Ask Your Question

# Plotting > 10k random 3D points

Hi,

First of all, I am new to SAGE, and only started using it today.

I want to plot 100 000 random 3D points in SAGE, and it takes a LOT of time just to plot 10 000 points.

This is the code I have:

def random_point(): return (random(), random(), random())
l = [random_point() for k in [1 .. 10000]]
s = point3d(l, size=5)
show(s, aspect_ratio=1)


I noticed that the last two lines take incredibly long each.

Then, after the show, when I try to interact with the graphic, it is blank. I can even show the boundbox and axes, but the plot is nowhere to be seen.

If I change to [1 .. 100], everything works as intended, but this amount of points is not enough.

What should I do to accomplish effectively my goal?

I am using SAGE 8.1, installed on macOS via brew, after running notebook() on the command line and using the browser-based notebook.

Thank you!

edit retag close merge delete

## Comments

Maybe I'm naive but I can imagine it takes a while to plot 'just' 10,000 points in 3d. Your code works on my installation. Maybe try a different viewer: e.g. s.show(viewer='threejs')

( 2018-11-15 06:42:33 -0500 )edit

@rburing : even the construction of s takes time, not only the jmol plotting.

( 2018-11-15 07:47:49 -0500 )edit

## 1 answer

Sort by » oldest newest most voted

This is not very surprising, since the plot3d returns a sum of Pointobject primitives, instead of a single primitive, each one will send a one-line string to jmol, see https://git.sagemath.org/sage.git/tre...

A possible workaround (for 10000 points, not 100000) is to use ployly: install it from a terminal:

sage -pip install plotly


and then do something like (slightly modified from plotly's website to be run on your own worksheet):

import plotly
plotly.offline.init_notebook_mode(connected=True)
from plotly.offline import iplot
import plotly.plotly as py
import plotly.graph_objs as go

# Create random data with numpy
import numpy as np
N = 10000
random_x = np.random.randn(N)
random_y = np.random.randn(N)
random_z = np.random.randn(N)

trace = go.Scatter3d(
x = random_x,
y = random_y,
z = random_z,
mode = 'markers'
)
data = [trace]
iplot(data)

more

## Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

## Stats

Asked: 2018-11-14 19:34:52 -0500

Seen: 64 times

Last updated: Nov 15 '18