I want to get a point or the Sphere[] Graphics3D object to have a border or edge in a 3D scatter plot.
The EdgeForm[] directives seem to apply only to polygon objects.
The effect I am trying to get is shown below as white borders on points or spheres (generated using Matlab)
1 Answer
Perhaps this is the look you are going for. I had to make up the data as you did not share it. Please do next time together with code to understand better what does not work for you. There are some tricks in the code below - check all functions in docs to understand how they work.
One way to do this is very simple - put a white hallo around points with another identical set of slightly larger points - and play with opacity too and point sizes.
data=Flatten[Table[{x,y,300+1200/(1+x^2+y^2)}+RandomReal[.1{-1,1},3],
{x,0,3,.02},{y,0,2,.02}],1];
ListPointPlot3D[{data,data},
BoxRatios->1,PlotRange->{{0,3},{0,3},{0,1500}},PlotTheme->"Detailed",
PlotStyle->{
Directive[White,Opacity[.8],PointSize[.01]],
Directive[Blue,Opacity[.8],PointSize[.0085]]}]
Another way is 3D. Main thing is using an Ellipsoid
because BoxRatios
would deform spheres with your aspect ratios and use Opacity
and Specularity
to improve effect.
data=Flatten[Table[{x,y,300+1200/(1+x^2+y^2)}+RandomReal[.1{-1,1},3],{x,0,3,.02},{y,0,2,.02}],1];
DynamicModule[{v={1.3,-2.4,2}},
Graphics3D[{Orange,Specularity[White,20],Opacity[.5],Ellipsoid[#,10{3,3,1500}/1500.]&/@data},
BoxRatios->1,PlotRange->{0,1500},ImageSize->800,Axes->True,
FaceGrids->Dynamic[Sign/@DiagonalMatrix[-v]],ViewPoint->Dynamic[v]]
]
-
$\begingroup$ While this is a hack, your ingenious method does give the required effect! Thanks! $\endgroup$ Oct 13, 2020 at 7:59
Graphics3D[{ Opacity[.5], Black, Ball[{1, 1, 1}, 1.1], Opacity@9, Orange, Sphere[{1, 1, 1}], Red, AbsolutePointSize[20], Point[{2, 2, 2}], AbsolutePointSize[15], Blue, Point[{2, 2, 2}], Point[{3, 3, 3}]}, PlotRange -> {{-1, 4}, {-1, 4}, {-1, 4}}]
? $\endgroup$