Bird
Raised Fist0
Matplotlibdata~5 mins

Dual y-axis for different scales in Matplotlib

Choose your learning style10 modes available
Introduction

Sometimes you want to show two sets of data on the same chart but they have very different sizes. Dual y-axis helps by giving each data set its own scale on the left and right sides.

Comparing temperature and rainfall over months on the same plot.
Showing sales numbers and profit margin together.
Plotting stock price and trading volume in one chart.
Visualizing heart rate and speed during exercise.
Syntax
Matplotlib
import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, 'color1')
ax2.plot(x, y2, 'color2')

ax1.set_ylabel('Label for y1')
ax2.set_ylabel('Label for y2')

plt.show()
Use ax1.twinx() to create a second y-axis sharing the same x-axis.
Each axis can have its own labels and colors to keep data clear.
Examples
This example shows two lines with different scales and colors on the same plot.
Matplotlib
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y1 = [10, 20, 30, 40]
y2 = [100, 200, 300, 400]

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b--')

ax1.set_ylabel('Small scale', color='g')
ax2.set_ylabel('Large scale', color='b')

plt.show()
Here, one axis shows squares of numbers, the other shows decreasing values.
Matplotlib
import matplotlib.pyplot as plt

x = range(5)
y1 = [1, 4, 9, 16, 25]
y2 = [100, 80, 60, 40, 20]

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

ax1.plot(x, y1, 'r-o')
ax2.plot(x, y2, 'b-s')

ax1.set_ylabel('Squares', color='r')
ax2.set_ylabel('Decreasing values', color='b')

plt.show()
Sample Program

This program plots temperature as a red line and rainfall as blue bars on the same chart. Each has its own y-axis scale.

Matplotlib
import matplotlib.pyplot as plt

# Data for plotting
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
temperature = [30, 32, 35, 33, 31]  # degrees Celsius
rainfall = [50, 40, 60, 70, 55]     # millimeters

fig, ax1 = plt.subplots()

# Plot temperature on left y-axis
ax1.plot(months, temperature, 'r-o')
ax1.set_ylabel('Temperature (°C)', color='r')
ax1.set_xlabel('Month')

# Create second y-axis for rainfall
ax2 = ax1.twinx()
ax2.bar(months, rainfall, alpha=0.3, color='b')
ax2.set_ylabel('Rainfall (mm)', color='b')

plt.title('Monthly Temperature and Rainfall')
plt.show()
OutputSuccess
Important Notes

Make sure to use different colors or styles for each axis to avoid confusion.

Dual y-axis can be confusing if overused; keep charts simple and clear.

Summary

Dual y-axis lets you show two data sets with different scales on one plot.

Use ax.twinx() to create the second y-axis.

Label each axis clearly and use different colors for clarity.

Practice

(1/5)
1. What is the main purpose of using a dual y-axis in a matplotlib plot?
easy
A. To compare two datasets with different scales on the same plot
B. To create two separate plots side by side
C. To add a legend to the plot
D. To change the color of the plot lines

Solution

  1. Step 1: Understand the purpose of dual y-axis

    A dual y-axis allows plotting two datasets with different value ranges on the same graph for easy comparison.
  2. Step 2: Identify the correct use case

    Comparing datasets with different scales requires two y-axes; other options do not describe this purpose.
  3. Final Answer:

    To compare two datasets with different scales on the same plot -> Option A
  4. Quick Check:

    Dual y-axis = compare different scales [OK]
Hint: Dual y-axis means two y-scales on one graph [OK]
Common Mistakes:
  • Thinking dual y-axis creates two separate plots
  • Confusing dual y-axis with adding legends
  • Assuming it changes line colors only
2. Which matplotlib function is used to create a second y-axis sharing the same x-axis?
easy
A. plt.subplots()
B. ax.twiny()
C. ax.twinx()
D. plt.plot()

Solution

  1. Step 1: Recall matplotlib methods for axes

    The method twinx() creates a second y-axis sharing the x-axis.
  2. Step 2: Differentiate from similar methods

    twiny() creates a second x-axis, not y-axis; subplots() creates figure and axes; plot() draws lines.
  3. Final Answer:

    ax.twinx() -> Option C
  4. Quick Check:

    Second y-axis = twinx() [OK]
Hint: Use ax.twinx() for second y-axis, twiny() is for x-axis [OK]
Common Mistakes:
  • Using plt.subplots() to create second y-axis
  • Confusing twinx() with twiny()
  • Trying to use plt.plot() to add axes
3. What will the following code output?
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot([1, 2, 3], [10, 20, 30], 'g-')
ax2.plot([1, 2, 3], [100, 200, 300], 'b-')
print(len(fig.axes))
medium
A. 2
B. 1
C. 3
D. 4

Solution

  1. Step 1: Understand axes creation

    plt.subplots() creates one axes (ax1), then ax1.twinx() adds a second y-axis (ax2), so total axes are 2.
  2. Step 2: Check figure axes count

    fig.axes is a list of all axes in the figure; after adding ax2, length is 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Two axes after twinx() = 2 [OK]
Hint: twinx() adds one more axes, so total axes count increases by 1 [OK]
Common Mistakes:
  • Assuming twinx() replaces the original axes
  • Thinking twinx() adds multiple axes
  • Confusing axes count with number of plots
4. Identify the error in this code snippet for creating dual y-axis:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = plt.twinx()
ax.plot([1,2,3], [10,20,30])
ax2.plot([1,2,3], [100,200,300])
plt.show()
medium
A. plt.show() is missing
B. plt.subplots() should be plt.figure()
C. ax2.plot() should be ax.plot()
D. plt.twinx() should be ax.twinx()

Solution

  1. Step 1: Check method usage for second y-axis

    twinx() is a method of an axes object, not plt module. So plt.twinx() is invalid.
  2. Step 2: Correct method call

    Use ax.twinx() to create the second y-axis sharing the x-axis.
  3. Final Answer:

    plt.twinx() should be ax.twinx() -> Option D
  4. Quick Check:

    twinx() is an axes method, not plt function [OK]
Hint: twinx() must be called on axes object, not plt [OK]
Common Mistakes:
  • Calling twinx() on plt instead of axes
  • Confusing figure and axes creation methods
  • Missing plt.show() (though present here)
5. You want to plot temperature (°C) and rainfall (mm) over months on the same plot with dual y-axes. Which of these code snippets correctly sets different y-axis labels and colors for clarity?
hard
A. ax1.set_xlabel('Temperature (°C)', color='red')\nax2.set_xlabel('Rainfall (mm)', color='blue')
B. ax1.set_ylabel('Temperature (°C)', color='red')\nax2.set_ylabel('Rainfall (mm)', color='blue')
C. ax1.set_ylabel('Rainfall (mm)', color='blue')\nax2.set_ylabel('Temperature (°C)', color='red')
D. ax1.set_title('Temperature and Rainfall')\nax2.set_title('Temperature and Rainfall')

Solution

  1. Step 1: Assign correct y-axis labels

    Temperature and rainfall are y-axis data, so use set_ylabel() on each axis with matching labels.
  2. Step 2: Use colors to distinguish axes

    Setting label colors helps visually separate the two y-axes for clarity.
  3. Final Answer:

    ax1.set_ylabel('Temperature (°C)', color='red')\nax2.set_ylabel('Rainfall (mm)', color='blue') -> Option B
  4. Quick Check:

    Correct y-labels and colors = ax1.set_ylabel('Temperature (°C)', color='red')\nax2.set_ylabel('Rainfall (mm)', color='blue') [OK]
Hint: Label y-axes with units and colors for clear dual-axis plots [OK]
Common Mistakes:
  • Setting x-axis labels instead of y-axis
  • Swapping labels between axes
  • Using titles instead of axis labels
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard