Part of my moving to python for science.
I have lately been using gnuplot to monitor the progress and end results of my simulations. These are 2D hydrodynamic simulations, which involve 2D scalar and vector fields.
With gnuplot, I used to run stuff like
plot ‘8000/points.dat’ u 1:2
for a 2D plot of a scalar field. On column 1 I have the x values of the coordinates and on column 2 the y values, so this just plots the coordinates. The “8000” is the directory for time step 8000, where the data file is saved.
OK, now running ipython –pylab I have to run
dt = pylab.loadtxt(‘8000/points.dat’)
Important things to notice:
- python starts numbering c-style: at 0! so, despite pylab having been designed in order to mimic matlab syntax, there is a clear departure here.
- it’s easy to assign a color to the points, in this case column 12 (11 for python) is a density field. The default color scale looks ok (it goes from blue to red).
- the size is set to 50 for a nice full-screen view.
- New plots will appear on top of this one. If this is not desired, close the window, or run pylab.clf()
This is quite easy in gnuplot:
plot ‘8000/points.dat’ u 1:2:($5/10):($6/10) w vec
On columns 5 and 6 I store the x and y components of the velocity. In this example they are reduced ten-fold in order to hace a decent plot (and this has to set by hand…).
Now we may run:
which does the same. A bonus is that the vector length is automatically calculated from the average vector length. This may the right solution, if not the option “scale=xx” may be used. The higher xx is, the shorter the arrows (??). The fifth entry is a color code, which does not look to good at present because, I think, they are taken as RGB values, unlike with scatter.
This one’s harder. To get a scatter 3D plot of three columns I used to run
splot ‘8000/points.dat’ u 1:2:12
Now, it’s more like
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection=’3d’)
That produces a quite nice scatter plot with tick marks on the three axes.