PsychrometricPlot#

PsychrometricPlot places a thermal comfort model on a psychrometric chart: dry-bulb temperature on the x-axis and humidity ratio on the y-axis. Constant relative-humidity curves are drawn automatically. The class converts each grid point’s humidity ratio to relative humidity before calling the model, so you pass the model function directly with no extra setup.

Note that tdb and hr are the fixed axis names — this chart type enforces them.

import matplotlib.pyplot as plt

from pythermalcomfort.models import pmv_ppd_ashrae, pmv_ppd_iso
from pythermalcomfort.plots.matplotlib import PsychrometricPlot

1. PMV ISO on a Psychrometric Chart#

This is the standard psychrometric view for ISO 7730 comfort assessment. The y-axis runs in humidity ratio (kg water per kg dry air). The grey curves in the background are constant relative humidity lines at 10 % intervals — they appear automatically.

psy_iso = (
    PsychrometricPlot(pmv_ppd_iso)
    .set_x_axis("tdb", 10.0, 40.0, resolution=1.0)
    .set_y_axis("hr", 0.0, 0.030, resolution=0.001)
    .set_params(vr=0.10, met=1.2, clo=0.5, tr=25.0)
    .set_regions(
        output="pmv",
        thresholds=[-0.5, 0.5],
        labels=["Cool  (PMV < −0.5)", "Comfortable", "Warm  (PMV > 0.5)"],
        colors=["#0067B2", "#E8F0F9", "#C40025"],
    )
    .plot(title="Psychrometric Chart — PMV ISO 7730")
)
psy_iso.ax.set_xlabel("Dry-bulb temperature [°C]")
psy_iso.ax.set_ylabel("Humidity ratio [kg/kg]")
plt.show()
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:181: UserWarning: 'tdb' has 310 values [31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0] at indices [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [10.0, 30.0] and will be set to NaN.
  tdb_valid = valid_range(tdb, (10.0, 30.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:186: UserWarning: 'pa' has 234 values [2808.7390863346973, 2848.1611235542255, 2848.1787968026956, 2848.1823816105534, 2848.173221255969, 2848.1526111798175, 2848.1218003154854, 2848.0819923870595, 2848.0343471759033, 2847.9799817563776, 2847.919971701389, 2847.8553522577836, 2847.7871194922454, 2847.716231408499, 2847.6436090360244, 2847.5701374909636, 2847.4966670096837, 2847.4240139554063, 2808.7390863346973, 2983.3531213394763, 3001.720617143366, 3001.724395203812, 3001.714741025765, 3001.693019885724, 3001.660548045543, 3001.6185941205945, 3001.56838041463, 3001.511084222118, 3001.447839098779, 3001.379736100345, 3001.3078249902314, 3001.233115416967, 3001.1565780615983, 3001.079145755793, 3001.0017145711154, 3000.9251448799264, 2808.7390863346973, 2983.3531213394763, 3154.7840991546786, 3154.7880698656613, 3154.7779234025893, 3154.7550946600263, 3154.720967018536, 3154.676873782621, 3154.6240995836392, 3154.563881748559, 3154.4974116352787, 3154.42583593455, 3154.3502579392352, 3154.271738781774, 3154.1912986401007, 3154.109917912754, 3154.0285383637033, 3153.9480642373433, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3307.3756374179225, 3307.3650002010863, 3307.3410673012163, 3307.305289008815, 3307.259063116295, 3307.203736388753, 3307.1406059989226, 3307.070920927086, 3306.9958833259598, 3306.9166498513514, 3306.8343329594695, 3306.750002171173, 3306.6646853039156, 3306.5793696719443, 3306.495003255225, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3459.4781893732634, 3459.4531557452533, 3459.415731928346, 3459.3673800025836, 3459.309508673834, 3459.2434747747357, 3459.170584728994, 3459.0920959790506, 3459.009218377921, 3458.92311554619, 3458.834906194399, 3458.745665411647, 3458.6564259209968, 3458.5681793021513, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3611.093564173029, 3611.0544999341746, 3611.0040285677255, 3610.9436205282504, 3610.8746921232914, 3610.798607041859, 3610.716677844664, 3610.6301674169817, 3610.5402903851154, 3610.4482144967565, 3610.3550619660673, 3610.2619107841174, 3610.169795995153, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3762.264483116835, 3762.2237835348965, 3762.1711992897003, 3762.1082623933344, 3762.036448444113, 3761.9571782190465, 3761.8718192264696, 3761.781687219723, 3761.6880476729134, 3761.5921172190574, 3761.4950650514825, 3761.398014289105, 3761.302043306152, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 3912.925759696127, 3912.871069103695, 3912.805611167859, 3912.7309205944157, 3912.6484750719046, 3912.5596968864234, 3912.465954495948, 3912.368564065202, 3912.2687909614133, 3912.1678512118415, 3912.0669129237576, 3911.9670976674124, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4063.105801506616, 4063.037830312536, 4062.9602719936147, 4062.87466097426, 4062.7824741492664, 4062.6851325185653, 4062.584002781043, 4062.4803988877184, 4062.3755835552324, 4062.270769740346, 4062.1671220760163, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4212.877546660614, 4212.807069953546, 4212.7266527268475, 4212.63788596595, 4212.542301006048, 4212.4413712271125, 4212.336513706458, 4212.229090829166, 4212.120411857377, 4212.011734459129, 4211.9042661973735, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4362.1154669851185, 4362.032199647552, 4361.940286855384, 4361.841314216695, 4361.736807330321, 4361.628233496988, 4361.517003386813, 4361.404472664208, 4361.291943570912, 4361.180666467777, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4510.879036479098, 4510.783987321182, 4510.681637411642, 4510.573564407746, 4510.461285679329, 4510.346260033196, 4510.229889393473, 4510.11352043866, 4509.998446196014, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4659.269273915473, 4659.171098012859, 4659.065381192511, 4658.953753010437, 4658.837780751994, 4658.718971213008, 4658.598772435418, 4658.478575398165, 4658.359715664031] at indices [571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [0.0, 2700.0] and will be set to NaN.
  pa_valid = valid_range(pa, (0.0, 2700.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:187: UserWarning: 'pmv' has 188 values [-2.848150610785016, -2.6588189616253453, -2.4711342125838236, -2.2851665838902946, -2.1009934971069972, -2.8119818840133215, -2.622645326114706, -2.4349561607539187, -2.2489845805623307, -2.064807980393201, -2.775929086363623, -2.586587635459705, -2.3988940679349757, -2.212918548910792, -2.028738446617043, -2.7399916613583293, -2.550645333107226, -2.36294737750593, -2.176967932253819, -2.704169056075726, -2.5148178660605156, -2.327115536402514, -2.141132177466735, -2.668460721121627, -2.4791046848508227, -2.2913979950888956, -2.105410734953686, -2.6328661106012814, -2.4435052435093096, -2.255794207529579, -2.069803058619538, -2.5973846820915565, -2.4080189995392285, -2.2203036311615874, -2.03430860584205, 2.0114950083775573, -2.575072173629646, -2.3726454138883635, -2.1849257268668922, 2.0468870118576814, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.082166834275077, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1173350081516413, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0095920708289547, 2.152392062644097, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0445394234269894, 2.1873385235705327, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.079376702156247, 2.222174913436695, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1141044262494177, 2.256901751462024, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0143657873441936, 2.1487231116786014, 2.2915195536054576, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.048876837269982, 2.183233271180862, 2.326028832590975, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0832798680091744, 2.2176354142835417, 2.360430097932919, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.11757538591753, 2.2519300473293367, 2.3947238559610655, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0173537986344665, 2.1517638941909265, 2.286117673501138, 2.428910609845468, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051436676699764, 2.185845892889964, 2.3201987928466474, 2.46299085962107, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0854135394051276, 2.21982187896435, 2.354173902302749, 2.4969651022120756, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1192848806262665, 2.2536923462770524, 2.388043495719669, 2.530833831456112, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.018588214099653, 2.1530511911760013, 2.28745778562823, 2.4218080638849013, 2.564597538128148, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0522508402148856, 2.1867129588279695, 2.321118684778932, 2.455468094546912, 2.598256709964207, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.085809405536538, 2.2202706683401128, 2.3546755284745946, 2.489024072438631, 2.6318118316848502, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.119264391842413, 2.253724801477947, 2.3881287984683044, 2.522476479300714, 2.6652633850184437, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0181001472276976, 2.1526162779408686, 2.28707583703762, 2.421478973543855, 2.5558257939046003, 2.698611848724208, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051350236652998, 2.185865539693655, 2.320324250868748, 2.4547265295385854, 2.5890724920753536, 2.73185769861507, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0844981721275624, 2.2190126500385565, 2.353470515897053, 2.4878719393660145, 2.622217046714292, 2.765001407580278, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1175444236993237, 2.252058079011805, 2.3865151021467796, 2.520915673038264, 2.6552599278214064, 2.798043445607833] at indices [0, 1, 2, 3, 4, 31, 32, 33, 34, 35, 62, 63, 64, 65, 66, 93, 94, 95, 96, 124, 125, 126, 127, 155, 156, 157, 158, 186, 187, 188, 189, 217, 218, 219, 220, 247, 248, 249, 250, 278, 279, 280, 281, 309, 310, 311, 312, 340, 341, 342, 343, 370, 371, 372, 373, 374, 401, 402, 403, 404, 405, 432, 433, 434, 435, 436, 463, 464, 465, 466, 467, 493, 494, 495, 496, 497, 498, 524, 525, 526, 527, 528, 529, 555, 556, 557, 558, 559, 560, 586, 587, 588, 589, 590, 591, 616, 617, 618, 619, 620, 621, 622, 647, 648, 649, 650, 651, 652, 653, 678, 679, 680, 681, 682, 683, 684, 709, 710, 711, 712, 713, 714, 715, 739, 740, 741, 742, 743, 744, 745, 746, 770, 771, 772, 773, 774, 775, 776, 777, 801, 802, 803, 804, 805, 806, 807, 808, 832, 833, 834, 835, 836, 837, 838, 839, 862, 863, 864, 865, 866, 867, 868, 869, 870, 893, 894, 895, 896, 897, 898, 899, 900, 901, 924, 925, 926, 927, 928, 929, 930, 931, 932, 955, 956, 957, 958, 959, 960] outside the applicability limits [-2, 2] and will be set to NaN.
  pmv_valid = valid_range(pmv, (-2, 2))
../../../_images/a3b9270a33d689922d9e1a58982755f45947855781186650fe45fdbcf36c8336.png

2. PMV ASHRAE 55#

The ASHRAE 55 PMV model uses the same psychrometric axes but applies slightly different applicability limits. Running both models side by side makes the differences in their valid regions visible.

fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12, 5), constrained_layout=True)

(
    PsychrometricPlot(pmv_ppd_iso)
    .set_x_axis("tdb", 15.0, 35.0, resolution=0.5)
    .set_y_axis("hr", 0.0, 0.022, resolution=0.001)
    .set_params(vr=0.10, met=1.2, clo=0.5, tr=25.0)
    .set_regions(output="pmv", thresholds=[-0.5, 0.5])
    .plot(ax=ax0, title="PMV ISO 7730")
).ax.set(xlabel="Dry-bulb temperature [°C]", ylabel="Humidity ratio [kg/kg]")

(
    PsychrometricPlot(pmv_ppd_ashrae)
    .set_x_axis("tdb", 15.0, 35.0, resolution=0.5)
    .set_y_axis("hr", 0.0, 0.022, resolution=0.001)
    .set_params(vr=0.10, met=1.2, clo=0.5, tr=25.0)
    .set_regions(output="pmv", thresholds=[-0.5, 0.5])
    .plot(ax=ax1, title="PMV ASHRAE 55")
).ax.set(xlabel="Dry-bulb temperature [°C]", ylabel="Humidity ratio [kg/kg]")

plt.show()
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:181: UserWarning: 'tdb' has 230 values [30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0] at indices [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942] outside the applicability limits [10.0, 30.0] and will be set to NaN.
  tdb_valid = valid_range(tdb, (10.0, 30.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:186: UserWarning: 'pa' has 130 values [2724.8241215863977, 2808.7390863346973, 2848.1465705752576, 2848.1611235542255, 2848.171807094096, 2848.1787968026956, 2848.182265169823, 2848.1823816105534, 2848.1793125080617, 2848.173221255969, 2848.164268300089, 2848.1526111798175, 2848.1384045688196, 2848.1218003154854, 2848.1029474826987, 2848.0819923870595, 2848.059078637995, 2848.0343471759033, 2848.0079363100776, 2847.9799817563776, 2847.9506166738197, 2847.919971701389, 2847.8881749939524, 2847.8553522577836, 2847.8216267858215, 2847.7871194922454, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3001.713250628162, 3001.720617143366, 3001.7242724859047, 3001.724395203812, 3001.721160649776, 3001.714741025765, 3001.705305427031, 3001.693019885724, 3001.6780474137786, 3001.660548045543, 3001.640678879699, 3001.6185941205945, 3001.5944451194637, 3001.56838041463, 3001.54054577147, 3001.511084222118, 3001.480136104031, 3001.447839098779, 3001.414328269903, 3001.379736100345, 3001.3441925296165, 3001.3078249902314, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3154.7840991546786, 3154.787940890133, 3154.7880698656613, 3154.7846703755213, 3154.7779234025893, 3154.768006664609, 3154.7550946600263, 3154.7393587130664, 3154.720967018536, 3154.7000846858805, 3154.676873782621, 3154.6514933776816, 3154.6240995836392, 3154.594845598727, 3154.563881748559, 3154.5313555266703, 3154.4974116352787, 3154.4621920250706, 3154.42583593455, 3154.388479929091, 3154.3502579392352, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3307.3756374179225, 3307.3720735047145, 3307.3650002010863, 3307.35460382045, 3307.3410673012163, 3307.3245702540453, 3307.305289008815, 3307.2833966608196, 3307.259063116295, 3307.2324551378497, 3307.203736388753, 3307.1730674769733, 3307.1406059989226, 3307.106506581951, 3307.070920927086, 3307.033997850738, 3306.9958833259598, 3306.9567205233784, 3306.9166498513514, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3361.1588950705864, 3459.4855879941074, 3459.4781893732634, 3459.4673148395914, 3459.4531557452533, 3459.4358999616084, 3459.415731928346, 3459.3928327018016, 3459.3673800025836, 3459.33954826309, 3459.309508673834, 3459.2774292295067, 3459.2434747747357, 3459.2078070485322, 3459.170584728994, 3459.131963476941, 3459.0920959790506, 3459.0511319906914, 3459.009218377921] at indices [753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942] outside the applicability limits [0.0, 2700.0] and will be set to NaN.
  pa_valid = valid_range(pa, (0.0, 2700.0))
../../../_images/cc7c168ae74dd8de4434b4f418c9df06fc6ef0e7241b34404ce5758e72c5547c.png

3. Custom Labels and Colors#

Labels and colors work the same way as in ThresholdPlot. Pass them to set_regions and they appear in the legend.

psy_custom = (
    PsychrometricPlot(pmv_ppd_iso)
    .set_x_axis("tdb", 15.0, 38.0, resolution=0.5)
    .set_y_axis("hr", 0.0, 0.025, resolution=0.001)
    .set_params(vr=0.15, met=1.4, clo=0.7, tr=25.0)
    .set_regions(
        output="pmv",
        thresholds=[-0.5, 0.5],
        labels=["Cold", "Comfort zone", "Hot"],
        colors=["#A3D1FF", "#A8E6CF", "#FFB7B2"],
    )
    .plot(title="Psychrometric Chart — Custom Palette")
)
psy_custom.ax.set_xlabel("Dry-bulb temperature [°C]")
psy_custom.ax.set_ylabel("Humidity ratio [kg/kg]")
plt.show()
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:181: UserWarning: 'tdb' has 416 values [30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0, 30.5, 31.0, 31.5, 32.0, 32.5, 33.0, 33.5, 34.0, 34.5, 35.0, 35.5, 36.0, 36.5, 37.0, 37.5, 38.0] at indices [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221] outside the applicability limits [10.0, 30.0] and will be set to NaN.
  tdb_valid = valid_range(tdb, (10.0, 30.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:186: UserWarning: 'pa' has 256 values [2724.8241215863977, 2808.7390863346973, 2848.1465705752576, 2848.1611235542255, 2848.171807094096, 2848.1787968026956, 2848.182265169823, 2848.1823816105534, 2848.1793125080617, 2848.173221255969, 2848.164268300089, 2848.1526111798175, 2848.1384045688196, 2848.1218003154854, 2848.1029474826987, 2848.0819923870595, 2848.059078637995, 2848.0343471759033, 2848.0079363100776, 2847.9799817563776, 2847.9506166738197, 2847.919971701389, 2847.8881749939524, 2847.8553522577836, 2847.8216267858215, 2847.7871194922454, 2847.7519489467613, 2847.716231408499, 2847.6800808590997, 2847.6436090360244, 2847.6069254647364, 2847.5701374909636, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3001.713250628162, 3001.720617143366, 3001.7242724859047, 3001.724395203812, 3001.721160649776, 3001.714741025765, 3001.705305427031, 3001.693019885724, 3001.6780474137786, 3001.660548045543, 3001.640678879699, 3001.6185941205945, 3001.5944451194637, 3001.56838041463, 3001.54054577147, 3001.511084222118, 3001.480136104031, 3001.447839098779, 3001.414328269903, 3001.379736100345, 3001.3441925296165, 3001.3078249902314, 3001.2707584438426, 3001.233115416967, 3001.1950160358547, 3001.1565780615983, 3001.1179169240427, 3001.079145755793, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3154.7840991546786, 3154.787940890133, 3154.7880698656613, 3154.7846703755213, 3154.7779234025893, 3154.768006664609, 3154.7550946600263, 3154.7393587130664, 3154.720967018536, 3154.7000846858805, 3154.676873782621, 3154.6514933776816, 3154.6240995836392, 3154.594845598727, 3154.563881748559, 3154.5313555266703, 3154.4974116352787, 3154.4621920250706, 3154.42583593455, 3154.388479929091, 3154.3502579392352, 3154.31130129867, 3154.271738781774, 3154.231696640266, 3154.1912986401007, 3154.150666097112, 3154.109917912754, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3307.3756374179225, 3307.3720735047145, 3307.3650002010863, 3307.35460382045, 3307.3410673012163, 3307.3245702540453, 3307.305289008815, 3307.2833966608196, 3307.259063116295, 3307.2324551378497, 3307.203736388753, 3307.1730674769733, 3307.1406059989226, 3307.106506581951, 3307.070920927086, 3307.033997850738, 3306.9958833259598, 3306.9567205233784, 3306.9166498513514, 3306.87580899578, 3306.8343329594695, 3306.7923541005543, 3306.750002171173, 3306.7074043548414, 3306.6646853039156, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3361.1588950705864, 3459.4855879941074, 3459.4781893732634, 3459.4673148395914, 3459.4531557452533, 3459.4358999616084, 3459.415731928346, 3459.3928327018016, 3459.3673800025836, 3459.33954826309, 3459.309508673834, 3459.2774292295067, 3459.2434747747357, 3459.2078070485322, 3459.170584728994, 3459.131963476941, 3459.0920959790506, 3459.0511319906914, 3459.009218377921, 3458.9664991591235, 3458.92311554619, 3458.8792059847046, 3458.834906194399, 3458.790349208247, 3458.745665411647, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3361.1588950705864, 3461.8749142928727, 3565.2070738278517, 3611.1083439119466, 3611.093564173029, 3611.075552005654, 3611.0544999341746, 3611.030596951282, 3611.0040285677255, 3610.97497686191, 3610.9436205282504, 3610.910134925255, 3610.8746921232914, 3610.837460950981, 3610.798607041859, 3610.758292879924, 3610.716677844664, 3610.6739182557744, 3610.6301674169817, 3610.5855756595215, 3610.5402903851154, 3610.494456107919, 3610.4482144967565, 3610.401704415916, 3610.3550619660673, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3361.1588950705864, 3461.8749142928727, 3565.2070738278517, 3671.212190839786, 3762.264483116835, 3762.2457169075483, 3762.2237835348965, 3762.198879903356, 3762.1711992897003, 3762.140931394665, 3762.1082623933344, 3762.07337498524, 3762.036448444113, 3761.9976586662356, 3761.9571782190465, 3761.915176388598, 3761.8718192264696, 3761.8272695963547, 3761.781687219723, 3761.7352287211124, 3761.6880476729134, 3761.6402946390635, 3761.5921172190574, 3761.54366009045, 3761.4950650514825, 2724.8241215863977, 2808.7390863346973, 2894.8986353380237, 2983.3531213394763, 3074.1537878610616, 3167.3527800263946, 3263.0031554325888, 3361.1588950705864, 3461.8749142928727, 3565.2070738278517, 3671.212190839786, 3779.948050033587, 3891.4734148033344, 3912.925759696127, 3912.899858509231, 3912.871069103695, 3912.839588779028, 3912.805611167859, 3912.7693262880434, 3912.7309205944157, 3912.690577029067, 3912.6484750719046, 3912.604790790008, 3912.5596968864234, 3912.513362748612, 3912.465954495948, 3912.417635026818, 3912.368564065202, 3912.318898206124, 3912.2687909614133, 3912.2183928039203, 3912.1678512118415] at indices [861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221] outside the applicability limits [0.0, 2700.0] and will be set to NaN.
  pa_valid = valid_range(pa, (0.0, 2700.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:187: UserWarning: 'pmv' has 98 values [2.024184328534012, 2.055207996975415, 2.028901970268797, 2.086133486143926, 2.0024802588083004, 2.0597301437500852, 2.1169612613588566, 2.0332115753463222, 2.090461064404845, 2.14769178500366, 2.0065782155282723, 2.0638460972875436, 2.1210951917097205, 2.1783255165490423, 2.03711679058986, 2.094384281224611, 2.1516329822514746, 2.2088629125758694, 2.010273567124113, 2.067559480144644, 2.1248265808829343, 2.182074889749674, 2.2393044267978466, 2.0406212073089356, 2.0979067350790497, 2.155173447143162, 2.2124213650791593, 2.2696505100839888, 2.0135698737360115, 2.0708738597314347, 2.128159003456961, 2.1854253280634413, 2.242672856292304, 2.299901610480882, 2.043728361923938, 2.10103196966066, 2.1583167305417756, 2.2155826689014666, 2.2728298086410685, 2.3300581732347334, 2.016470640867687, 2.0737927489287156, 2.131095979586986, 2.18838035881825, 2.2456459121363292, 2.3028926645988417, 2.3601206408132165, 2.046441736575141, 2.1037634744891958, 2.161066329243751, 2.218350328014142, 2.275615497490151, 2.3328618638820844, 2.3900894529271106, 2.018979319986267, 2.076319606690175, 2.1336409756086034, 2.190943455628698, 2.2482270751216453, 2.305491861949533, 2.362737843471764, 2.4199650465517393, 2.048764759715749, 2.106104685506984, 2.1634256865757715, 2.2207277930252145, 2.278011034418634, 2.3352754397867854, 2.3925210376345993, 2.4497478559482095, 2.021099309106805, 2.078457838628679, 2.135797404626386, 2.1931180389861873, 2.250419773023373, 2.3077026374897036, 2.364966662580975, 2.4222118779440973, 2.479438312684454, 2.050700806689749, 2.1080589856585403, 2.1653981929766646, 2.2227184617628364, 2.280019824540778, 2.337302313247013, 2.39456595923877, 2.4518107933014, 2.5090368456560723, 2.022833953361393, 2.0802107975875326, 2.1375686270868988, 2.1949074768342225, 2.252227381176857, 2.3095283738432246, 2.366810487950945, 2.4240737560150913, 2.4813182099559388, 2.5385438811069894] at indices [422, 469, 515, 516, 561, 562, 563, 608, 609, 610, 654, 655, 656, 657, 701, 702, 703, 704, 747, 748, 749, 750, 751, 794, 795, 796, 797, 798, 840, 841, 842, 843, 844, 845, 887, 888, 889, 890, 891, 892, 933, 934, 935, 936, 937, 938, 939, 980, 981, 982, 983, 984, 985, 986, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221] outside the applicability limits [-2, 2] and will be set to NaN.
  pmv_valid = valid_range(pmv, (-2, 2))
../../../_images/c080cee5be457a06c99fec6b1ef221bcbcd5c8c94b1dff602a3119f61a8a1ce6.png

4. Styling and Legend Control#

Use fill_kws, line_kws, and legend_kws to adjust the appearance. legend=False removes the colour key when the chart is being combined with another plot that already carries the legend.

psy_styled = (
    PsychrometricPlot(pmv_ppd_iso)
    .set_x_axis("tdb", 10.0, 40.0, resolution=1.0)
    .set_y_axis("hr", 0.0, 0.030, resolution=0.001)
    .set_params(vr=0.10, met=1.2, clo=0.5, tr=25.0)
    .set_regions(output="pmv", thresholds=[-0.5, 0.5])
    .plot(
        title="Psychrometric Chart — Transparent Fill",
        fill_kws={"alpha": 0.55},
        line_kws={"linewidth": 2.0, "color": "#333333"},
    )
)
psy_styled.ax.set_xlabel("Dry-bulb temperature [°C]")
psy_styled.ax.set_ylabel("Humidity ratio [kg/kg]")
plt.show()
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:181: UserWarning: 'tdb' has 310 values [31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0] at indices [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [10.0, 30.0] and will be set to NaN.
  tdb_valid = valid_range(tdb, (10.0, 30.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:186: UserWarning: 'pa' has 234 values [2808.7390863346973, 2848.1611235542255, 2848.1787968026956, 2848.1823816105534, 2848.173221255969, 2848.1526111798175, 2848.1218003154854, 2848.0819923870595, 2848.0343471759033, 2847.9799817563776, 2847.919971701389, 2847.8553522577836, 2847.7871194922454, 2847.716231408499, 2847.6436090360244, 2847.5701374909636, 2847.4966670096837, 2847.4240139554063, 2808.7390863346973, 2983.3531213394763, 3001.720617143366, 3001.724395203812, 3001.714741025765, 3001.693019885724, 3001.660548045543, 3001.6185941205945, 3001.56838041463, 3001.511084222118, 3001.447839098779, 3001.379736100345, 3001.3078249902314, 3001.233115416967, 3001.1565780615983, 3001.079145755793, 3001.0017145711154, 3000.9251448799264, 2808.7390863346973, 2983.3531213394763, 3154.7840991546786, 3154.7880698656613, 3154.7779234025893, 3154.7550946600263, 3154.720967018536, 3154.676873782621, 3154.6240995836392, 3154.563881748559, 3154.4974116352787, 3154.42583593455, 3154.3502579392352, 3154.271738781774, 3154.1912986401007, 3154.109917912754, 3154.0285383637033, 3153.9480642373433, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3307.3756374179225, 3307.3650002010863, 3307.3410673012163, 3307.305289008815, 3307.259063116295, 3307.203736388753, 3307.1406059989226, 3307.070920927086, 3306.9958833259598, 3306.9166498513514, 3306.8343329594695, 3306.750002171173, 3306.6646853039156, 3306.5793696719443, 3306.495003255225, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3459.4781893732634, 3459.4531557452533, 3459.415731928346, 3459.3673800025836, 3459.309508673834, 3459.2434747747357, 3459.170584728994, 3459.0920959790506, 3459.009218377921, 3458.92311554619, 3458.834906194399, 3458.745665411647, 3458.6564259209968, 3458.5681793021513, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3611.093564173029, 3611.0544999341746, 3611.0040285677255, 3610.9436205282504, 3610.8746921232914, 3610.798607041859, 3610.716677844664, 3610.6301674169817, 3610.5402903851154, 3610.4482144967565, 3610.3550619660673, 3610.2619107841174, 3610.169795995153, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3762.264483116835, 3762.2237835348965, 3762.1711992897003, 3762.1082623933344, 3762.036448444113, 3761.9571782190465, 3761.8718192264696, 3761.781687219723, 3761.6880476729134, 3761.5921172190574, 3761.4950650514825, 3761.398014289105, 3761.302043306152, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 3912.925759696127, 3912.871069103695, 3912.805611167859, 3912.7309205944157, 3912.6484750719046, 3912.5596968864234, 3912.465954495948, 3912.368564065202, 3912.2687909614133, 3912.1678512118415, 3912.0669129237576, 3911.9670976674124, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4063.105801506616, 4063.037830312536, 4062.9602719936147, 4062.87466097426, 4062.7824741492664, 4062.6851325185653, 4062.584002781043, 4062.4803988877184, 4062.3755835552324, 4062.270769740346, 4062.1671220760163, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4212.877546660614, 4212.807069953546, 4212.7266527268475, 4212.63788596595, 4212.542301006048, 4212.4413712271125, 4212.336513706458, 4212.229090829166, 4212.120411857377, 4212.011734459129, 4211.9042661973735, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4362.1154669851185, 4362.032199647552, 4361.940286855384, 4361.841314216695, 4361.736807330321, 4361.628233496988, 4361.517003386813, 4361.404472664208, 4361.291943570912, 4361.180666467777, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4510.879036479098, 4510.783987321182, 4510.681637411642, 4510.573564407746, 4510.461285679329, 4510.346260033196, 4510.229889393473, 4510.11352043866, 4509.998446196014, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4659.269273915473, 4659.171098012859, 4659.065381192511, 4658.953753010437, 4658.837780751994, 4658.718971213008, 4658.598772435418, 4658.478575398165, 4658.359715664031] at indices [571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [0.0, 2700.0] and will be set to NaN.
  pa_valid = valid_range(pa, (0.0, 2700.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:187: UserWarning: 'pmv' has 188 values [-2.848150610785016, -2.6588189616253453, -2.4711342125838236, -2.2851665838902946, -2.1009934971069972, -2.8119818840133215, -2.622645326114706, -2.4349561607539187, -2.2489845805623307, -2.064807980393201, -2.775929086363623, -2.586587635459705, -2.3988940679349757, -2.212918548910792, -2.028738446617043, -2.7399916613583293, -2.550645333107226, -2.36294737750593, -2.176967932253819, -2.704169056075726, -2.5148178660605156, -2.327115536402514, -2.141132177466735, -2.668460721121627, -2.4791046848508227, -2.2913979950888956, -2.105410734953686, -2.6328661106012814, -2.4435052435093096, -2.255794207529579, -2.069803058619538, -2.5973846820915565, -2.4080189995392285, -2.2203036311615874, -2.03430860584205, 2.0114950083775573, -2.575072173629646, -2.3726454138883635, -2.1849257268668922, 2.0468870118576814, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.082166834275077, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1173350081516413, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0095920708289547, 2.152392062644097, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0445394234269894, 2.1873385235705327, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.079376702156247, 2.222174913436695, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1141044262494177, 2.256901751462024, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0143657873441936, 2.1487231116786014, 2.2915195536054576, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.048876837269982, 2.183233271180862, 2.326028832590975, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0832798680091744, 2.2176354142835417, 2.360430097932919, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.11757538591753, 2.2519300473293367, 2.3947238559610655, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0173537986344665, 2.1517638941909265, 2.286117673501138, 2.428910609845468, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051436676699764, 2.185845892889964, 2.3201987928466474, 2.46299085962107, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0854135394051276, 2.21982187896435, 2.354173902302749, 2.4969651022120756, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1192848806262665, 2.2536923462770524, 2.388043495719669, 2.530833831456112, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.018588214099653, 2.1530511911760013, 2.28745778562823, 2.4218080638849013, 2.564597538128148, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0522508402148856, 2.1867129588279695, 2.321118684778932, 2.455468094546912, 2.598256709964207, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.085809405536538, 2.2202706683401128, 2.3546755284745946, 2.489024072438631, 2.6318118316848502, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.119264391842413, 2.253724801477947, 2.3881287984683044, 2.522476479300714, 2.6652633850184437, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0181001472276976, 2.1526162779408686, 2.28707583703762, 2.421478973543855, 2.5558257939046003, 2.698611848724208, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051350236652998, 2.185865539693655, 2.320324250868748, 2.4547265295385854, 2.5890724920753536, 2.73185769861507, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0844981721275624, 2.2190126500385565, 2.353470515897053, 2.4878719393660145, 2.622217046714292, 2.765001407580278, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1175444236993237, 2.252058079011805, 2.3865151021467796, 2.520915673038264, 2.6552599278214064, 2.798043445607833] at indices [0, 1, 2, 3, 4, 31, 32, 33, 34, 35, 62, 63, 64, 65, 66, 93, 94, 95, 96, 124, 125, 126, 127, 155, 156, 157, 158, 186, 187, 188, 189, 217, 218, 219, 220, 247, 248, 249, 250, 278, 279, 280, 281, 309, 310, 311, 312, 340, 341, 342, 343, 370, 371, 372, 373, 374, 401, 402, 403, 404, 405, 432, 433, 434, 435, 436, 463, 464, 465, 466, 467, 493, 494, 495, 496, 497, 498, 524, 525, 526, 527, 528, 529, 555, 556, 557, 558, 559, 560, 586, 587, 588, 589, 590, 591, 616, 617, 618, 619, 620, 621, 622, 647, 648, 649, 650, 651, 652, 653, 678, 679, 680, 681, 682, 683, 684, 709, 710, 711, 712, 713, 714, 715, 739, 740, 741, 742, 743, 744, 745, 746, 770, 771, 772, 773, 774, 775, 776, 777, 801, 802, 803, 804, 805, 806, 807, 808, 832, 833, 834, 835, 836, 837, 838, 839, 862, 863, 864, 865, 866, 867, 868, 869, 870, 893, 894, 895, 896, 897, 898, 899, 900, 901, 924, 925, 926, 927, 928, 929, 930, 931, 932, 955, 956, 957, 958, 959, 960] outside the applicability limits [-2, 2] and will be set to NaN.
  pmv_valid = valid_range(pmv, (-2, 2))
../../../_images/fdd336745ec486870d17830aa444045b21ef2c8262869934468b581fb132fc79.png

5. Using result.fig and result.ax#

result.fig and result.ax follow the same conventions as in ThresholdPlot. Use result.fig.suptitle for figure-level text or result.fig.savefig to write the chart to disk.

r = (
    PsychrometricPlot(pmv_ppd_iso)
    .set_x_axis("tdb", 10.0, 40.0, resolution=1.0)
    .set_y_axis("hr", 0.0, 0.030, resolution=0.001)
    .set_params(vr=0.10, met=1.2, clo=0.5, tr=25.0)
    .set_regions(output="pmv", thresholds=[-0.5, 0.5])
    .plot()
)

r.fig.suptitle(
    "Comfort Assessment — Psychrometric View", y=1.03, fontsize=13, fontweight="bold"
)
r.ax.set_title("ISO 7730 | met=1.2, clo=0.5, vr=0.1 m/s", y=1.18)
r.ax.set_xlabel("Dry-bulb temperature [°C]")
r.ax.set_ylabel("Humidity ratio [kg/kg]")

# r.fig.savefig("psychrometric_pmv.png", dpi=150, bbox_inches="tight")
plt.show()
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:181: UserWarning: 'tdb' has 310 values [31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0] at indices [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [10.0, 30.0] and will be set to NaN.
  tdb_valid = valid_range(tdb, (10.0, 30.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:186: UserWarning: 'pa' has 234 values [2808.7390863346973, 2848.1611235542255, 2848.1787968026956, 2848.1823816105534, 2848.173221255969, 2848.1526111798175, 2848.1218003154854, 2848.0819923870595, 2848.0343471759033, 2847.9799817563776, 2847.919971701389, 2847.8553522577836, 2847.7871194922454, 2847.716231408499, 2847.6436090360244, 2847.5701374909636, 2847.4966670096837, 2847.4240139554063, 2808.7390863346973, 2983.3531213394763, 3001.720617143366, 3001.724395203812, 3001.714741025765, 3001.693019885724, 3001.660548045543, 3001.6185941205945, 3001.56838041463, 3001.511084222118, 3001.447839098779, 3001.379736100345, 3001.3078249902314, 3001.233115416967, 3001.1565780615983, 3001.079145755793, 3001.0017145711154, 3000.9251448799264, 2808.7390863346973, 2983.3531213394763, 3154.7840991546786, 3154.7880698656613, 3154.7779234025893, 3154.7550946600263, 3154.720967018536, 3154.676873782621, 3154.6240995836392, 3154.563881748559, 3154.4974116352787, 3154.42583593455, 3154.3502579392352, 3154.271738781774, 3154.1912986401007, 3154.109917912754, 3154.0285383637033, 3153.9480642373433, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3307.3756374179225, 3307.3650002010863, 3307.3410673012163, 3307.305289008815, 3307.259063116295, 3307.203736388753, 3307.1406059989226, 3307.070920927086, 3306.9958833259598, 3306.9166498513514, 3306.8343329594695, 3306.750002171173, 3306.6646853039156, 3306.5793696719443, 3306.495003255225, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3459.4781893732634, 3459.4531557452533, 3459.415731928346, 3459.3673800025836, 3459.309508673834, 3459.2434747747357, 3459.170584728994, 3459.0920959790506, 3459.009218377921, 3458.92311554619, 3458.834906194399, 3458.745665411647, 3458.6564259209968, 3458.5681793021513, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3611.093564173029, 3611.0544999341746, 3611.0040285677255, 3610.9436205282504, 3610.8746921232914, 3610.798607041859, 3610.716677844664, 3610.6301674169817, 3610.5402903851154, 3610.4482144967565, 3610.3550619660673, 3610.2619107841174, 3610.169795995153, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3762.264483116835, 3762.2237835348965, 3762.1711992897003, 3762.1082623933344, 3762.036448444113, 3761.9571782190465, 3761.8718192264696, 3761.781687219723, 3761.6880476729134, 3761.5921172190574, 3761.4950650514825, 3761.398014289105, 3761.302043306152, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 3912.925759696127, 3912.871069103695, 3912.805611167859, 3912.7309205944157, 3912.6484750719046, 3912.5596968864234, 3912.465954495948, 3912.368564065202, 3912.2687909614133, 3912.1678512118415, 3912.0669129237576, 3911.9670976674124, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4063.105801506616, 4063.037830312536, 4062.9602719936147, 4062.87466097426, 4062.7824741492664, 4062.6851325185653, 4062.584002781043, 4062.4803988877184, 4062.3755835552324, 4062.270769740346, 4062.1671220760163, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4212.877546660614, 4212.807069953546, 4212.7266527268475, 4212.63788596595, 4212.542301006048, 4212.4413712271125, 4212.336513706458, 4212.229090829166, 4212.120411857377, 4212.011734459129, 4211.9042661973735, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4362.1154669851185, 4362.032199647552, 4361.940286855384, 4361.841314216695, 4361.736807330321, 4361.628233496988, 4361.517003386813, 4361.404472664208, 4361.291943570912, 4361.180666467777, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4510.879036479098, 4510.783987321182, 4510.681637411642, 4510.573564407746, 4510.461285679329, 4510.346260033196, 4510.229889393473, 4510.11352043866, 4509.998446196014, 2808.7390863346973, 2983.3531213394763, 3167.3527800263946, 3361.1588950705864, 3565.2070738278517, 3779.948050033587, 4005.848038423717, 4243.389092159399, 4493.069462934928, 4659.269273915473, 4659.171098012859, 4659.065381192511, 4658.953753010437, 4658.837780751994, 4658.718971213008, 4658.598772435418, 4658.478575398165, 4658.359715664031] at indices [571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960] outside the applicability limits [0.0, 2700.0] and will be set to NaN.
  pa_valid = valid_range(pa, (0.0, 2700.0))
/home/docs/checkouts/readthedocs.org/user_builds/pythermalcomfort/envs/latest/lib/python3.13/site-packages/pythermalcomfort/models/pmv_ppd_iso.py:187: UserWarning: 'pmv' has 188 values [-2.848150610785016, -2.6588189616253453, -2.4711342125838236, -2.2851665838902946, -2.1009934971069972, -2.8119818840133215, -2.622645326114706, -2.4349561607539187, -2.2489845805623307, -2.064807980393201, -2.775929086363623, -2.586587635459705, -2.3988940679349757, -2.212918548910792, -2.028738446617043, -2.7399916613583293, -2.550645333107226, -2.36294737750593, -2.176967932253819, -2.704169056075726, -2.5148178660605156, -2.327115536402514, -2.141132177466735, -2.668460721121627, -2.4791046848508227, -2.2913979950888956, -2.105410734953686, -2.6328661106012814, -2.4435052435093096, -2.255794207529579, -2.069803058619538, -2.5973846820915565, -2.4080189995392285, -2.2203036311615874, -2.03430860584205, 2.0114950083775573, -2.575072173629646, -2.3726454138883635, -2.1849257268668922, 2.0468870118576814, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.082166834275077, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1173350081516413, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0095920708289547, 2.152392062644097, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0445394234269894, 2.1873385235705327, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.079376702156247, 2.222174913436695, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1141044262494177, 2.256901751462024, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0143657873441936, 2.1487231116786014, 2.2915195536054576, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.048876837269982, 2.183233271180862, 2.326028832590975, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0832798680091744, 2.2176354142835417, 2.360430097932919, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.11757538591753, 2.2519300473293367, 2.3947238559610655, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0173537986344665, 2.1517638941909265, 2.286117673501138, 2.428910609845468, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051436676699764, 2.185845892889964, 2.3201987928466474, 2.46299085962107, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0854135394051276, 2.21982187896435, 2.354173902302749, 2.4969651022120756, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1192848806262665, 2.2536923462770524, 2.388043495719669, 2.530833831456112, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.018588214099653, 2.1530511911760013, 2.28745778562823, 2.4218080638849013, 2.564597538128148, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0522508402148856, 2.1867129588279695, 2.321118684778932, 2.455468094546912, 2.598256709964207, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.085809405536538, 2.2202706683401128, 2.3546755284745946, 2.489024072438631, 2.6318118316848502, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.119264391842413, 2.253724801477947, 2.3881287984683044, 2.522476479300714, 2.6652633850184437, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0181001472276976, 2.1526162779408686, 2.28707583703762, 2.421478973543855, 2.5558257939046003, 2.698611848724208, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.051350236652998, 2.185865539693655, 2.320324250868748, 2.4547265295385854, 2.5890724920753536, 2.73185769861507, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.0844981721275624, 2.2190126500385565, 2.353470515897053, 2.4878719393660145, 2.622217046714292, 2.765001407580278, -2.575072173629646, -2.366855729622882, -2.159149173269256, 2.1175444236993237, 2.252058079011805, 2.3865151021467796, 2.520915673038264, 2.6552599278214064, 2.798043445607833] at indices [0, 1, 2, 3, 4, 31, 32, 33, 34, 35, 62, 63, 64, 65, 66, 93, 94, 95, 96, 124, 125, 126, 127, 155, 156, 157, 158, 186, 187, 188, 189, 217, 218, 219, 220, 247, 248, 249, 250, 278, 279, 280, 281, 309, 310, 311, 312, 340, 341, 342, 343, 370, 371, 372, 373, 374, 401, 402, 403, 404, 405, 432, 433, 434, 435, 436, 463, 464, 465, 466, 467, 493, 494, 495, 496, 497, 498, 524, 525, 526, 527, 528, 529, 555, 556, 557, 558, 559, 560, 586, 587, 588, 589, 590, 591, 616, 617, 618, 619, 620, 621, 622, 647, 648, 649, 650, 651, 652, 653, 678, 679, 680, 681, 682, 683, 684, 709, 710, 711, 712, 713, 714, 715, 739, 740, 741, 742, 743, 744, 745, 746, 770, 771, 772, 773, 774, 775, 776, 777, 801, 802, 803, 804, 805, 806, 807, 808, 832, 833, 834, 835, 836, 837, 838, 839, 862, 863, 864, 865, 866, 867, 868, 869, 870, 893, 894, 895, 896, 897, 898, 899, 900, 901, 924, 925, 926, 927, 928, 929, 930, 931, 932, 955, 956, 957, 958, 959, 960] outside the applicability limits [-2, 2] and will be set to NaN.
  pmv_valid = valid_range(pmv, (-2, 2))
../../../_images/e9752e2b98fc8a0e4a9b782430f1d06675950da6fa1e5b7965f6c941760d1114.png