#set document(title: "8.2 Contour Plots", author: "OpenStax") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 8.2#h(0.6em)Contour Plots #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Prerequisites] none #linebreak() #linebreak() ] #notebox("Note", rgb("#8a94a6"), rgb("#556666"), rgb("#f7f8fa"))[ #emph[Learning Objectives] + Describe a contour plot. + Interpret a contour plot ] Contour plots portray data for three variables in two dimensions. The plot contains a number of contour lines. Each contour line is shown in an X-Y plot and has a constant value on a third variable. Consider the Figure 1 that contains data on the fat, non-sugar carbohydrates, and calories present in a variety of breakfast cereals. Each line shows the carbohydrate and fat levels for cereals with the same number of calories. Note that the number of calories is not determined exactly by the fat and non-sugar carbohydrates since cereals also differ in sugar and protein. #figure(figph[Contour plot of breakfast cereals with Carbohydrates (10 to 50) on the x-axis and Fat (0 to 10) on the y-axis. Labelled contour lines at 75, 100, 125, 150, 175 and 200 calories run from the lower left to the upper right: the 75-calorie line encloses the low-carbohydrate, low-fat corner and successive lines step outward, so calories rise with both fat and carbohydrates. A black outline marks the boundary of the region where data exist, and a second 150 label appears along the lower right edge.], alt: "Contour plot of breakfast cereals with Carbohydrates (10 to 50) on the x-axis and Fat (0 to 10) on the y-axis. Labelled contour lines at 75, 100, 125, 150, 175 and 200 calories run from the lower left to the upper right: the 75-calorie line encloses the low-carbohydrate, low-fat corner and successive lines step outward, so calories rise with both fat and carbohydrates. A black outline marks the boundary of the region where data exist, and a second 150 label appears along the lower right edge.", caption: [Figure 1. A contour plot showing calories as a function of fat and carbohydrates.]) An alternative way to draw the plot is shown in Figure 2. The areas with the same number of calories are shaded. #figure(figph[The same calories-by-fat-and-carbohydrate contour plot with the bands between the lines filled in: deep blue in the low-calorie corner at low carbohydrate and low fat, through paler blue and grey in the middle, to red in the high-calorie region at high carbohydrate and high fat. Each shaded area represents values less than or equal to the label to its right.], alt: "The same calories-by-fat-and-carbohydrate contour plot with the bands between the lines filled in: deep blue in the low-calorie corner at low carbohydrate and low fat, through paler blue and grey in the middle, to red in the high-calorie region at high carbohydrate and high fat. Each shaded area represents values less than or equal to the label to its right.", caption: [Figure 2. A contour plot showing calories as a function of fat and carbohydrates with areas shaded. An area represents values less than or equal to the label to the right of the area.]) Contour plots are used in many disciplines. For example, in cartography, contour lines can indicate areas of equal elevation, whereas in meteorological maps, contour lines can show equal temperature or equal barometric pressure. #link("http://academic.brooklyn.cuny.edu/geology/leveson/core/linksa/elevation.html")[Application in Geology] #linebreak() #link("http://voyager.dvc.edu/~twieden/meteorology/contouring/contouring.html")[Application in Meteorology]