Bug in VectorFieldPlot[] with InterpolatingFunction[]?
$begingroup$
While looking at How do I Plot a Divergence?, I thought to suggest the following as a solution to the OP's problem (where potdistr is an InterpolatingFunction solution to a PDE returned by NDSolve):
VectorDensityPlot[
Evaluate[Grad[potdistr[x, y], {x, y}]],
{x, -0.01, 0.11}, {y, -0.005, 0.053}]
I surprised that it worked once and then failed on subsequent calls. It seems to be connected to InterpolatingFunction and values being set for x and y. Here is a minimal example:
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
Subsequent calls generate a InterpolatingFunction::dmval extrapolation warning message and the vector field is constant.
The problem does not occur if field = {y^2/4, x} is used. It does not occur for VectorPlot, DensityPlot, ContourPlot, or Plot3D.
What's going on? Is it a bug? Is there a way to get it to work?
Additional info:
$Version
(* "11.3.0 for Mac OS X x86 (64-bit) (January 22, 2018)" *)
Filed as [CASE:4228039]
plotting evaluation interpolation
$endgroup$
add a comment |
$begingroup$
While looking at How do I Plot a Divergence?, I thought to suggest the following as a solution to the OP's problem (where potdistr is an InterpolatingFunction solution to a PDE returned by NDSolve):
VectorDensityPlot[
Evaluate[Grad[potdistr[x, y], {x, y}]],
{x, -0.01, 0.11}, {y, -0.005, 0.053}]
I surprised that it worked once and then failed on subsequent calls. It seems to be connected to InterpolatingFunction and values being set for x and y. Here is a minimal example:
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
Subsequent calls generate a InterpolatingFunction::dmval extrapolation warning message and the vector field is constant.
The problem does not occur if field = {y^2/4, x} is used. It does not occur for VectorPlot, DensityPlot, ContourPlot, or Plot3D.
What's going on? Is it a bug? Is there a way to get it to work?
Additional info:
$Version
(* "11.3.0 for Mac OS X x86 (64-bit) (January 22, 2018)" *)
Filed as [CASE:4228039]
plotting evaluation interpolation
$endgroup$
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago
add a comment |
$begingroup$
While looking at How do I Plot a Divergence?, I thought to suggest the following as a solution to the OP's problem (where potdistr is an InterpolatingFunction solution to a PDE returned by NDSolve):
VectorDensityPlot[
Evaluate[Grad[potdistr[x, y], {x, y}]],
{x, -0.01, 0.11}, {y, -0.005, 0.053}]
I surprised that it worked once and then failed on subsequent calls. It seems to be connected to InterpolatingFunction and values being set for x and y. Here is a minimal example:
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
Subsequent calls generate a InterpolatingFunction::dmval extrapolation warning message and the vector field is constant.
The problem does not occur if field = {y^2/4, x} is used. It does not occur for VectorPlot, DensityPlot, ContourPlot, or Plot3D.
What's going on? Is it a bug? Is there a way to get it to work?
Additional info:
$Version
(* "11.3.0 for Mac OS X x86 (64-bit) (January 22, 2018)" *)
Filed as [CASE:4228039]
plotting evaluation interpolation
$endgroup$
While looking at How do I Plot a Divergence?, I thought to suggest the following as a solution to the OP's problem (where potdistr is an InterpolatingFunction solution to a PDE returned by NDSolve):
VectorDensityPlot[
Evaluate[Grad[potdistr[x, y], {x, y}]],
{x, -0.01, 0.11}, {y, -0.005, 0.053}]
I surprised that it worked once and then failed on subsequent calls. It seems to be connected to InterpolatingFunction and values being set for x and y. Here is a minimal example:
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
Subsequent calls generate a InterpolatingFunction::dmval extrapolation warning message and the vector field is constant.
The problem does not occur if field = {y^2/4, x} is used. It does not occur for VectorPlot, DensityPlot, ContourPlot, or Plot3D.
What's going on? Is it a bug? Is there a way to get it to work?
Additional info:
$Version
(* "11.3.0 for Mac OS X x86 (64-bit) (January 22, 2018)" *)
Filed as [CASE:4228039]
plotting evaluation interpolation
plotting evaluation interpolation
edited 7 hours ago
Michael E2
asked 7 hours ago
Michael E2Michael E2
148k12198475
148k12198475
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago
add a comment |
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
What is happening is that x and y are being set equal to numeric values. (One might notice that the color for x and y changes from blue to black, but my eyes have trouble seeing that for single-letter variables.) For some reason, these values are outside the domain specified in the plot. I think this must be a bug and have reported it to WRI.
Clear[x, y]
{x, y}
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
{x, y}

One possible workaround is to clear the variables after plotting with Clear[x, y]. Another is to use Block:
Block[{x, y}, VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]]
Further, it does not seem restricted only to InterpolatingFunction. The following has the same issue, and, further, VectorStyle is ignored:
Clear[x, y, ff]
{x, y}
ff[xx_, yy_] := {yy^2/4, xx};
VectorDensityPlot[ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
{x, y}
(* output is the same as above, same coloring *)
Pre-evaluating ff[x, y] gives the desired plot:
VectorDensityPlot[Evaluate@ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
$endgroup$
add a comment |
$begingroup$
This works...once you have potdistr, run this to get a Function
pdg = Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &
You can then run the plot function repeatedly, no problem, and go back and run previous statements (you couldn't when x, y were getting set).
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]

You can also run this kludgy version, but it is slow.
VectorDensityPlot[Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &[x, y],
{x, 0, 0.1}, {y, 0, 0.05}]
I was interested in the not very useful looking StreamPlot I was getting.
StreamPlot[pdg[x, y], {x, 0, 0.1}, {y, 0, 0.05}]

One thing I found odd is that if you look at the domain for potdistr versus the plot ranges people are using, there should be some extrapolation going on. Shouldn't we get warnings for that?
$endgroup$
$begingroup$
Can you explain why the first method works? It might be worth pointing out thatVectorDensityPlotstill setsxandyhere, but this method gets around the trouble it causes in other methods.
$endgroup$
– Michael E2
31 mins ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
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%2f192118%2fbug-in-vectorfieldplot-with-interpolatingfunction%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
What is happening is that x and y are being set equal to numeric values. (One might notice that the color for x and y changes from blue to black, but my eyes have trouble seeing that for single-letter variables.) For some reason, these values are outside the domain specified in the plot. I think this must be a bug and have reported it to WRI.
Clear[x, y]
{x, y}
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
{x, y}

One possible workaround is to clear the variables after plotting with Clear[x, y]. Another is to use Block:
Block[{x, y}, VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]]
Further, it does not seem restricted only to InterpolatingFunction. The following has the same issue, and, further, VectorStyle is ignored:
Clear[x, y, ff]
{x, y}
ff[xx_, yy_] := {yy^2/4, xx};
VectorDensityPlot[ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
{x, y}
(* output is the same as above, same coloring *)
Pre-evaluating ff[x, y] gives the desired plot:
VectorDensityPlot[Evaluate@ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
$endgroup$
add a comment |
$begingroup$
What is happening is that x and y are being set equal to numeric values. (One might notice that the color for x and y changes from blue to black, but my eyes have trouble seeing that for single-letter variables.) For some reason, these values are outside the domain specified in the plot. I think this must be a bug and have reported it to WRI.
Clear[x, y]
{x, y}
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
{x, y}

One possible workaround is to clear the variables after plotting with Clear[x, y]. Another is to use Block:
Block[{x, y}, VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]]
Further, it does not seem restricted only to InterpolatingFunction. The following has the same issue, and, further, VectorStyle is ignored:
Clear[x, y, ff]
{x, y}
ff[xx_, yy_] := {yy^2/4, xx};
VectorDensityPlot[ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
{x, y}
(* output is the same as above, same coloring *)
Pre-evaluating ff[x, y] gives the desired plot:
VectorDensityPlot[Evaluate@ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
$endgroup$
add a comment |
$begingroup$
What is happening is that x and y are being set equal to numeric values. (One might notice that the color for x and y changes from blue to black, but my eyes have trouble seeing that for single-letter variables.) For some reason, these values are outside the domain specified in the plot. I think this must be a bug and have reported it to WRI.
Clear[x, y]
{x, y}
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
{x, y}

One possible workaround is to clear the variables after plotting with Clear[x, y]. Another is to use Block:
Block[{x, y}, VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]]
Further, it does not seem restricted only to InterpolatingFunction. The following has the same issue, and, further, VectorStyle is ignored:
Clear[x, y, ff]
{x, y}
ff[xx_, yy_] := {yy^2/4, xx};
VectorDensityPlot[ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
{x, y}
(* output is the same as above, same coloring *)
Pre-evaluating ff[x, y] gives the desired plot:
VectorDensityPlot[Evaluate@ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
$endgroup$
What is happening is that x and y are being set equal to numeric values. (One might notice that the color for x and y changes from blue to black, but my eyes have trouble seeing that for single-letter variables.) For some reason, these values are outside the domain specified in the plot. I think this must be a bug and have reported it to WRI.
Clear[x, y]
{x, y}
field = {Interpolation[Range[4]^2/4][y], x};
VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]
{x, y}

One possible workaround is to clear the variables after plotting with Clear[x, y]. Another is to use Block:
Block[{x, y}, VectorDensityPlot[field, {x, 1, 4}, {y, 1, 4}]]
Further, it does not seem restricted only to InterpolatingFunction. The following has the same issue, and, further, VectorStyle is ignored:
Clear[x, y, ff]
{x, y}
ff[xx_, yy_] := {yy^2/4, xx};
VectorDensityPlot[ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
{x, y}
(* output is the same as above, same coloring *)
Pre-evaluating ff[x, y] gives the desired plot:
VectorDensityPlot[Evaluate@ff[x, y], {x, 1, 4}, {y, 1, 4}, VectorStyle -> Red]
answered 7 hours ago
Michael E2Michael E2
148k12198475
148k12198475
add a comment |
add a comment |
$begingroup$
This works...once you have potdistr, run this to get a Function
pdg = Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &
You can then run the plot function repeatedly, no problem, and go back and run previous statements (you couldn't when x, y were getting set).
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]

You can also run this kludgy version, but it is slow.
VectorDensityPlot[Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &[x, y],
{x, 0, 0.1}, {y, 0, 0.05}]
I was interested in the not very useful looking StreamPlot I was getting.
StreamPlot[pdg[x, y], {x, 0, 0.1}, {y, 0, 0.05}]

One thing I found odd is that if you look at the domain for potdistr versus the plot ranges people are using, there should be some extrapolation going on. Shouldn't we get warnings for that?
$endgroup$
$begingroup$
Can you explain why the first method works? It might be worth pointing out thatVectorDensityPlotstill setsxandyhere, but this method gets around the trouble it causes in other methods.
$endgroup$
– Michael E2
31 mins ago
add a comment |
$begingroup$
This works...once you have potdistr, run this to get a Function
pdg = Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &
You can then run the plot function repeatedly, no problem, and go back and run previous statements (you couldn't when x, y were getting set).
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]

You can also run this kludgy version, but it is slow.
VectorDensityPlot[Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &[x, y],
{x, 0, 0.1}, {y, 0, 0.05}]
I was interested in the not very useful looking StreamPlot I was getting.
StreamPlot[pdg[x, y], {x, 0, 0.1}, {y, 0, 0.05}]

One thing I found odd is that if you look at the domain for potdistr versus the plot ranges people are using, there should be some extrapolation going on. Shouldn't we get warnings for that?
$endgroup$
$begingroup$
Can you explain why the first method works? It might be worth pointing out thatVectorDensityPlotstill setsxandyhere, but this method gets around the trouble it causes in other methods.
$endgroup$
– Michael E2
31 mins ago
add a comment |
$begingroup$
This works...once you have potdistr, run this to get a Function
pdg = Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &
You can then run the plot function repeatedly, no problem, and go back and run previous statements (you couldn't when x, y were getting set).
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]

You can also run this kludgy version, but it is slow.
VectorDensityPlot[Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &[x, y],
{x, 0, 0.1}, {y, 0, 0.05}]
I was interested in the not very useful looking StreamPlot I was getting.
StreamPlot[pdg[x, y], {x, 0, 0.1}, {y, 0, 0.05}]

One thing I found odd is that if you look at the domain for potdistr versus the plot ranges people are using, there should be some extrapolation going on. Shouldn't we get warnings for that?
$endgroup$
This works...once you have potdistr, run this to get a Function
pdg = Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &
You can then run the plot function repeatedly, no problem, and go back and run previous statements (you couldn't when x, y were getting set).
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]
VectorDensityPlot[pdg[x,y], {x, 0, 0.1}, {y, 0, 0.05}]

You can also run this kludgy version, but it is slow.
VectorDensityPlot[Evaluate[Grad[potdistr[#1, #2], {#1, #2}]] &[x, y],
{x, 0, 0.1}, {y, 0, 0.05}]
I was interested in the not very useful looking StreamPlot I was getting.
StreamPlot[pdg[x, y], {x, 0, 0.1}, {y, 0, 0.05}]

One thing I found odd is that if you look at the domain for potdistr versus the plot ranges people are using, there should be some extrapolation going on. Shouldn't we get warnings for that?
answered 1 hour ago
MikeYMikeY
3,022413
3,022413
$begingroup$
Can you explain why the first method works? It might be worth pointing out thatVectorDensityPlotstill setsxandyhere, but this method gets around the trouble it causes in other methods.
$endgroup$
– Michael E2
31 mins ago
add a comment |
$begingroup$
Can you explain why the first method works? It might be worth pointing out thatVectorDensityPlotstill setsxandyhere, but this method gets around the trouble it causes in other methods.
$endgroup$
– Michael E2
31 mins ago
$begingroup$
Can you explain why the first method works? It might be worth pointing out that
VectorDensityPlot still sets x and y here, but this method gets around the trouble it causes in other methods.$endgroup$
– Michael E2
31 mins ago
$begingroup$
Can you explain why the first method works? It might be worth pointing out that
VectorDensityPlot still sets x and y here, but this method gets around the trouble it causes in other methods.$endgroup$
– Michael E2
31 mins 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.
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%2f192118%2fbug-in-vectorfieldplot-with-interpolatingfunction%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
$begingroup$
I was fiddling with the same problem, and had odd results when attempting to do a StreamPlot of the gradient of potexpr.
$endgroup$
– MikeY
7 hours ago