Creating Contour Plots with matplotlib.pyplot.contour and matplotlib.pyplot.contourf – Python Lore

Creating Contour Plots with matplotlib.pyplot.contour and matplotlib.pyplot.contourf – Python Lore

Contour plots are a powerful tool in data visualization, particularly useful when you need to represent three-dimensional data on a two-dimensional plane. By drawing contour lines, we can create a map illustrating the landscape of the data, where each line represents a constant value. This technique is widely used in various fields such as meteorology, geography, and engineering to visualize data like temperature, pressure, elevation, or potential field intensity.

There are two types of contour plots that can be created using the matplotlib library in Python: contour and contourf. The matplotlib.pyplot.contour function draws the lines that connect points of equal value, similar to a topographic map. On the other hand, matplotlib.pyplot.contourf creates filled contour plots, where color shades between the lines indicate the value gradient, providing a more vivid representation of the data’s variance.

Creating contour plots in Python with matplotlib is simpler. First, you need to have numerical data available in a structured format, such as a two-dimensional NumPy array or a Pandas DataFrame. The next step is to define the X and Y axes values that correspond to the grid points of your data, and then you can use the contour or contourf functions to draw the plot. These functions offer extensive customization options to adjust the appearance of the contour lines, color schemes, and other plot elements to imropve the readability and aesthetic charm of your visualization.

Let’s take a look at how to generate basic contour plots using matplotlib.pyplot.contour and matplotlib.pyplot.contourf, and explore the customization options available to create more informative and visually compelling plots. We’ll also dive into some practical examples to demonstrate the utility of contour plots in real-world scenarios.

Generating Contour Plots with matplotlib.pyplot.contour

To generate a contour plot using matplotlib.pyplot.contour, you will need to have your data prepared. The data should consist of three variables: two for the coordinates (X and Y), and one for the values (Z) at those coordinates. Often, the X and Y data are generated using numpy.meshgrid(), which creates a rectangular grid out of two given one-dimensional arrays representing the Cartesian indexing or Matrix indexing.

Here’s a simple example of how to create a contour plot:

import matplotlib.pyplot as plt
import numpy as np

# Create data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# Generate contour plot
plt.contour(X, Y, Z)

# Display the plot
plt.show()

In this example, we have created a grid of X and Y values using np.meshgrid(). The Z values are computed as the sine of the square root of the sum of the squares of X and Y. We then pass these arrays to plt.contour() to generate the contour plot. Finally, we display the plot using plt.show().

You can also specify the number of contour levels by passing an integer to the levels argument, or specify the exact levels you want to draw by passing a list of values:

# Generate contour plot with 20 levels
plt.contour(X, Y, Z, levels=20)

# Generate contour plot with specified levels
plt.contour(X, Y, Z, levels=[-1, -0.5, 0, 0.5, 1])

# Display the plot
plt.show()

In the above code snippets, the first call to plt.contour() generates 20 contour levels automatically, while the second call creates contours only at the levels specified in the list.

Once you have generated the contour plot, you may want to add labels to the contour lines for better readability. You can do this using the plt.clabel() function:

# Generate contour plot
contour = plt.contour(X, Y, Z, levels=5)

# Add labels to contour lines
plt.clabel(contour)

# Display the plot
plt.show()

This will add labels to the contour lines, making it easier to identify the value represented by each line.

In the next section, we will look at how to create filled contour plots using matplotlib.pyplot.contourf, which can provide even more insight into the data by using color to indicate the value gradient.

Filled Contour Plots with matplotlib.pyplot.contourf

Filled contour plots, created with the matplotlib.pyplot.contourf function, are similar to contour plots but with color-filled areas between the lines. This can be especially helpful when you want to distinguish between different ranges of values and visualize the data gradient in a more continuous manner.

Here is an example of how to create a filled contour plot:

import matplotlib.pyplot as plt
import numpy as np

# Create data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# Generate filled contour plot
plt.contourf(X, Y, Z)

# Display the plot
plt.show()

In this code, we have again used np.meshgrid() to create a grid of X and Y values and then calculated Z as before. The plt.contourf() function is used here instead of plt.contour() to create the filled contour plot. By default, plt.contourf() uses a colormap to fill the areas between contour lines.

You can customize the colormap by passing the cmap parameter:

# Generate filled contour plot with a specific colormap
plt.contourf(X, Y, Z, cmap='viridis')

# Display the plot
plt.show()

Matplotlib has many colormaps available that you can use to enhance the visual appearance of your plots. You can also specify the number of contour levels or the exact levels, similar to the plt.contour() function:

# Generate filled contour plot with 20 levels
plt.contourf(X, Y, Z, levels=20)

# Generate filled contour plot with specified levels
plt.contourf(X, Y, Z, levels=[-1, -0.5, 0, 0.5, 1])

# Display the plot
plt.show()

These code snippets illustrate how to create a filled contour plot with either 20 automatically determined levels or specific levels defined by a list.

It is also possible to add a colorbar to your plot, which provides a key for the color gradient used in the filled contour. This can be done using the plt.colorbar() function:

# Generate filled contour plot
contourf = plt.contourf(X, Y, Z, levels=20)

# Add a colorbar
plt.colorbar(contourf)

# Display the plot
plt.show()

The colorbar will appear on the side of the plot, providing a reference for the range of values represented by the colors in the filled contour plot.

In the next section, we will discuss how to further customize contour plots, including how to adjust line properties, labels, and colorbars, to make your visualizations more informative and appealing.

Customizing Contour Plots

Customizing contour plots in matplotlib can greatly enhance the clarity and appeal of your data visualization. One common customization is adjusting the color and width of the contour lines. This can be done by passing additional parameters to the plt.contour() function. For example, you can specify the color of the lines:

# Generate contour plot with custom line color
plt.contour(X, Y, Z, colors='black')

Or you can change the width of the lines by using the linewidths parameter:

# Generate contour plot with custom line width
plt.contour(X, Y, Z, linewidths=2)

Another way to customize your contour plot is by adjusting the colormap used for plt.contourf(). Matplotlib offers a variety of colormaps that can be used to represent your data. You can set the colormap using the cmap parameter:

# Generate filled contour plot with a different colormap
plt.contourf(X, Y, Z, cmap='plasma')

Additionally, you can customize the colorbar associated with your filled contour plot. The plt.colorbar() function accepts arguments to modify aspects such as the position, size, and label of the colorbar:

# Add a custom colorbar
cbar = plt.colorbar(contourf, orientation='horizontal', shrink=0.75, label='Value')

Labels for the X and Y axes, as well as a title for the contour plot, can be added using the plt.xlabel(), plt.ylabel(), and plt.title() functions:

# Label the axes and add a title
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Contour Plot Example')

To further enhance your plot, you can also add a legend that explains the meaning of different line styles or colors. That is achieved by creating custom lines and using the plt.legend() function:

import matplotlib.lines as mlines

# Custom legend
line1 = mlines.Line2D([], [], color='red', label='Positive Values')
line2 = mlines.Line2D([], [], color='blue', label='Negative Values')
plt.legend(handles=[line1, line2])

These customizations allow you to create a contour plot this is not only informative but also visually appealing, making your data easier to understand and interpret.

Practical Examples and Use Cases

Now, let’s delve into some practical examples where contour plots are utilized, demonstrating their versatility and effectiveness in different scenarios. We’ll explore how contour plots can be used for visualizing geographical terrain, analyzing weather data, and understanding potential fields in physics.

Example 1: Visualizing Geographical Terrain

Contour plots are commonly used in geography to visualize the elevation of a terrain. The contour lines represent different altitude levels, providing a clear picture of the landscape’s topography. Here’s how you can create a contour plot to represent a mountainous region:

# Simulate elevation data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 - Y**2  # Example elevation function

# Generate contour plot
plt.contour(X, Y, Z, cmap='terrain')
plt.colorbar(label='Elevation (m)')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.title('Mountain Elevation Contour Plot')
plt.show()

Example 2: Analyzing Weather Data

Contour plots are also valuable in meteorology for visualizing weather parameters like temperature, pressure, or precipitation over a geographic area. Here’s an example of how you might use a contour plot to visualize temperature data:

# Example temperature data across a geographical grid
X, Y = np.meshgrid(np.arange(-100, 100, 1), np.arange(-100, 100, 1))
Z = np.random.normal(0, 1, X.shape)  # Simulated temperature variations

# Generate filled contour plot
plt.contourf(X, Y, Z, cmap='coolwarm')
plt.colorbar(label='Temperature (°C)')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.title('Regional Temperature Distribution')
plt.show()

Example 3: Understanding Potential Fields in Physics

In physics, contour plots can be used to visualize potential fields, such as gravitational or electric fields. These plots can help in understanding the spatial distribution and strength of the field. Here’s an example of visualizing an electric potential field:

# Simulate electric potential field data
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = 1 / (X**2 + Y**2 + 1)  # Example electric potential function

# Generate contour plot
plt.contour(X, Y, Z, cmap='viridis')
plt.colorbar(label='Electric Potential (V)')
plt.xlabel('X Position (m)')
plt.ylabel('Y Position (m)')
plt.title('Electric Potential Field Contour Plot')
plt.show()

These practical examples demonstrate the adaptability of contour plots in representing different types of data. Whether you are mapping out physical geography, analyzing meteorological patterns, or visualizing complex fields in physics, contour plots can provide a clear and concise representation of multi-dimensional data on a two-dimensional plane.

Source: https://www.pythonlore.com/creating-contour-plots-with-matplotlib-pyplot-contour-and-matplotlib-pyplot-contourf/


You might also like this video