A dual-axis chart is a Line graph (or a bar-and-line combination) with two y-axes — one on the left and one on the right — sharing a common x-axis. The point is to display two series with very different scales on the same time axis. A country’s GDP (in billions of dollars) and its population (in millions) over twenty years are hard to plot on a single y-axis because one would visually swamp the other; with two axes, each gets its own scale and both are readable.
Dual-axis charts have to be drawn carefully because the visual relationship between the two axes is somewhat arbitrary. Choosing different scales for the two axes can make two lines appear correlated when they aren’t, or hide a real correlation that does exist. The reader’s eye treats the visual proximity of the two lines as meaningful, but the proximity depends on the scaling choices, which are themselves a judgement call.
Used honestly — paired with clear axis labels, sensible scaling, and recognition that the visual relationship is constructed — the dual-axis chart is a useful tool. Used carelessly, it’s misleading. The data-visualization literature has a long-running debate about whether dual-axis charts should be used at all, with critics arguing that pairs of separate single-axis plots almost always communicate better.
In Matplotlib, a dual-axis chart is built with ax.twinx():
fig, ax1 = plt.subplots()
ax1.plot(years, gdp, 'b-')
ax1.set_ylabel('GDP (billions USD)', color='b')
ax2 = ax1.twinx()
ax2.plot(years, population, 'r-')
ax2.set_ylabel('Population (millions)', color='r')The twin axis shares the x-axis but has its own y-axis. Coloring each y-axis label to match its corresponding line helps the reader keep the two series straight.