Open In App

Draw contours on an unstructured triangular grid in Python using Matplotlib

Last Updated : 10 Jul, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

Matplotlib is a Python library which is an open-source drawing library which supports rich drawing types, it can be used to draw 2D and 3D graphics. Data can be understood easily by visualizing it with the help of matplotlib. You can also generate plots, pie charts, histograms, and many other charts as well. It provides a MATLAB-like plotting interface.

tricontour()

tricontour function of matplotlib library pyplot module draw contour lines and can be used to draw contours on an unstructured triangular grid. It returns TriContourSet object.

Syntax : tricontour(x, y, triangulation, **kwargs)

Parameters : This method consists of the following parameters.

  • x, y : Coordinates of the grid.
  • triangulation : It is a matplotlib.tri.Triangulation object.
  • z : It is the array of values to contour, one per point in the triangulation.
  • N :It contours up to N+1 automatically chosen contour levels for N intervals.
  • V :It draws contour lines at the values specified in sequence V and it must be in increasing order.

Example :




import matplotlib.pyplot as plt
import matplotlib.tri as tri
import numpy as np
  
  
n_angles = 56
n_radii = 8
min_radius = 0.25
radii = np.linspace(min_radius, 0.95, n_radii)
  
angles = np.linspace(0, 2 * np.pi, n_angles, endpoint = False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis = 1)
angles[:, 1::2] += np.pi / n_angles
  
x = (radii * np.cos(angles)).flatten()
y = (radii * np.sin(angles)).flatten()
z = (np.cos(radii) * np.cos(3 * angles)).flatten()
  
# Create the Triangulation; no triangles so
# Delaunay triangulation created.
triang = tri.Triangulation(x, y)
  
# Mask off unwanted triangles.
triang.set_mask(np.hypot(x[triang.triangles].mean(axis = 1), 
                         y[triang.triangles].mean(axis = 1))
                < min_radius)
  
fig1, ax1 = plt.subplots()
ax1.set_aspect('equal')
  
tcf = ax1.tricontourf(triang, z, cmap ='inferno')
fig1.colorbar(tcf)
  
ax1.tricontour(triang, z, colors ='k')
ax1.set_title('Contour plot for Delaunay triangulation')


Output :

tricontourf()

tricontourf function of matplotlib library pyplot module fills intervals that are closed at the top and can be used to draw contours on an unstructured triangular grid. Function signature and return value are same as in tricontour.

Syntax : tricontourf(x, y, triangulation, **kwargs)

Parameters : This method consists of the following parameters.

  • x, y : Coordinates of the grid.
  • triangulation : It is a matplotlib.tri.Triangulation object.
  • z : It is the array of values to contour, one per point in the triangulation.
  • N :It contours up to N+1 automatically chosen contour levels for N intervals.
  • V :It fills the (len(V)-1) regions between the values in V and it must be in increasing order.

Example :




import matplotlib
matplotlib.axes.Axes.tricontourf
matplotlib.pyplot.tricontourf
matplotlib.tri.Triangulation
  
xy = np.asarray([
    [-0.101, 0.872], [-0.080, 0.883], [-0.069, 0.888],
    [-0.054, 0.890], [-0.045, 0.897], [-0.057, 0.895],
    [-0.073, 0.900], [-0.087, 0.898], [-0.090, 0.904],
    [-0.069, 0.907], [-0.069, 0.921], [-0.080, 0.919],
    [-0.073, 0.928], [-0.052, 0.930], [-0.048, 0.942],
    [-0.062, 0.949], [-0.054, 0.958], [-0.069, 0.954], 
    [-0.087, 0.952], [-0.087, 0.959], [-0.080, 0.966], 
    [-0.085, 0.973], [-0.087, 0.965], [-0.097, 0.965],
    [-0.097, 0.975], [-0.092, 0.984], [-0.101, 0.980], 
    [-0.108, 0.980], [-0.104, 0.987], [-0.102, 0.993], 
    [-0.115, 1.001], [-0.099, 0.996], [-0.101, 1.007],
    [-0.090, 1.010], [-0.087, 1.021], [-0.069, 1.021],
    [-0.052, 1.022], [-0.052, 1.017], [-0.069, 1.010],
    [-0.064, 1.005], [-0.048, 1.005], [-0.031, 1.005],
    [-0.031, 0.996], [-0.040, 0.987], [-0.045, 0.980],
    [-0.052, 0.975], [-0.040, 0.973], [-0.026, 0.968],
    [-0.020, 0.954], [-0.006, 0.947], [ 0.003, 0.935], 
    [ 0.006, 0.926], [ 0.005, 0.921], [ 0.022, 0.923], 
    [ 0.033, 0.912], [ 0.029, 0.905], [ 0.017, 0.900], 
    [ 0.012, 0.895], [ 0.027, 0.893], [ 0.019, 0.886],
    [ 0.001, 0.883], [-0.012, 0.884], [-0.029, 0.883], 
    [-0.038, 0.879], [-0.057, 0.881], [-0.062, 0.876],
    [-0.078, 0.876], [-0.087, 0.872], [-0.030, 0.907], 
    [-0.007, 0.905], [-0.057, 0.916], [-0.025, 0.933],
    [-0.077, 0.990], [-0.059, 0.993]])
  
x = np.degrees(xy[:, 0])
y = np.degrees(xy[:, 1])
x0 = -5
y0 = 52
z = np.exp(-0.01 * ((x - x0) ** 2 + (y - y0) ** 2))
  
triangles = np.asarray([
    [67, 661], [652, 66], [ 1, 662], 
    [642, 65], [633, 64], [60, 59, 57], 
    [ 2, 643], [ 3, 634], [ 0, 671], 
    [624, 63], [57, 59, 56], [59, 58, 56],
    [61, 60, 69], [57, 69, 60], [ 4, 62, 68],
    [ 659], [61, 68, 62], [69, 68, 61], 
    [ 95, 70], [ 687], [ 4, 705], 
    [ 869], [56, 69, 57], [69, 56, 52],
    [70, 109], [54, 53, 55], [56, 55, 53],
    [68, 704], [52, 56, 53], [11, 10, 12],
    [69, 71, 68], [68, 13, 70], [10, 70, 13],
    [51, 50, 52], [13, 68, 71], [52, 71, 69], 
    [12, 10, 13], [71, 52, 50], [71, 14, 13],
    [50, 49, 71], [49, 48, 71], [14, 16, 15],
    [14, 71, 48], [17, 19, 18], [17, 20, 19],
    [48, 16, 14], [48, 47, 16], [47, 46, 16],
    [16, 46, 45], [23, 22, 24], [21, 24, 22],
    [17, 16, 45], [20, 17, 45], [21, 25, 24],
    [27, 26, 28], [20, 72, 21], [25, 21, 72], 
    [45, 72, 20], [25, 28, 26], [44, 73, 45],
    [72, 45, 73], [28, 25, 29], [29, 25, 31], 
    [43, 73, 44], [73, 43, 40], [72, 73, 39], 
    [72, 31, 25], [42, 40, 43], [31, 30, 29], 
    [39, 73, 40], [42, 41, 40], [72, 33, 31], 
    [32, 31, 33], [39, 38, 72], [33, 72, 38],
    [33, 38, 34], [37, 35, 38], [34, 38, 35], 
    [35, 37, 36]])
  
fig2, ax2 = plt.subplots()
ax2.set_aspect('equal')
tcf = ax2.tricontourf(x, y, triangles, z, cmap ='copper')
fig2.colorbar(tcf)
  
ax2.set_title('Contour plot using user-specified triangulation')
ax2.set_xlabel('Longitude (degrees)')
ax2.set_ylabel('Latitude (degrees)')
  
plt.show()


Output :



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads