Show additional box border in 3D plot
up vote
3
down vote
favorite
How to best draw an additional box boder at {x, y, 0}
as indicated by the red arrow below? PlotRange
is Automatic
(do not assume it is {{0, 100}, {0, 100}, {-50, 50}}
always).
points = RandomReal[100, {100, 3}];
points[[All, 3]] = points[[All, 3]] - 50;
ListPointPlot3D[points, BoxRatios -> 1]
The only idea I have is extracting PlotRange
with AbsoluteOptions
and drawing the box border manually. That may be too difficult for me. I use Mathematica 9.
plotting graphics3d boxes listpointplot3d
add a comment |
up vote
3
down vote
favorite
How to best draw an additional box boder at {x, y, 0}
as indicated by the red arrow below? PlotRange
is Automatic
(do not assume it is {{0, 100}, {0, 100}, {-50, 50}}
always).
points = RandomReal[100, {100, 3}];
points[[All, 3]] = points[[All, 3]] - 50;
ListPointPlot3D[points, BoxRatios -> 1]
The only idea I have is extracting PlotRange
with AbsoluteOptions
and drawing the box border manually. That may be too difficult for me. I use Mathematica 9.
plotting graphics3d boxes listpointplot3d
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
How to best draw an additional box boder at {x, y, 0}
as indicated by the red arrow below? PlotRange
is Automatic
(do not assume it is {{0, 100}, {0, 100}, {-50, 50}}
always).
points = RandomReal[100, {100, 3}];
points[[All, 3]] = points[[All, 3]] - 50;
ListPointPlot3D[points, BoxRatios -> 1]
The only idea I have is extracting PlotRange
with AbsoluteOptions
and drawing the box border manually. That may be too difficult for me. I use Mathematica 9.
plotting graphics3d boxes listpointplot3d
How to best draw an additional box boder at {x, y, 0}
as indicated by the red arrow below? PlotRange
is Automatic
(do not assume it is {{0, 100}, {0, 100}, {-50, 50}}
always).
points = RandomReal[100, {100, 3}];
points[[All, 3]] = points[[All, 3]] - 50;
ListPointPlot3D[points, BoxRatios -> 1]
The only idea I have is extracting PlotRange
with AbsoluteOptions
and drawing the box border manually. That may be too difficult for me. I use Mathematica 9.
plotting graphics3d boxes listpointplot3d
plotting graphics3d boxes listpointplot3d
asked Nov 28 at 17:11
Frank
33118
33118
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
2
down vote
accepted
You can use InfinitePlane
without having to get the PlotRange
of input plot:
Show[ListPointPlot3D[points, BoxRatios -> 1],
Graphics3D[{Opacity[0], EdgeForm[{Blue, Thick}],
InfinitePlane[{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}}]}]]
Update: An alternative that also works in version 9 is to use FaceGrids
:
facegrids = {#, {{}, {0}}} & /@ Join[#, -#] &@Most[IdentityMatrix[3]];
ListPointPlot3D[points, BoxRatios -> 1, FaceGrids -> facegrids,
FaceGridsStyle -> Directive[Thick, Blue]]
Update 2: You can also use PlotRange
to extract the plot range of a plot object and use it with Cuboid
:
lpp = ListPointPlot3D[points, BoxRatios -> 1];
rectangle = Transpose[Append[PlotRange[lpp][[;; 2]], {0, 0}]];
Show[lpp, Graphics3D[{Opacity[0], EdgeForm[{Thick, Blue}], Cuboid @@ rectangle}]]
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
add a comment |
up vote
2
down vote
You can use the useful-but-undocumented function Charting`get3DPlotRange
to find the plot range, and use that to make your box:
points = RandomReal[{-50, 50}, {100, 3}];
plot = ListPointPlot3D[points, BoxRatios -> 1];
{x, y, z} = Charting`get3DPlotRange @ plot;
Show[plot,
Graphics3D[
{
EdgeForm @ Blue,
FaceForm @ Opacity @ 0.05, (* set to 0 for transparent *)
Cuboid @@ Thread[{x, y, {0, 0}}]
}
]
]
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
Nov 28 at 20:16
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
You can use InfinitePlane
without having to get the PlotRange
of input plot:
Show[ListPointPlot3D[points, BoxRatios -> 1],
Graphics3D[{Opacity[0], EdgeForm[{Blue, Thick}],
InfinitePlane[{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}}]}]]
Update: An alternative that also works in version 9 is to use FaceGrids
:
facegrids = {#, {{}, {0}}} & /@ Join[#, -#] &@Most[IdentityMatrix[3]];
ListPointPlot3D[points, BoxRatios -> 1, FaceGrids -> facegrids,
FaceGridsStyle -> Directive[Thick, Blue]]
Update 2: You can also use PlotRange
to extract the plot range of a plot object and use it with Cuboid
:
lpp = ListPointPlot3D[points, BoxRatios -> 1];
rectangle = Transpose[Append[PlotRange[lpp][[;; 2]], {0, 0}]];
Show[lpp, Graphics3D[{Opacity[0], EdgeForm[{Thick, Blue}], Cuboid @@ rectangle}]]
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
add a comment |
up vote
2
down vote
accepted
You can use InfinitePlane
without having to get the PlotRange
of input plot:
Show[ListPointPlot3D[points, BoxRatios -> 1],
Graphics3D[{Opacity[0], EdgeForm[{Blue, Thick}],
InfinitePlane[{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}}]}]]
Update: An alternative that also works in version 9 is to use FaceGrids
:
facegrids = {#, {{}, {0}}} & /@ Join[#, -#] &@Most[IdentityMatrix[3]];
ListPointPlot3D[points, BoxRatios -> 1, FaceGrids -> facegrids,
FaceGridsStyle -> Directive[Thick, Blue]]
Update 2: You can also use PlotRange
to extract the plot range of a plot object and use it with Cuboid
:
lpp = ListPointPlot3D[points, BoxRatios -> 1];
rectangle = Transpose[Append[PlotRange[lpp][[;; 2]], {0, 0}]];
Show[lpp, Graphics3D[{Opacity[0], EdgeForm[{Thick, Blue}], Cuboid @@ rectangle}]]
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
You can use InfinitePlane
without having to get the PlotRange
of input plot:
Show[ListPointPlot3D[points, BoxRatios -> 1],
Graphics3D[{Opacity[0], EdgeForm[{Blue, Thick}],
InfinitePlane[{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}}]}]]
Update: An alternative that also works in version 9 is to use FaceGrids
:
facegrids = {#, {{}, {0}}} & /@ Join[#, -#] &@Most[IdentityMatrix[3]];
ListPointPlot3D[points, BoxRatios -> 1, FaceGrids -> facegrids,
FaceGridsStyle -> Directive[Thick, Blue]]
Update 2: You can also use PlotRange
to extract the plot range of a plot object and use it with Cuboid
:
lpp = ListPointPlot3D[points, BoxRatios -> 1];
rectangle = Transpose[Append[PlotRange[lpp][[;; 2]], {0, 0}]];
Show[lpp, Graphics3D[{Opacity[0], EdgeForm[{Thick, Blue}], Cuboid @@ rectangle}]]
You can use InfinitePlane
without having to get the PlotRange
of input plot:
Show[ListPointPlot3D[points, BoxRatios -> 1],
Graphics3D[{Opacity[0], EdgeForm[{Blue, Thick}],
InfinitePlane[{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}}]}]]
Update: An alternative that also works in version 9 is to use FaceGrids
:
facegrids = {#, {{}, {0}}} & /@ Join[#, -#] &@Most[IdentityMatrix[3]];
ListPointPlot3D[points, BoxRatios -> 1, FaceGrids -> facegrids,
FaceGridsStyle -> Directive[Thick, Blue]]
Update 2: You can also use PlotRange
to extract the plot range of a plot object and use it with Cuboid
:
lpp = ListPointPlot3D[points, BoxRatios -> 1];
rectangle = Transpose[Append[PlotRange[lpp][[;; 2]], {0, 0}]];
Show[lpp, Graphics3D[{Opacity[0], EdgeForm[{Thick, Blue}], Cuboid @@ rectangle}]]
edited Nov 28 at 20:16
answered Nov 28 at 19:33
kglr
174k9196402
174k9196402
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
add a comment |
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
Something like this I was hoping for, thanks. Unfortunately
InfinitePlane
was only introduced in MMA 10.– Frank
Nov 28 at 19:42
Something like this I was hoping for, thanks. Unfortunately
InfinitePlane
was only introduced in MMA 10.– Frank
Nov 28 at 19:42
@Frank, please see the update.
– kglr
Nov 28 at 20:01
@Frank, please see the update.
– kglr
Nov 28 at 20:01
That's truly fantastic.
– Frank
Nov 28 at 20:15
That's truly fantastic.
– Frank
Nov 28 at 20:15
add a comment |
up vote
2
down vote
You can use the useful-but-undocumented function Charting`get3DPlotRange
to find the plot range, and use that to make your box:
points = RandomReal[{-50, 50}, {100, 3}];
plot = ListPointPlot3D[points, BoxRatios -> 1];
{x, y, z} = Charting`get3DPlotRange @ plot;
Show[plot,
Graphics3D[
{
EdgeForm @ Blue,
FaceForm @ Opacity @ 0.05, (* set to 0 for transparent *)
Cuboid @@ Thread[{x, y, {0, 0}}]
}
]
]
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
Nov 28 at 20:16
add a comment |
up vote
2
down vote
You can use the useful-but-undocumented function Charting`get3DPlotRange
to find the plot range, and use that to make your box:
points = RandomReal[{-50, 50}, {100, 3}];
plot = ListPointPlot3D[points, BoxRatios -> 1];
{x, y, z} = Charting`get3DPlotRange @ plot;
Show[plot,
Graphics3D[
{
EdgeForm @ Blue,
FaceForm @ Opacity @ 0.05, (* set to 0 for transparent *)
Cuboid @@ Thread[{x, y, {0, 0}}]
}
]
]
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
Nov 28 at 20:16
add a comment |
up vote
2
down vote
up vote
2
down vote
You can use the useful-but-undocumented function Charting`get3DPlotRange
to find the plot range, and use that to make your box:
points = RandomReal[{-50, 50}, {100, 3}];
plot = ListPointPlot3D[points, BoxRatios -> 1];
{x, y, z} = Charting`get3DPlotRange @ plot;
Show[plot,
Graphics3D[
{
EdgeForm @ Blue,
FaceForm @ Opacity @ 0.05, (* set to 0 for transparent *)
Cuboid @@ Thread[{x, y, {0, 0}}]
}
]
]
You can use the useful-but-undocumented function Charting`get3DPlotRange
to find the plot range, and use that to make your box:
points = RandomReal[{-50, 50}, {100, 3}];
plot = ListPointPlot3D[points, BoxRatios -> 1];
{x, y, z} = Charting`get3DPlotRange @ plot;
Show[plot,
Graphics3D[
{
EdgeForm @ Blue,
FaceForm @ Opacity @ 0.05, (* set to 0 for transparent *)
Cuboid @@ Thread[{x, y, {0, 0}}]
}
]
]
answered Nov 28 at 19:02
Jason B.
47.3k387185
47.3k387185
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
Nov 28 at 20:16
add a comment |
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
Nov 28 at 20:16
Thanks! I ran into trouble when using this together with
PlotLegends -> Placed
.– Frank
Nov 28 at 20:16
Thanks! I ran into trouble when using this together with
PlotLegends -> Placed
.– Frank
Nov 28 at 20:16
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f186889%2fshow-additional-box-border-in-3d-plot%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown