Skip to content
Related Articles

Related Articles

Draw contours on an unstructured triangular grid in Python using Matplotlib
  • Last Updated : 10 Jul, 2020

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 :



filter_none

edit
close

play_arrow

link
brightness_4
code

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')

chevron_right


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 :

filter_none

edit
close

play_arrow

link
brightness_4
code

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()

chevron_right


Output :

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :