COLLEGE ALGEBRA • FUNCTIONS & GRAPHS

Shifts, Stretches/Compressions, and Reflections

Master the toolkit of graph transformations that lets you build complex functions from simple parent graphs.

Historical Context & Motivation

The idea that one curve can be systematically reshaped into another has roots stretching back to the earliest days of analytic geometry. When René Descartes and Pierre de Fermat independently developed coordinate geometry in the seventeenth century, they created the bridge between algebraic equations and geometric curves. This fusion made it possible to ask a powerful question: if altering a formula in a predictable way always produces a predictable geometric change, can we classify those changes once and for all? The study of graph transformations is the answer to that question, and it remains one of the most efficient tools in the modern algebraist's repertoire.

1637
Descartes Publishes La Géométrie
René Descartes introduces the Cartesian coordinate system, linking algebraic equations to geometric curves and making it possible to analyze how changes in equations affect graphical shapes.
1748
Euler's Introductio in Analysin Infinitorum
Leonhard Euler formalizes the concept of a function and systematically studies families of curves—parabolas, exponentials, trigonometric curves—laying the groundwork for recognizing parent functions and their variants.
1872
Klein's Erlangen Program
Felix Klein proposes that geometry should be classified by the transformations that preserve certain properties (translations, reflections, scalings), providing the group-theoretic foundation for the transformations studied in algebra courses today.
1960s
New Math Movement in Education
Graph transformations become a standard pedagogical tool in algebra curricula, enabling students to quickly sketch complex functions by modifying well-known parent graphs rather than plotting point by point.

The central question that motivates this lesson is deceptively simple: given a parent function whose graph you already know—say y = x², y = |x|, or y = √x—how can you predict the graph of a modified version like y = −2(x − 3)² + 5 without computing a single table of values? The answer lies in understanding four fundamental operations: horizontal and vertical shifts, vertical and horizontal stretches and compressions, and reflections across the coordinate axes. Mastering these transformations will dramatically expand the library of functions you can analyze and graph fluently.

Core Principles of Graph Transformations

Every graph transformation can be understood as a systematic modification of either the input (the x-variable) or the output (the y-value) of a parent function f(x). Operations applied to the output—adding a constant, multiplying by a scalar, or negating—affect the graph vertically and behave intuitively: what you do to y is what you see on the graph. Operations applied to the input, however, behave counter-intuitively: replacing x with (x − h) shifts the graph to the right, not the left, and replacing x with bx compresses the graph horizontally when b > 1 rather than stretching it. Keeping this inside-versus-outside distinction clear is the single most important conceptual anchor for the entire topic.

1

Vertical Shifts

Adding a constant k to f(x) shifts the graph up (k > 0) or down (k < 0) by |k| units. The shape and horizontal position remain unchanged: y = f(x) + k.
2

Horizontal Shifts

Replacing x with (x − h) shifts the graph right (h > 0) or left (h < 0) by |h| units. Note the counter-intuitive sign: subtracting a positive h moves right. y = f(x − h).
3

Vertical Stretch/Compression

Multiplying f(x) by a scalar a stretches the graph vertically when |a| > 1 and compresses it when 0 < |a| < 1. The x-intercepts remain fixed: y = a·f(x).
4

Horizontal Stretch/Compression

Replacing x with bx compresses horizontally when |b| > 1 and stretches when 0 < |b| < 1. The factor is the reciprocal of the intuitive direction: y = f(bx).
5

Reflections

Negating the output, y = −f(x), reflects across the x-axis. Negating the input, y = f(−x), reflects across the y-axis. Combining both yields a rotation of 180° about the origin.
KEY TAKEAWAY
Think of a parent function's graph as a photograph projected onto a screen. Shifts are like sliding the projector left, right, up, or down—every point moves the same amount. Stretches and compressions are like adjusting the lens zoom—the image grows or shrinks from a fixed reference line. Reflections are like flipping the slide inside the projector—the image mirrors across an axis. Critically, operations inside the function argument (affecting x) move or scale the 'slide' itself and therefore act in the opposite direction from what you might naïvely expect.

Visualizing Shifts and Reflections

The diagram below illustrates the four fundamental shift and reflection operations applied to the parent function y = x². The original parabola (shown in white/neutral) is transformed by each operation independently so that you can see the geometric effect in isolation. Pay particular attention to how the vertex moves for shifts and how the orientation changes for reflections.

The dashed gray curve is the parent function y = x². The cyan curve shows a vertical shift up by 2. The violet curve shows a horizontal shift right by 3. The pink curve shows reflection across the x-axis. The amber dashed curve shows y = (−x)², which coincides with y = x² because the squaring function is even.

Several key observations emerge from this diagram. First, the vertical shift (cyan) moves every point on the parabola upward by exactly the same amount—the shape is perfectly preserved. Second, the horizontal shift (violet) moves the vertex from (0, 0) to (3, 0), and every other point shifts right by 3 as well; notice that the formula reads (x − 3), not (x + 3), confirming the counter-intuitive sign convention. Third, the x-axis reflection (pink) flips the parabola so that it opens downward, turning every positive y-value into its negative counterpart. Finally, the y-axis reflection (amber dashed) appears to have no effect because x² is an even function—it is symmetric about the y-axis. For odd functions like y = x³, the y-axis reflection would produce a visibly different graph.

Mathematical Framework

All of the transformations discussed can be captured in a single master template. Given a parent function f(x), the general transformed function takes the form shown below. Each parameter corresponds to a distinct geometric operation, and the order in which you apply these operations matters.

GENERAL TRANSFORMATION TEMPLATE
y = a · f(b(x − h)) + k
a = vertical stretch/compression factor (|a| > 1 stretches, 0 < |a| < 1 compresses; a < 0 reflects over x-axis). b = horizontal stretch/compression factor (|b| > 1 compresses, 0 < |b| < 1 stretches; b < 0 reflects over y-axis). h = horizontal shift (h > 0 shifts right, h < 0 shifts left). k = vertical shift (k > 0 shifts up, k < 0 shifts down).
VERTICAL SHIFT
y = f(x) + k
Every point (x, y) on the parent graph maps to (x, y + k). The entire graph translates vertically by k units.
HORIZONTAL SHIFT
y = f(x − h)
Every point (x, y) on the parent graph maps to (x + h, y). A positive h shifts the graph to the right because the input must be h units larger to produce the same output.
REFLECTIONS
y = −f(x) reflects over the x-axis; y = f(−x) reflects over the y-axis
Negating the output flips y-coordinates. Negating the input flips x-coordinates. Applying both simultaneously is equivalent to a 180° rotation about the origin.
Order of Operations for Transformations
When multiple transformations are present, apply them in this order: (1) horizontal shift, (2) horizontal stretch/compression and reflection over the y-axis, (3) vertical stretch/compression and reflection over the x-axis, (4) vertical shift. Equivalently, work from the inside out for x-related changes and then from the outside in for y-related changes.

Stretches, Compressions & the Scale Factor

Stretches and compressions are often the most confusing transformations because horizontal scaling behaves inversely to what students expect. The diagram below compares a vertical stretch and a horizontal compression applied to y = x², making the geometric distinction clear. Observe that both transformations make the parabola narrower, but they accomplish this in fundamentally different ways.

Left panel: A vertical stretch by a factor of 2 (y = 2x²) doubles every y-value while x-values remain unchanged. Right panel: A horizontal compression by a factor of ½ (y = (2x)²) halves every x-value while y-values remain unchanged. For this particular parent function, y = 2x² and y = (2x)² = 4x² produce different results—the horizontal compression is actually steeper.
Summary of all six fundamental graph transformations
TransformationFormulaEffect on PointsVisual Result
Vertical stretchy = a·f(x), |a| > 1(x, y) → (x, ay)Graph pulled away from x-axis
Vertical compressiony = a·f(x), 0 < |a| < 1(x, y) → (x, ay)Graph pushed toward x-axis
Horizontal stretchy = f(bx), 0 < |b| < 1(x, y) → (x/b, y)Graph pulled away from y-axis
Horizontal compressiony = f(bx), |b| > 1(x, y) → (x/b, y)Graph pushed toward y-axis
Reflection over x-axisy = −f(x)(x, y) → (x, −y)Graph flips over x-axis
Reflection over y-axisy = f(−x)(x, y) → (−x, y)Graph flips over y-axis

Worked Example: Graphing a Fully Transformed Function

Consider the function g(x) = −2√(x + 3) + 4. Starting from the parent function f(x) = √x, we will identify each transformation, determine the order of application, and describe the final graph.

Graph g(x) = −2√(x + 3) + 4 by identifying all transformations
1
Step 1 — Identify the Parent FunctionThe core operation is the square root, so the parent function is f(x) = √x. Its graph starts at the origin (0, 0), passes through (1, 1) and (4, 2), and increases with decreasing slope.
Parent: f(x) = √x
2
Step 2 — Rewrite in Standard Transformation FormExpress g(x) to match the template y = a·f(b(x − h)) + k. We have g(x) = −2·√(x − (−3)) + 4. Comparing: a = −2, b = 1, h = −3, k = 4.
a = −2, b = 1, h = −3, k = 4
3
Step 3 — Apply the Horizontal ShiftSince h = −3, we shift the parent graph 3 units to the left. The starting point moves from (0, 0) to (−3, 0). Reference points (1, 1) and (4, 2) become (−2, 1) and (1, 2).
New start: (−3, 0); (−2, 1); (1, 2)
4
Step 4 — Apply the Vertical Stretch and ReflectionThe factor a = −2 combines two operations: a vertical stretch by |a| = 2 (every y-value is doubled) and a reflection over the x-axis (every y-value is negated). Multiply each y-coordinate by −2. The point (−3, 0) remains (−3, 0); (−2, 1) becomes (−2, −2); (1, 2) becomes (1, −4).
After stretch & reflect: (−3, 0); (−2, −2); (1, −4)
5
Step 5 — Apply the Vertical ShiftFinally, k = 4 shifts the graph 4 units up. Add 4 to every y-coordinate. The starting point becomes (−3, 4); (−2, 2); (1, 0). The graph is a square-root curve that has been flipped upside down, made steeper, shifted left 3, and shifted up 4.
Final key points: (−3, 4), (−2, 2), (1, 0)
6
Step 6 — Describe the Final GraphThe transformed function starts at the point (−3, 4) and decreases to the right, passing through (−2, 2) and (1, 0). Its domain is [−3, ∞) because the radicand x + 3 must be non-negative. Its range is (−∞, 4] because the reflected and shifted output can never exceed 4.
Domain: [−3, ∞), Range: (−∞, 4]

Common Pitfalls & Comparisons

Students frequently make predictable errors when applying graph transformations. The table below catalogues the most common mistakes alongside the correct reasoning. Understanding why these errors occur is as important as knowing the correct rule, because it strengthens your ability to self-check work on exams.

Five frequent transformation errors and their corrections
Common MistakeWhy It's WrongCorrect Approach
y = f(x − 3) shifts the graph left by 3Students see the minus sign and assume "minus means left." But to get the same y-value, x must be 3 units larger.y = f(x − h) shifts right when h > 0. Think: the graph chases the sign change.
y = f(2x) stretches the graph horizontally by 2The factor b = 2 is inside the argument, so the effect is the reciprocal: the graph compresses by 1/2.Horizontal scale factor is 1/|b|. y = f(2x) compresses horizontally by ½.
Applying vertical shift before vertical stretchIn y = 2f(x) + 3, if you add 3 first and then stretch, the shift itself gets doubled, producing wrong coordinates.Apply stretches/reflections first, then shifts. Multiply y by a, then add k.
Confusing y = −f(x) with y = f(−x)Both involve negation, but they act on different axes. Mixing them up flips the graph across the wrong axis.−f(x) negates outputs → x-axis reflection. f(−x) negates inputs → y-axis reflection.
Forgetting to factor out b before reading off hIn y = f(2x − 6), the shift is not 6. You must write it as f(2(x − 3)) to see h = 3.Always factor the coefficient of x from the entire argument: f(b(x − h)).
KEY TAKEAWAY
When in doubt, test a single convenient point. For any transformation, plug a known (x, y) pair from the parent function into the transformation rules and verify that your predicted point matches a direct computation. This "spot check" strategy, analogous to how an engineer validates a simulation against a hand calculation at one data point, will catch sign and order-of-operations errors before they cascade through an entire graph.

Connections to Advanced Theory

The transformations studied in this lesson are special cases of a broader mathematical framework. In linear algebra, shifts, stretches, and reflections are instances of affine transformations on ℝ². Stretches and reflections are linear maps (representable by 2×2 matrices), while translations are not linear but are affine—they can be represented using augmented matrices in homogeneous coordinates. This connection becomes central in courses on linear algebra, computer graphics, and differential equations, where transformation groups act on entire solution spaces.

How each college algebra transformation maps to a linear/affine algebra concept
College Algebra ViewAdvanced View
y = f(x − h) + k (shift)Translation vector ⟨h, k⟩ applied to every point; an affine isometry preserving distances.
y = a·f(bx) (stretch/compress)Diagonal scaling matrix diag(1/b, a); a linear transformation with determinant a/b.
y = −f(x) (x-axis reflection)Reflection matrix diag(1, −1); an orthogonal transformation with determinant −1.
y = f(−x) (y-axis reflection)Reflection matrix diag(−1, 1); combined with x-axis reflection gives a 180° rotation.
Composition of all four (order matters)General affine map T(x) = Ax + b; non-commutativity of matrix multiplication explains why order matters.

In calculus, transformations reappear when you study how derivatives and integrals behave under substitution. For instance, the chain rule can be interpreted as accounting for horizontal stretches: if g(x) = f(bx), then g′(x) = b·f′(bx), where the extra factor of b compensates for the horizontal compression. In signal processing, time-domain shifting and scaling of waveforms use exactly the same algebraic rules you have learned here, making this lesson a genuine prerequisite for engineering applications.

Practice Problems

PROBLEM 1CONCEPTUAL
Explain why replacing x with (x − 5) in a function f(x) shifts the graph to the right rather than to the left. Use the concept of input compensation in your answer.
PROBLEM 2BASIC CALCULATION
Given the parent function f(x) = |x|, describe all transformations and sketch the key points of g(x) = |x + 2| − 3.
PROBLEM 3INTERMEDIATE
Determine the equation of the function obtained by taking f(x) = x³, reflecting it over the x-axis, vertically compressing it by a factor of ½, shifting it 4 units to the right, and shifting it 1 unit up. List the transformations in the correct order.
PROBLEM 4APPLIED
A civil engineer models the cross-section of a parabolic arch bridge using the equation y = −0.02(x − 50)² + 50, where x and y are in meters and the ground is at y = 0. Identify the parent function and each transformation, then determine the bridge's maximum height and span (the distance between the two points where the arch meets the ground).
PROBLEM 5CRITICAL THINKING
Prove or disprove: for any function f, the graph of y = f(2x − 6) is identical to the graph of y = f(2(x − 6)). If they differ, describe precisely how each transformation sequence differs and identify the correct transformation parameters for y = f(2x − 6).

Lesson Summary

Graph transformations provide a powerful, unified framework for analyzing functions. Given any parent function f(x), the general template y = a·f(b(x − h)) + k encodes four operations: a horizontal shift of h units (right when h > 0), a horizontal stretch or compression by a factor of 1/|b| (with a y-axis reflection when b < 0), a vertical stretch or compression by |a| (with an x-axis reflection when a < 0), and a vertical shift of k units.

The critical conceptual insight is that operations on the input (inside the function) act in the opposite direction from what is naïvely expected, while operations on the output (outside the function) act in the intuitive direction. When multiple transformations are combined, apply horizontal changes (inside-out) first and vertical changes (outside-in) second, always performing stretches and reflections before shifts. Mastery of these rules lets you rapidly graph any function in the family of a known parent, a skill that extends directly into calculus, linear algebra, and applied mathematics.

Varsity Tutors • College Algebra • Shifts, Stretches/Compressions, and Reflections