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 2 days ago
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
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
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
2 days ago
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
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
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
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
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 2 days ago
answered 2 days ago
kglr
174k8196401
174k8196401
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
add a comment |
Something like this I was hoping for, thanks. UnfortunatelyInfinitePlane
was only introduced in MMA 10.
– Frank
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
Something like this I was hoping for, thanks. Unfortunately
InfinitePlane
was only introduced in MMA 10.– Frank
2 days ago
Something like this I was hoping for, thanks. Unfortunately
InfinitePlane
was only introduced in MMA 10.– Frank
2 days ago
@Frank, please see the update.
– kglr
2 days ago
@Frank, please see the update.
– kglr
2 days ago
That's truly fantastic.
– Frank
2 days ago
That's truly fantastic.
– Frank
2 days ago
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
2 days ago
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
2 days ago
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 2 days ago
Jason B.
47.3k386185
47.3k386185
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
2 days ago
add a comment |
Thanks! I ran into trouble when using this together withPlotLegends -> Placed
.
– Frank
2 days ago
Thanks! I ran into trouble when using this together with
PlotLegends -> Placed
.– Frank
2 days ago
Thanks! I ran into trouble when using this together with
PlotLegends -> Placed
.– Frank
2 days ago
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