[Matplotlib-devel] help in plotting 3D bathmetry of GEBCO data

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[Matplotlib-devel] help in plotting 3D bathmetry of GEBCO data

rohit0104
Hi all,
I want to plot 3D bathymetry from GEBCO data. I am attaching my code and
plot below, can anyone help me in rectifying my code for proper plot of
bathymetry.



'''
________________________
surface (color map)
======================

Demonstrates plotting a 3D surface colored with the coolwarm color map.
The surface is made opaque by using antialiased=False.

Also demonstrates using the LinearLocator and custom formatting for the
z axis tick labels.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from netCDF4 import Dataset as NetCDFFile



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

nc = NetCDFFile('GEBCO_2014_2D.nc')

X = nc.variables['lon'][:]
Y = nc.variables['lat'][:]
Z = nc.variables['elevation'][:]

X,Y = np.meshgrid(X,Y)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

<http://matplotlib.1069221.n5.nabble.com/file/t5155/Figure_1.png>



--
Sent from: http://matplotlib.1069221.n5.nabble.com/matplotlib-devel-f28077.html
_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel
Reply | Threaded
Open this post in threaded view
|

Re: help in plotting 3D bathmetry of GEBCO data

Paul Hobson-2
Rohit,

Based on your email, I'm not sure what your question is. Without seeing at least the plot that is generated or an error message, the only thing I can say is that you probably don't want to generate a grid of lat/long coordinates. So I would recommend reprojecting your data into a different (UTM perhaps) coordinate system.

It's also going to be very difficult to troubleshoot whatever problem you're having without seeing your data. NetCDF files can be quite big. So for troubleshooting purposes, it'll make more sense to "mock up" (or hard-code) a very small subset of representative data as numpy arrays, rather than reading in the full NetCDF file.

-paul

On Fri, Apr 27, 2018 at 3:42 AM, rohit0104 <[hidden email]> wrote:
Hi all,
I want to plot 3D bathymetry from GEBCO data. I am attaching my code and
plot below, can anyone help me in rectifying my code for proper plot of
bathymetry.



'''
________________________
surface (color map)
======================

Demonstrates plotting a 3D surface colored with the coolwarm color map.
The surface is made opaque by using antialiased=False.

Also demonstrates using the LinearLocator and custom formatting for the
z axis tick labels.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from netCDF4 import Dataset as NetCDFFile



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

nc = NetCDFFile('GEBCO_2014_2D.nc')

X = nc.variables['lon'][:]
Y = nc.variables['lat'][:]
Z = nc.variables['elevation'][:]

X,Y = np.meshgrid(X,Y)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

<http://matplotlib.1069221.n5.nabble.com/file/t5155/Figure_1.png>



--
Sent from: http://matplotlib.1069221.n5.nabble.com/matplotlib-devel-f28077.html
_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel


_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel
Reply | Threaded
Open this post in threaded view
|

Re: help in plotting 3D bathmetry of GEBCO data

Jody Klymak
I’ll take a wild guess that the GEBCO data base doesn’t have zlimits between -1 and 1 as a start.  

Sent from my iPhone

On Apr 27, 2018, at 6:52 AM, Paul Hobson <[hidden email]> wrote:

Rohit,

Based on your email, I'm not sure what your question is. Without seeing at least the plot that is generated or an error message, the only thing I can say is that you probably don't want to generate a grid of lat/long coordinates. So I would recommend reprojecting your data into a different (UTM perhaps) coordinate system.

It's also going to be very difficult to troubleshoot whatever problem you're having without seeing your data. NetCDF files can be quite big. So for troubleshooting purposes, it'll make more sense to "mock up" (or hard-code) a very small subset of representative data as numpy arrays, rather than reading in the full NetCDF file.

-paul

On Fri, Apr 27, 2018 at 3:42 AM, rohit0104 <[hidden email]> wrote:
Hi all,
I want to plot 3D bathymetry from GEBCO data. I am attaching my code and
plot below, can anyone help me in rectifying my code for proper plot of
bathymetry.



'''
________________________
surface (color map)
======================

Demonstrates plotting a 3D surface colored with the coolwarm color map.
The surface is made opaque by using antialiased=False.

Also demonstrates using the LinearLocator and custom formatting for the
z axis tick labels.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
from netCDF4 import Dataset as NetCDFFile



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

nc = NetCDFFile('GEBCO_2014_2D.nc')

X = nc.variables['lon'][:]
Y = nc.variables['lat'][:]
Z = nc.variables['elevation'][:]

X,Y = np.meshgrid(X,Y)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

<http://matplotlib.1069221.n5.nabble.com/file/t5155/Figure_1.png>



--
Sent from: http://matplotlib.1069221.n5.nabble.com/matplotlib-devel-f28077.html
_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel

_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel

_______________________________________________
Matplotlib-devel mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/matplotlib-devel