Discussion:
[Matplotlib-users] How to plot a 2d streamline in 3d view in matplotlib
Raj Kumar Manna
2015-05-21 11:45:31 UTC
Permalink
Hi,

I need to plot a 2d streamline in 3d view like this
<http://stackoverflow.com/questions/14963004/continuous-shades-on-matplotlib-3d-surface>.
As suggested by the post
<http://stackoverflow.com/questions/16252231/symmetric-streamplot-with-matplotlib/16373060#16373060>,
I need to extract streamlines and arrows from a 2d plot and then transform
it to 3d data. How to transform this 2d streamline data to 3d data and plot
using mplot3d?

Thanks in advance.

Raj
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras

Ph. No. 8144637401

alternate email: ***@physics.iitm.ac.in <***@gmail.com>
####################################################################
Benjamin Root
2015-05-21 15:00:35 UTC
Permalink
Well, there is the new 3D quiver feature:
http://matplotlib.org/examples/mplot3d/quiver3d_demo.html. Not quite
streamlines, but it might do in a pinch.

Another approach:
There is the 2d streamplot() function that returns a specialized object.
```
Returns:

*stream_container* : StreamplotSet
Container object with attributes

- lines: `matplotlib.collections.LineCollection` of
streamlines

- arrows: collection of `matplotlib.patches.FancyArrowPatch`
objects representing arrows half-way along stream
lines.
```

You might be able to get away with using the "lines" object and feeding it
through art3d.line_collection_2d_to_3d(), kind of like how it is done for
pathpatch objects here:
http://matplotlib.org/examples/mplot3d/pathpatch3d_demo.html. You might
also be able to pass the individual objects in the "arrows" list through
art3d.patch_2d_to_3d(), but I have no clue if that would actually work or
not.

I hope that helps!
Ben Root
Post by Raj Kumar Manna
Hi,
I need to plot a 2d streamline in 3d view like this
<http://stackoverflow.com/questions/14963004/continuous-shades-on-matplotlib-3d-surface>.
As suggested by the post
<http://stackoverflow.com/questions/16252231/symmetric-streamplot-with-matplotlib/16373060#16373060>,
I need to extract streamlines and arrows from a 2d plot and then transform
it to 3d data. How to transform this 2d streamline data to 3d data and plot
using mplot3d?
Thanks in advance.
Raj
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Benjamin Root
2015-05-21 15:49:11 UTC
Permalink
(keeping the discussion on the mailing list)

The object you get back have two attributes: "lines" and "arrows". This is
just psuedo-code, but it would look something like this:

```
stream = ax.streamplot(......)
art3d.linecollection_2d_to_3d(stream.lines, ....)
for p in stream.arrows:
art3d.patch_2d_to_3d(p, ...)
```
Again, I have no clue if this actually would work. I haven't tried doing
this myself.

Ben Root
Thanks for your quick reply.
I have plotted the streamplot in 2d . I am not able to extract lines or
arrow from streamplot. I am new user of matplotlib, can you please tell me
the syntax to extract lines and arrows from streamplot().
Thanks for you help.
Raj
Post by Benjamin Root
http://matplotlib.org/examples/mplot3d/quiver3d_demo.html. Not quite
streamlines, but it might do in a pinch.
There is the 2d streamplot() function that returns a specialized object.
```
*stream_container* : StreamplotSet
Container object with attributes
- lines: `matplotlib.collections.LineCollection` of
streamlines
- arrows: collection of
`matplotlib.patches.FancyArrowPatch`
objects representing arrows half-way along stream
lines.
```
You might be able to get away with using the "lines" object and feeding
it through art3d.line_collection_2d_to_3d(), kind of like how it is done
http://matplotlib.org/examples/mplot3d/pathpatch3d_demo.html. You might
also be able to pass the individual objects in the "arrows" list through
art3d.patch_2d_to_3d(), but I have no clue if that would actually work or
not.
I hope that helps!
Ben Root
On Thu, May 21, 2015 at 7:45 AM, Raj Kumar Manna <
Post by Raj Kumar Manna
Hi,
I need to plot a 2d streamline in 3d view like this
<http://stackoverflow.com/questions/14963004/continuous-shades-on-matplotlib-3d-surface>.
As suggested by the post
<http://stackoverflow.com/questions/16252231/symmetric-streamplot-with-matplotlib/16373060#16373060>,
I need to extract streamlines and arrows from a 2d plot and then transform
it to 3d data. How to transform this 2d streamline data to 3d data and plot
using mplot3d?
Thanks in advance.
Raj
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
Raj Kumar Manna
2015-05-21 16:02:40 UTC
Permalink
Its giving a error,

art3d.linecollection_2d_to_3d(stream.lines)
AttributeError: 'module' object has no attribute 'linecollection_2d_to_3d'



Here is my script,


import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.art3d as art3d
import numpy as np
from pylab import *
from matplotlib.collections import LineCollection



fig = plt.figure()
ax=fig.gca(projection='3d')


f=np.loadtxt('flow-velocity343.dat')
dx,dz=1.0,1.0

xmin,zmin,xmax,zmax=min(f[:,0]),min(f[:,2]),max(f[:,0]),max(f[:,2])
nbinx,nbinz=int((xmax-xmin)/dx)+1,int((zmax-zmin)/dz)+1
Ux=np.zeros([nbinz,nbinx],'d')
Uy=np.zeros([nbinz,nbinx],'d')
Uz=np.zeros([nbinz,nbinx],'d')
speed=np.zeros([nbinz,nbinx],'d')
logv=np.zeros([nbinz,nbinx],'d')



for f1 in f:
binx,binz=int((f1[0]-xmin)/dx),int((f1[2]-zmin)/dz)
Ux[binz][binx]=f1[3]
Uy[binz][binx]=f1[4]
Uz[binz][binx]=f1[5]
speed[binz][binx] = np.sqrt( Ux[binz][binx]*Ux[binz][binx] +
Uz[binz][binx]*Uz[binz][binx] + Uy[binz][binx]*Uy[binz][binx] )
logv[binz][binx] = log(speed[binz][binx])
x,z=np.arange(xmin,xmax+dx,dx),np.arange(zmin,zmax+dz,dz)
y=np.arange(0,71,1)
X,Z=np.meshgrid(x,z)

stream = ax.streamplot(X, Z, Ux, Uz, color='black', linewidth=2)
#lines = stream.lines.get_paths()

art3d.linecollection_2d_to_3d(stream.lines)
for p in stream.arrows:
art3d.patch_2d_to_3d(p)



plt.show()





Thanks
Raj
Post by Benjamin Root
(keeping the discussion on the mailing list)
The object you get back have two attributes: "lines" and "arrows". This is
```
stream = ax.streamplot(......)
art3d.linecollection_2d_to_3d(stream.lines, ....)
art3d.patch_2d_to_3d(p, ...)
```
Again, I have no clue if this actually would work. I haven't tried doing
this myself.
Ben Root
On Thu, May 21, 2015 at 11:39 AM, Raj Kumar Manna <
Thanks for your quick reply.
I have plotted the streamplot in 2d . I am not able to extract lines or
arrow from streamplot. I am new user of matplotlib, can you please tell me
the syntax to extract lines and arrows from streamplot().
Thanks for you help.
Raj
Post by Benjamin Root
http://matplotlib.org/examples/mplot3d/quiver3d_demo.html. Not quite
streamlines, but it might do in a pinch.
There is the 2d streamplot() function that returns a specialized object.
```
*stream_container* : StreamplotSet
Container object with attributes
- lines: `matplotlib.collections.LineCollection` of
streamlines
- arrows: collection of
`matplotlib.patches.FancyArrowPatch`
objects representing arrows half-way along stream
lines.
```
You might be able to get away with using the "lines" object and feeding
it through art3d.line_collection_2d_to_3d(), kind of like how it is done
http://matplotlib.org/examples/mplot3d/pathpatch3d_demo.html. You might
also be able to pass the individual objects in the "arrows" list through
art3d.patch_2d_to_3d(), but I have no clue if that would actually work or
not.
I hope that helps!
Ben Root
On Thu, May 21, 2015 at 7:45 AM, Raj Kumar Manna <
Post by Raj Kumar Manna
Hi,
I need to plot a 2d streamline in 3d view like this
<http://stackoverflow.com/questions/14963004/continuous-shades-on-matplotlib-3d-surface>.
As suggested by the post
<http://stackoverflow.com/questions/16252231/symmetric-streamplot-with-matplotlib/16373060#16373060>,
I need to extract streamlines and arrows from a 2d plot and then transform
it to 3d data. How to transform this 2d streamline data to 3d data and plot
using mplot3d?
Thanks in advance.
Raj
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras

Ph. No. 8144637401

alternate email: ***@physics.iitm.ac.in <***@gmail.com>
####################################################################
Benjamin Root
2015-05-21 16:10:52 UTC
Permalink
Sorry, it is "line_collection_2d_to_3d()".
Post by Raj Kumar Manna
Its giving a error,
art3d.linecollection_2d_to_3d(stream.lines)
AttributeError: 'module' object has no attribute 'linecollection_2d_to_3d'
Here is my script,
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d.art3d as art3d
import numpy as np
from pylab import *
from matplotlib.collections import LineCollection
fig = plt.figure()
ax=fig.gca(projection='3d')
f=np.loadtxt('flow-velocity343.dat')
dx,dz=1.0,1.0
xmin,zmin,xmax,zmax=min(f[:,0]),min(f[:,2]),max(f[:,0]),max(f[:,2])
nbinx,nbinz=int((xmax-xmin)/dx)+1,int((zmax-zmin)/dz)+1
Ux=np.zeros([nbinz,nbinx],'d')
Uy=np.zeros([nbinz,nbinx],'d')
Uz=np.zeros([nbinz,nbinx],'d')
speed=np.zeros([nbinz,nbinx],'d')
logv=np.zeros([nbinz,nbinx],'d')
binx,binz=int((f1[0]-xmin)/dx),int((f1[2]-zmin)/dz)
Ux[binz][binx]=f1[3]
Uy[binz][binx]=f1[4]
Uz[binz][binx]=f1[5]
speed[binz][binx] = np.sqrt( Ux[binz][binx]*Ux[binz][binx] +
Uz[binz][binx]*Uz[binz][binx] + Uy[binz][binx]*Uy[binz][binx] )
logv[binz][binx] = log(speed[binz][binx])
x,z=np.arange(xmin,xmax+dx,dx),np.arange(zmin,zmax+dz,dz)
y=np.arange(0,71,1)
X,Z=np.meshgrid(x,z)
stream = ax.streamplot(X, Z, Ux, Uz, color='black', linewidth=2)
#lines = stream.lines.get_paths()
art3d.linecollection_2d_to_3d(stream.lines)
art3d.patch_2d_to_3d(p)
plt.show()
Thanks
Raj
Post by Benjamin Root
(keeping the discussion on the mailing list)
The object you get back have two attributes: "lines" and "arrows". This
```
stream = ax.streamplot(......)
art3d.linecollection_2d_to_3d(stream.lines, ....)
art3d.patch_2d_to_3d(p, ...)
```
Again, I have no clue if this actually would work. I haven't tried doing
this myself.
Ben Root
On Thu, May 21, 2015 at 11:39 AM, Raj Kumar Manna <
Thanks for your quick reply.
I have plotted the streamplot in 2d . I am not able to extract lines or
arrow from streamplot. I am new user of matplotlib, can you please tell me
the syntax to extract lines and arrows from streamplot().
Thanks for you help.
Raj
Post by Benjamin Root
http://matplotlib.org/examples/mplot3d/quiver3d_demo.html. Not quite
streamlines, but it might do in a pinch.
There is the 2d streamplot() function that returns a specialized
```
*stream_container* : StreamplotSet
Container object with attributes
- lines: `matplotlib.collections.LineCollection` of
streamlines
- arrows: collection of
`matplotlib.patches.FancyArrowPatch`
objects representing arrows half-way along stream
lines.
```
You might be able to get away with using the "lines" object and feeding
it through art3d.line_collection_2d_to_3d(), kind of like how it is done
http://matplotlib.org/examples/mplot3d/pathpatch3d_demo.html. You
might also be able to pass the individual objects in the "arrows" list
through art3d.patch_2d_to_3d(), but I have no clue if that would actually
work or not.
I hope that helps!
Ben Root
On Thu, May 21, 2015 at 7:45 AM, Raj Kumar Manna <
Post by Raj Kumar Manna
Hi,
I need to plot a 2d streamline in 3d view like this
<http://stackoverflow.com/questions/14963004/continuous-shades-on-matplotlib-3d-surface>.
As suggested by the post
<http://stackoverflow.com/questions/16252231/symmetric-streamplot-with-matplotlib/16373060#16373060>,
I need to extract streamlines and arrows from a 2d plot and then transform
it to 3d data. How to transform this 2d streamline data to 3d data and plot
using mplot3d?
Thanks in advance.
Raj
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
------------------------------------------------------------------------------
One dashboard for servers and applications across
Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Matplotlib-users mailing list
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
--
##################################################################
Raj Kumar Manna
Complex Fluid & Biological Physics Lab
IIT Madras
Ph. No. 8144637401
####################################################################
Loading...