Chris Parmer

Chris Parmer

November 12, 2026

Psychrometric Charts - A Complete Guide

TL;DR

  • A psychrometric chart is the map of moist air that heating, ventilation and air-conditioning (HVAC) engineers design with: dry-bulb temperature on the x axis, humidity ratio (grams of water per kilogram of dry air) on a y axis on the right, and curved lines of relative humidity (RH) that end at the saturation curve, where air can hold no more water.
  • Diagonal lines on the same chart give the wet-bulb temperature and the enthalpy (heat content), and steep lines give the specific volume, so one point tells you seven properties of the air. In much of Europe the same physics is drawn as the Mollier h-x diagram, and the chart is similar to a scatter plot with a grid of physics drawn behind it, like the Smith chart or a carpet plot.
  • Engineers draw air-conditioning processes on it as arrows (heating is horizontal, evaporative cooling follows a wet-bulb line, a cooling coil moves down and to the left), shade the comfort zone of ASHRAE Standard 55 (the American Society of Heating, Refrigerating and Air-Conditioning Engineers' thermal comfort standard), and plot a year of weather on it to choose a cooling strategy.
  • You can make a psychrometric chart with Plotly from go.Scatter lines computed with the psychrolib package, which implements the ASHRAE Handbook formulas, with your data on top as a marker trace. The code is below.

What is a psychrometric chart?

Psychrometric charts look like this:

Psychrometric chart from -10 to 50 degrees C with every hour of 2024 at Houston and Phoenix airports: Houston's blue points crowd against the saturation curve up to 22 g/kg, Phoenix's orange points spread along the bottom out to 47 degrees C; the ASHRAE 55 comfort zones are shaded green below a dashed 12 g/kg line; Phoenix's hottest hour, 47.2 degrees C at 6% RH, has a wet bulb of 19.9 degrees C, and Houston's highest wet bulb is 28.2 degrees C at 35.0 degrees C

Data: hourly airport observations from NOAA's (the National Oceanic and Atmospheric Administration's) Integrated Surface Database, Houston Intercontinental and Phoenix Sky Harbor, 2024; lines computed with psychrolib.

How do you read a psychrometric chart? In the example above, notice these things:

  • Each dot is one hour of 2024. Its position across is the air temperature, and its height is how much water the air held, in grams per kilogram of dry air. Houston's air held a median 14.1 g/kg and Phoenix's 4.4 g/kg, 3.2 times less, which is why Houston's cloud sits high and Phoenix's sits low. The dots fall in stripes because NOAA reports temperature and dew point to a tenth of a degree or a whole degree, so many hours share the same values; the data is plotted as reported, without jitter.
  • The black saturation curve is the most water air can hold at each temperature, and it roughly doubles with every 10 to 12 degrees C. The gray curves under it are relative humidity, the share of that maximum. Phoenix's hottest hour, 47.2 degrees C, was at only 6% relative humidity.
  • The dotted diagonals are wet-bulb temperatures, the coolest that evaporating water can make the air. Phoenix's hottest hour had a wet bulb of 19.9 degrees C, while Houston's highest wet bulb of the year was 28.2 degrees C at 35.0 degrees C, so in Houston sweat and evaporative coolers stop working well long before Phoenix's heat does.
  • The green areas are the ASHRAE Standard 55 comfort zones for winter and summer clothing, capped at 12 g/kg. Houston's air was above that cap in 59.9% of hours of 2024 and Phoenix's in 5.4%, so Houston's buildings spend most of the year removing water as well as heat.

It's often used for charts like these:

Psychrometric chart with four process arrows: a red horizontal heating arrow from Chicago's January hour at 0 degrees C to 21 degrees C, where relative humidity falls from 79% to 19%; a blue arrow from Houston's 34.4 degrees C summer afternoon down to a coil leaving at 13 degrees C, removing 8.7 g of water and 44.1 kJ per kg; a green evaporative cooling arrow from Phoenix at 42.0 degrees C along a wet-bulb line to 22.6 degrees C; and a purple dashed mixing line at 27.2 degrees C

Air-conditioning processes. The textbook use: every process is a straight move, and the length of each arrow on the two axes is the heat and water to add or remove. Cooling Houston's median summer afternoon (34.4 degrees C, dew point 22.8 degrees C) through a coil to 13 degrees C takes out 8.7 g of water and 44.1 kJ of heat per kg of air. Data: NOAA Integrated Surface Database, 2024 (Chicago, Houston, Phoenix); the end states are design choices, not measurements.

Psychrometric chart of hourly sensor readings in three rooms of a Belgian house from January to May 2016 against the ASHRAE 55 winter comfort zone: the kitchen's orange cloud sits mostly inside the zone, 71.9% of hours, the office 46.4%, and the parents' bedroom's purple cloud mostly to its cool side, 25.5%; outdoor hours sit in gray near the saturation curve

Comfort zones and building monitoring. Indoor sensors plotted against the ASHRAE Standard 55 comfort zone show which rooms are too cool, too warm or too humid. In a low-energy house in Belgium, the kitchen was in the winter zone 71.9% of hours from January to May 2016, the parents' bedroom only 25.5%, because it was kept cooler. Data: UCI Machine Learning Repository, Appliances energy prediction (Candanedo, Feldheim and Deramaix 2017), CC BY 4.0.

Six psychrometric charts of every hour of 2024: Miami's points crowd the top against the saturation curve, 75.8% of hours above 12 g/kg; Houston 59.9%; Chicago 16.8%; Seattle 0.03%, with its cloud low and cool; Phoenix 5.4%, with a low dry cloud and a summer monsoon cluster above 10 g/kg; Denver 1.7%, drawn at 83.3 kPa

Climate analysis for building design. Architects and mechanical engineers plot a site's weather on the chart before they choose a cooling strategy. Miami's air held more than 12 g of water per kg in 75.8% of the hours of 2024 and Seattle's in 0.03%, so Miami needs dehumidification and Seattle mostly needs heat. Data: NOAA Integrated Surface Database, 2024, six airports, each chart drawn at its airport's median pressure.

How to read a psychrometric chart

A psychrometric chart puts seven properties of moist air on one page. Any two of them (plus the air pressure) fix the rest, so if you know where a point is, you can read off all the others. This is one point, Houston's median summer afternoon in 2024, read seven ways:

One state point at 34.4 degrees C and 17.5 g/kg on a psychrometric chart, with seven readings: dry bulb 34.4 degrees C straight down; humidity ratio 17.5 g/kg across to the right axis; dew point 22.8 degrees C at the saturation curve; wet bulb 25.9 degrees C; relative humidity 51%; enthalpy 79.6 kJ/kg along the enthalpy line to the outside scale; specific volume 0.896 cubic meters per kg along the steep line

Data: median dry bulb and dew point of the 3 pm and 4 pm observations at Houston Intercontinental in July and August 2024, NOAA Integrated Surface Database; computed with psychrolib at sea level.

Dry-bulb temperature and humidity ratio (the two axes)

The dry-bulb temperature is what an ordinary thermometer reads, shielded from sunshine and moisture, and it runs along the x axis. The humidity ratio (also called the moisture content or mixing ratio) is the mass of water vapor carried by each kilogram of dry air, in grams per kilogram (g/kg) on SI charts and in grains per pound on US charts (7,000 grains make a pound). It runs up a y axis on the right, because the left side of the chart is taken by the curved edge where the air is saturated. Heating or cooling air without adding or removing water moves a point straight across, and adding or removing water moves it straight up or down.

Relative humidity and the saturation curve

Warm air can hold more water vapor than cold air: at sea level, saturated air at 20 degrees C holds 14.7 g/kg and at 30 degrees C 27.2 g/kg. The top-left edge of the chart, the saturation curve, joins those maximums, and it's also the 100% relative humidity line. Relative humidity is the share of that maximum the air holds (strictly, the ratio of the water vapor's pressure to its pressure at saturation), so the 50% line sits about halfway between the saturation curve and the x axis. Because the maximum rises with temperature, the same air has a lower relative humidity when it's warmer: the more-examples section has a Houston day where relative humidity runs from 84% to 28% while the water content barely changes.

Dew point

The dew point is the temperature at which the air's water would start to condense if you cooled it without changing its water content. On the chart, move left along the horizontal line from the point until you hit the saturation curve and read the temperature there. Houston's afternoon point has a dew point of 22.8 degrees C, so any surface colder than that (a cold drink, a cooling coil, a window) gets wet. Because the dew point depends only on the humidity ratio (and the pressure), meteorologists often quote it instead of the humidity ratio, and it is the temperature to compare with the surfaces in a building.

Wet-bulb temperature

The wet-bulb temperature is what a thermometer reads when its bulb is wrapped in a wet wick and air blows over it. Water evaporates from the wick and cools it until the air next to it is saturated, so the wet bulb is the coolest temperature evaporation alone can reach, and it's the limit for evaporative coolers, cooling towers and sweating. On the chart, follow the dotted diagonal from the point up and left to the saturation curve: Houston's afternoon point has a wet bulb of 25.9 degrees C. The further the point is from saturation, the bigger the gap between dry bulb and wet bulb, and the more cooling evaporation can do.

Enthalpy

Enthalpy is the heat content of the air, in kilojoules per kilogram of dry air (kJ/kg) counted from 0 degrees C dry air, including the latent heat stored in its water vapor. Lines of constant enthalpy are almost parallel to the wet-bulb lines, so ASHRAE charts draw them as a scale of ticks outside the saturation curve; follow the diagonal from a point out to that scale. Houston's afternoon point holds 79.6 kJ/kg. The difference in enthalpy between two points, multiplied by the mass of air moved, is the heating or cooling load, which is how engineers size equipment from the chart.

Specific volume

The specific volume is the space one kilogram of dry air (with its water) takes up, in cubic meters per kilogram, and it appears as steep lines labeled along the bottom. Houston's afternoon air takes 0.896 m³/kg. Fans move a volume of air, while loads are worked out per kilogram, so this is the conversion between them.

The chart is drawn for one pressure

Every line on a psychrometric chart depends on the air pressure. Standard charts are drawn at sea level (101.325 kPa), which Wikipedia says is common practice up to about 600 m of altitude. Higher up, the same vapor pressure is a bigger share of thinner air, so the humidity ratio at saturation goes up: the Denver example below draws the chart at 83.3 kPa, where saturated air at 20 degrees C holds 18.0 g/kg instead of 14.7.

The ASHRAE 55 comfort zone

ASHRAE Standard 55 defines thermal comfort with the predicted mean vote (PMV), Ole Fanger's model of how a large group of people would rate a room on a scale from -3 (cold) to +3 (hot). Its graphic comfort zone method shades, on a psychrometric chart, the temperatures and humidities where PMV stays between -0.5 and +0.5 for people at office work (1.0 to 1.3 met, a unit of metabolic rate) in still air, in winter clothing (1.0 clo, a unit of clothing insulation) or summer clothing (0.5 clo). The zones lean to the left at the top because humid air feels warmer, and they stop at a humidity ratio of 0.012 kg/kg (12 g/kg); above that, the standard asks for the full PMV calculation (Wikipedia, ASHRAE 55). The zones in this guide are computed with pythermalcomfort, which implements the standard's PMV code, at 1.1 met and 0.1 m/s air speed.

A short history

Willis Carrier, the engineer who built one of the first modern air-conditioning systems, presented "Rational Psychrometric Formulae" to the American Society of Mechanical Engineers in December 1911 (full text on Wikisource; Wikipedia calls it the "Magna Carta of Psychrometrics"). Its charts already had today's layout: dry bulb along the bottom, the weight of water per pound of dry air up the side, the saturation curve, and "diagonal adiabatic lines ... representing saturation or wet-bulb temperatures". Wikipedia, citing Gatley (2004) in the ASHRAE Journal, dates Carrier's first chart to 1904. This is the range of his Fig. 1, redrawn with today's formulas, with the worked example from the paper:

Psychrometric chart in degrees F and grains per pound from 20 to 110 degrees F, with relative humidity curves every 10% and dotted wet-bulb lines every 5 degrees F; Carrier's example point at 95 degrees F and 98 grains has a wet bulb of 74.9 degrees F by today's formulas, against the 75 he read, and a red arrow cools it to 40 degrees F saturated, which takes 23.0 Btu per pound by today's enthalpies against the 22.5 he computed

Data: computed with psychrolib in inch-pound (IP) units at 29.92 inches of mercury, Carrier's standard pressure; the example is from paragraph 87 of W. H. Carrier, "Rational Psychrometric Formulae", Journal of the American Society of Mechanical Engineers 33(11), 1911.

Carrier asked for "the refrigeration necessary to cool 1 lb. of air containing 98 grains of moisture and having a dry bulb temperature of 95 deg., to a final temperature of 40 deg. saturated", read a wet bulb of 75 degrees F from his chart, and answered 22.5 Btu (British thermal units) per pound. Today's ASHRAE formulas give 23.0. In 1923 Richard Mollier published the h-x diagram, with enthalpy and humidity ratio as its coordinates, which engineers in Germany, Scandinavia, Eastern Europe and much of the rest of Europe still use (Wikipedia), and ASHRAE's own charts have used similar oblique enthalpy coordinates since 1961.

Alternatives to a psychrometric chart

Here's the same Houston and Phoenix weather drawn six ways. Some are better for the question, some worse, some just different:

Six charts of every hour of 2024 at Houston and Phoenix: a psychrometric chart, a Mollier h-x diagram with humidity ratio across and temperature up the side, temperature against relative humidity with the two clouds overlapping in diagonal bands, temperature against dew point with a diagonal saturation line, monthly median dry bulb and dew point lines over the year, and overlapping histograms of humidity ratio with Phoenix peaking near 4 g/kg and Houston near 18 g/kg
  • Mollier h-x diagram (works too). The same physics turned on its side, with temperature up the side and humidity ratio across. Use it when your readers were trained in Europe; the example under More examples shows it in full.
  • Temperature against dew point (works too, for weather). The dew point carries the same information as the humidity ratio at a given pressure, and the diagonal where the two are equal is the saturation line. Meteorologists read this more easily, but there are no enthalpy or wet-bulb lines to design with.
  • Temperature against relative humidity (worse). Relative humidity falls when the temperature rises even if the water content doesn't change, so every daily cycle smears into a diagonal band and the two climates overlap.
  • Monthly medians over time (different). A line chart shows when the humid months come, which the psychrometric chart hides, but not how temperature and moisture combine in each hour.
  • Histogram of humidity ratio (different). A histogram compares how much water each city's air holds, but drops temperature entirely.

For a year of hourly points, a 2D histogram or density contour on psychrometric axes shows where the hours pile up better than overlapping dots, and small multiples of psychrometric charts, as in the six-city example above, compare sites without overplotting.

How to make a psychrometric chart

With AI

ChatGPT, Claude Code, GitHub Copilot, Cursor and other AI tools are excellent at writing Plotly code. Name Plotly in the prompt, and ask for the lines to be computed with psychrolib so the physics is right:

Make a plotly psychrometric chart in SI units at sea-level pressure (101325 Pa).
- Compute every line with psychrolib (SetUnitSystem(SI)): the saturation curve, relative humidity lines every 10%,
wet-bulb lines every 5 C, enthalpy ticks outside the saturation curve every 10 kJ/kg, and specific volume lines.
- Dry-bulb temperature on x from -10 to 50 C, humidity ratio in g/kg on a y axis on the right.
- Plot hourly observations from weather.csv (columns: city, tdb_c, tdp_c) as translucent go.Scattergl markers,
with the humidity ratio from the dew point and RH, dew point and wet bulb in the hover.
- Shade the ASHRAE 55 comfort zones and draw a dashed line at 12 g/kg.
- Check: at 25 C dry bulb and 20 C wet bulb, the chart should read about 63% RH and 12.6 g/kg.

With Plotly Studio

Plotly Studio is a desktop app where you point an AI at a dataset and it builds charts and a Dash app around your questions. Ask for a psychrometric chart the same way:

Show every hour of this weather file on a psychrometric chart: dry bulb on x, humidity ratio in g/kg on the right axis, relative humidity and wet-bulb lines computed with psychrolib at the site's pressure, the ASHRAE 55 comfort zone shaded, and a dropdown to pick the month.

Make a psychrometric chart in Python or JavaScript

This is the code AI tools write under the hood. You can make a psychrometric chart with Plotly from go.Scatter lines computed from the physics of moist air, with a right-hand y axis and your data on top. This helper returns a go.Figure, and every example in this guide builds on the same idea:

import numpy as np
import pandas as pd
import plotly.graph_objects as go
import psychrolib as psy
psy.SetUnitSystem(psy.SI)
P = 101325 # pressure in Pa; use your site's pressure at altitude
def psychrometric_chart(t_min=-10, t_max=50, w_max=25, p=P):
"""A psychrometric chart in Plotly: dry bulb on x, humidity ratio (g/kg) on a right-hand y axis."""
t = np.linspace(t_min, t_max, 300)
fig = go.Figure()
for rh in range(10, 101, 10): # relative humidity lines; 100% is the saturation curve
w = np.array([psy.GetHumRatioFromRelHum(x, rh / 100, p) for x in t]) * 1000
fig.add_trace(go.Scatter(x=t[w <= w_max], y=w[w <= w_max], mode="lines", hoverinfo="skip", showlegend=False,
line=dict(color="black" if rh == 100 else "gray", width=2 if rh == 100 else 0.8)))
for twb in range(t_min, t_max, 5): # wet-bulb lines, from the saturation curve down to dry air
tt = np.linspace(twb, t_max, 50)
w = np.array([psy.GetHumRatioFromTWetBulb(x, twb, p) for x in tt]) * 1000
ok = (w >= 0) & (w <= w_max)
fig.add_trace(go.Scatter(x=tt[ok], y=w[ok], mode="lines", hoverinfo="skip", showlegend=False,
line=dict(color="gray", width=0.8, dash="dot")))
fig.update_xaxes(title_text="Dry-bulb temperature (°C)", range=[t_min, t_max])
fig.update_yaxes(title_text="Humidity ratio (g/kg dry air)", range=[0, w_max], side="right")
fig.update_layout(template="simple_white")
return fig
# Hourly observations with dry bulb and dew point in °C, e.g. from NOAA's Integrated Surface Database
df = pd.read_csv("weather.csv") # columns: city, tdb_c, tdp_c
df["w"] = [psy.GetHumRatioFromTDewPoint(x, P) * 1000 for x in df.tdp_c]
fig = psychrometric_chart()
colors = {"Houston": "#2a78d6", "Phoenix": "#eb6834"}
for city, g in df.groupby("city"):
fig.add_trace(go.Scattergl(x=g.tdb_c, y=g.w, mode="markers", name=city,
marker=dict(size=3, opacity=0.3, color=colors[city])))
fig.show()

psychrolib (pip install psychrolib) implements the moist-air formulas of the ASHRAE Handbook Fundamentals in SI and IP units (Meyer and Thevenard 2019); call psy.SetUnitSystem(psy.IP) for a chart in degrees F and pounds. This snippet is the core of every chart in this guide. The full version adds enthalpy ticks outside the saturation curve, specific volume lines, line labels, the ASHRAE 55 comfort zone polygons and the hover text with relative humidity, dew point and wet bulb.

In JavaScript, plotly.js draws the same chart from the formulas directly. This version uses the Magnus formula for the saturation vapor pressure, a close approximation, and ASHRAE's wet-bulb equation:

<div id="chart"></div>
<script src="https://cdn.plot.ly/plotly-4.1.1.min.js"></script>
<script>
// Saturation humidity ratio (kg/kg) at sea level, with the Magnus formula for the vapor pressure (Pa)
const P = 101325;
const pws = t => 611.2 * Math.exp(17.62 * t / (243.12 + t));
const W = (t, rh) => 0.621945 * rh * pws(t) / (P - rh * pws(t));
const T = Array.from({length: 121}, (_, i) => i * 0.5 - 10); // -10 to 50 degrees C
const traces = [];
for (let rh = 0.1; rh <= 1.001; rh += 0.1) { // relative humidity lines, 100% = saturation
const pts = T.filter(t => W(t, rh) * 1000 <= 25);
traces.push({x: pts, y: pts.map(t => W(t, rh) * 1000), mode: "lines", hoverinfo: "skip",
line: {color: rh > 0.99 ? "black" : "gray", width: rh > 0.99 ? 2 : 0.8}});
}
for (let twb = 0; twb <= 30; twb += 5) { // wet-bulb lines (ASHRAE Fundamentals, eq. 33)
const pts = T.filter(t => t >= twb);
const w = pts.map(t => ((2501 - 2.326 * twb) * W(twb, 1) - 1.006 * (t - twb)) / (2501 + 1.86 * t - 4.186 * twb));
traces.push({x: pts.filter((_, i) => w[i] >= 0), y: w.filter(v => v >= 0).map(v => v * 1000), mode: "lines",
hoverinfo: "skip", line: {color: "gray", width: 0.8, dash: "dot"}});
}
// One state point: Houston's median July-August afternoon in 2024, 34.4 C with a 22.8 C dew point
traces.push({x: [34.4], y: [W(22.8, 1) * 1000], mode: "markers", marker: {size: 12, color: "#2a78d6"},
name: "Houston, summer afternoon"});
Plotly.newPlot("chart", traces, {
width: 1000, height: 650, showlegend: false,
xaxis: {title: {text: "Dry-bulb temperature (°C)"}, range: [-10, 50], zeroline: false},
yaxis: {title: {text: "Humidity ratio (g/kg dry air)"}, range: [0, 25], side: "right"}
});
</script>

Share it

Every Plotly chart has a Share chart button (the cloud icon in its toolbar) that uploads it to Plotly Cloud and gives you a link. Only you can see it until you change its visibility.

For a live app, put the chart in a Dash app and publish it with the Plotly Cloud CLI. Coding agents can run these commands for you:

pip install "dash[cloud]"
plotly user login
plotly app publish

If your data has to stay in your own cloud or data center, publish to Dash Enterprise instead.

Dos and don'ts

Most psychrometric charts that are hard to read bury the data under the grid, or leave out what the reader needs to trust the numbers. Here are the same Houston and Phoenix hours both ways, in the same blue and orange.

Don't draw every line family in the same dark weight so the saturation curve doesn't stand out, extend the wet-bulb lines past the saturation curve into air that can't exist, show the humidity ratio in raw kg/kg on a left axis labeled with column names ("w", "tdb_c"), use large opaque markers that hide the lines, leave the lines unlabeled, keep a serif font and a tinted background, and say nothing about the pressure:

A psychrometric chart where relative humidity and wet-bulb lines are all the same dark gray, the wet-bulb lines run past the saturation curve into the empty top-left corner, the axes read tdb_c and w with ticks from 0 to 0.025, large opaque blue and orange dots hide the lines, the font is serif and the background blue-gray

Do keep the background lines light and the saturation curve heavy, stop every line at saturation, put the humidity ratio in g/kg on the right with a unit, label each line family where it ends (relative humidity at the right, wet bulb on the saturation curve, enthalpy on the outside scale, specific volume at the bottom), use small translucent markers, and say which pressure the lines are drawn for:

The same hours on a clean psychrometric chart: light gray relative humidity, wet-bulb and specific volume lines with labels, a heavy black saturation curve, enthalpy ticks outside it, humidity ratio in g/kg on the right axis, small translucent dots, and a note that the lines are at sea level, 101.325 kPa

Checklist

Do

  • Say which pressure (or altitude) the chart is drawn for, and draw it at the site's pressure above about 600 m.
  • Put the humidity ratio on the right in g/kg (SI) or grains or pounds per pound of dry air (IP), and say "dry air".
  • Draw the saturation curve heaviest, and stop every other line at it.
  • Compute the lines from a tested implementation of the ASHRAE formulas, such as psychrolib, rather than by hand.
  • Draw processes as arrows from the starting state, and label what is measured and what is a design choice.

Don't

  • Plot relative humidity on the y axis and call it a psychrometric chart; it smears daily cycles into diagonal bands.
  • Mix SI and IP units, or °C with °F, on one chart.
  • Read an outdoor hour inside the comfort zone as comfortable: the zone assumes indoor air speed, clothing and activity.
  • Shade the comfort zone above 12 g/kg; ASHRAE 55 asks for the full PMV calculation there.

Options to customize

A psychrometric chart in Plotly is a set of go.Scatter lines with data traces on top, so these are the options that matter most. The full lists are in the scatter trace reference, the axes documentation and the text and annotations documentation.

  1. go.Scatter(mode="lines", hoverinfo="skip"): one trace per background line, so hovering only shows your data.
  2. fig.update_yaxes(side="right"): the humidity ratio axis on the right, as on ASHRAE charts.
  3. line=dict(width=..., dash="dot", color=...): a heavy saturation curve, light relative humidity lines, dotted wet-bulb lines.
  4. go.Scattergl(mode="markers", marker=dict(size=3, opacity=0.3)): WebGL markers for a year (8,760 hours) or more of observations.
  5. customdata and hovertemplate: relative humidity, dew point and wet bulb for each point in the hover.
  6. go.Scatter(fill="toself"): a shaded comfort zone or design envelope from a closed polygon.
  7. fig.add_annotation(x=, y=, ax=, ay=, axref="x", ayref="y", arrowhead=2): process arrows between two states in data coordinates.
  8. fig.add_annotation(textangle=...) with bgcolor="white": labels on lines that stay readable over the grid.
  9. fig.add_hline(y=12): a design limit such as the comfort zone's 12 g/kg cap.
  10. make_subplots(rows=2, cols=3, shared_xaxes=True, shared_yaxes=True): small multiples of charts for several sites.

More psychrometric chart examples

Six more psychrometric charts, each with its source, the technique that makes it work, and a prompt to rebuild it. Three use NOAA weather data and three use indoor sensor data.

1. Denver's thin air needs its own chart

Psychrometric chart drawn at Denver's 83.3 kPa with 8,742 hours of 2024: the solid saturation curve sits above the dashed sea-level one, and at 20 degrees C saturated air holds 18.0 g/kg in Denver against 14.7 g/kg at sea level, 22% more

At Denver International Airport's median 2024 station pressure, 83.3 kPa, saturated air at 20 degrees C holds 18.0 g of water per kg, 22% more than the 14.7 g/kg of a sea-level chart. Reading Denver's hours against sea-level lines would put their relative humidity in the wrong place. Data: NOAA Integrated Surface Database, Denver International Airport (1,647 m), 2024.

Tip: draw the sea-level lines dashed behind the site's lines, so readers see how far the curves move.

Get the data from NOAA's Integrated Surface Database (global-hourly CSV for station 72565003017, Denver International
Airport, 2024; keep report type FM-15 and parse TMP, DEW and the station pressure in MA1; columns: time_local,
tdb_c, tdp_c, p_station_pa).
Make a plotly psychrometric chart at the station's median pressure with psychrolib, the sea-level saturation and
50% lines dashed gray, every hour as a translucent marker, and the two saturation values at 20 C labeled.

2. Phoenix's monsoon on the wet-bulb lines

Psychrometric chart of Phoenix afternoons from noon to 6 pm: June's orange points sit low, below 7 g/kg, and August's purple points higher, up to 17 g/kg; thick lines mark June's median wet bulb of 18.5 degrees C and August's of 22.2 degrees C, with dotted wet-bulb lines every 1 degree C

At the same 41.1 degrees C median afternoon temperature, Phoenix's August air held 2.1 times June's water, because the summer monsoon brings moist air from the south. That raised the median wet bulb, the coolest air an evaporative cooler can make, from 18.5 to 22.2 degrees C. Data: NOAA Integrated Surface Database, Phoenix Sky Harbor, June and August 2024, noon to 6 pm local time.

Tip: draw the wet-bulb lines every 1 degree, because evaporative cooling moves along them.

Get the data from NOAA's Integrated Surface Database (global-hourly CSV for station 72278023183, Phoenix Sky Harbor,
2024; report type FM-15; columns: time_local, tdb_c, tdp_c, p_station_pa) and keep June and August, noon to 6 pm.
Make a plotly psychrometric chart at the airport's median pressure with wet-bulb lines every 1 C, the two months in
two colors, and each month's median wet-bulb line drawn thick and labeled.

3. One day in Houston: relative humidity swings, water doesn't

Psychrometric chart of the 23 hourly observations at Houston on September 28, 2024, joined in order: the path runs almost horizontally between 8.9 and 11.5 g/kg, from 18.9 degrees C at 84% relative humidity at 03:53 to 33.9 degrees C at 28% at 16:53

On September 28, 2024, Houston's temperature swung 15.0 degrees C, from 18.9 to 33.9, while its humidity ratio stayed between 8.9 and 11.5 g/kg, so relative humidity ran from 84% before dawn to 28% in the afternoon. On the chart, the day is a nearly flat path across the relative humidity lines. Data: NOAA Integrated Surface Database, Houston Intercontinental, local time.

Tip: join the hours in order and shade the markers from night to afternoon, so the path reads as a daily cycle.

Get the data from NOAA's Integrated Surface Database (global-hourly CSV for station 72243012960, Houston
Intercontinental, 2024; report type FM-15; columns: time_local, tdb_c, tdp_c, p_station_pa) and keep
September 28 in local time.
Make a plotly psychrometric chart from 10 to 40 C with the hours joined in order as lines+markers, marker color by
hour of day, and the coolest and hottest hours labeled with their relative humidity.

Another way to see it: as time series, relative humidity mirrors the temperature while the dew point and humidity ratio stay nearly flat, which is the same story told hour by hour.

Three stacked time series for Houston on September 28, 2024: dry bulb rising from about 19 to 34 degrees C in the afternoon while the dew point slips from 16 to 12 degrees C; relative humidity falling from 84% to 28% and back to 55%; and the humidity ratio nearly flat between 8.9 and 11.5 g/kg

4. The Mollier h-x diagram, the European form

Mollier h-x diagram with humidity ratio x from 0 to 14 g/kg across and temperature from -10 to 35 degrees C up the side, nearly horizontal isotherms, relative humidity curves bending down to the saturation curve at the bottom right, dotted straight enthalpy lines, the living room's blue cloud around 20 degrees C and 6 g/kg, and outdoor hours in gray near saturation

The Belgian house's living room air held a median 5.93 g/kg from January to May 2016, 1.04 g more than outdoors, at 20.0 instead of 6.9 degrees C. On a Mollier diagram, humidity ratio runs across, temperature runs up, and the enthalpy lines are straight and evenly spaced because the vertical position is enthalpy minus the latent heat of the water. Data: UCI Machine Learning Repository, Appliances energy prediction (Candanedo et al. 2017), CC BY 4.0, hourly means.

Tip: plot the vertical position as h - 2501x in kJ/kg and label its ticks in degrees C, which is how Mollier made the isotherms nearly horizontal.

Get the data from the UCI Machine Learning Repository ("Appliances energy prediction", energydata_complete.csv:
date, T2 and RH_2 for the living room, T_out and RH_out from the Chievres weather station, Press_mm_hg) and
average to hourly means.
Make a plotly Mollier h-x diagram: humidity ratio x in g/kg on the x axis, y = 1.006 t + 1.86 t x (kJ/kg) with
ticks labeled in C, relative humidity curves, dotted enthalpy lines y = h - 2501 x, and the two series as markers.

5. A shower, 10 minutes at a time

Psychrometric chart of a bathroom sensor every 10 minutes on May 14, 2016, from 9:00 to 13:00: the path shoots almost straight up from 6.8 g/kg at 23.5 degrees C and 37% RH at 09:10 to 15.9 g/kg at 25.1 degrees C and 79% at 10:00, then falls back to 8.4 g/kg at 23.9 degrees C and 45% by 13:00

A morning shower took the bathroom from 6.8 to 15.9 g of water per kg of air in 50 minutes, while its temperature rose only 1.6 degrees C, from 23.5 to 25.1. Adding water at a nearly constant temperature is a vertical move on the chart, and ventilation brought it back down to 8.4 g/kg by 13:00. Data: UCI Machine Learning Repository, Appliances energy prediction (Candanedo et al. 2017), CC BY 4.0; we infer the shower from the moisture spike.

Tip: label the before, peak and after states with time, temperature, relative humidity and humidity ratio.

Get the data from the UCI Machine Learning Repository ("Appliances energy prediction", energydata_complete.csv:
date, T5 and RH_5 for the bathroom, Press_mm_hg) and keep May 14, 2016, 9:00 to 13:00.
Make a plotly psychrometric chart from 15 to 32 C with the 10-minute readings joined in order as lines+markers, and
the lowest point before the peak, the peak and the last reading labeled.

6. People add water to a dry winter office

Psychrometric chart of an office room's 10-minute means in February 2015: empty periods in gray and occupied periods in blue, mostly between 19 and 25 degrees C and 3 to 6.5 g/kg, scattered around a heavy black 30% relative humidity line, with the ASHRAE 55 winter comfort zone shaded

With people in it, the office's air held a median 0.49 g/kg more water and was 1.4 degrees C warmer than when it was empty, since people breathe out water vapor and give off heat. Its relative humidity was below 30% in 64% of the 10-minute means, typical of heated winter air, and ASHRAE 55 sets no lower humidity limit. Data: UCI Machine Learning Repository, Occupancy Detection (Candanedo and Feldheim 2016), CC BY 4.0, February 2 to 18, 2015.

Tip: draw the one relative humidity line your readers care about in black, here 30%.

Get the data from the UCI Machine Learning Repository ("Occupancy Detection": datatraining.txt, datatest.txt and
datatest2.txt with date, Temperature, Humidity, Light, CO2, HumidityRatio and Occupancy) and average to 10-minute
means.
Make a plotly psychrometric chart from 15 to 28 C with empty periods in gray and occupied periods in blue, the
ASHRAE 55 winter comfort zone shaded, and the 30% relative humidity line drawn heavy.

FAQ

bluesly
x
instagram
youtube
medium
fcaebook

Product

© 2026
Plotly. All rights reserved.
Cookie Preferences
aicpa/soc2