Enrollment Data

#mcps-enroll{–bg:#fcfcfb;–ink:#0b0b0b;–ink2:#52514e;–muted:#8a8984;–grid:#e6e5e0;–line:#2a78d6;–hi:#eb6834;–card:#ffffff;–border:#e2e1dc} #mcps-enroll,#mcps-enroll *{box-sizing:border-box} #mcps-enroll{background:var(–bg);color:var(–ink);font:14px/1.45 system-ui,-apple-system,”Segoe UI”,Arial,sans-serif;padding:16px;border-radius:10px;text-align:left} #mcps-enroll h1,#mcps-enroll h2{color:var(–ink);font-family:inherit;margin-top:0;text-transform:none;letter-spacing:normal} #mcps-enroll p,#mcps-enroll input,#mcps-enroll button{font-family:inherit} #mcps-enroll main{max-width:1100px;margin:0 auto} #mcps-enroll h1{font-size:22px;margin:0 0 4px} #mcps-enroll p.sub{color:var(–ink2);margin:0 0 20px} #mcps-enroll section{background:var(–card);border:1px solid var(–border);border-radius:10px;padding:16px 16px 8px;margin-bottom:20px} #mcps-enroll h2{font-size:16px;margin:0 0 2px} #mcps-enroll .meta{color:var(–ink2);font-size:13px;margin-bottom:10px} #mcps-enroll .controls{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px} #mcps-enroll input{font:inherit;padding:6px 10px;border:1px solid var(–border);border-radius:6px;background:var(–bg);color:var(–ink);min-width:220px} #mcps-enroll button{font:inherit;padding:6px 10px;border:1px solid var(–border);border-radius:6px;background:var(–bg);color:var(–ink2);cursor:pointer} #mcps-enroll .seg{display:inline-flex;border:1px solid var(–border);border-radius:7px;overflow:hidden;margin:6px 0 8px} #mcps-enroll .seg button{border:0;border-radius:0;padding:5px 12px} #mcps-enroll .seg button.on{background:var(–line);color:#fff} #mcps-enroll .chips{display:flex;gap:6px;flex-wrap:wrap} #mcps-enroll .chip{background:var(–bg);border:1px solid var(–hi);border-radius:999px;padding:2px 10px;font-size:12px;cursor:pointer} #mcps-enroll .chip:after{content:” ×”;color:var(–muted)} #mcps-enroll svg{width:100%;height:auto;display:block} #mcps-enroll .ax text{fill:var(–ink2);font-size:11px} #mcps-enroll .ax line{stroke:var(–grid)} #mcps-enroll .s{fill:none;stroke-linecap:round;stroke:var(–line);stroke-width:1;stroke-opacity:.28} #mcps-enroll .s.cl{stroke-opacity:.6;stroke-width:1.6} #mcps-enroll .s.cl.dim{stroke-opacity:.15} #mcps-enroll .s.dim{stroke-opacity:.08} #mcps-enroll .s.hov{stroke:var(–ink);stroke-opacity:1;stroke-width:2.5} #mcps-enroll .s.pin{stroke:var(–hi);stroke-opacity:1;stroke-width:2.5} #mcps-enroll .lbl{font-size:11px;fill:var(–ink)} #mcps-enroll .prelim{fill:var(–grid);opacity:.5} #mcps-enroll .tip{position:fixed;pointer-events:none;background:var(–card);border:1px solid var(–border);border-radius:6px;padding:6px 9px;font-size:12px;box-shadow:0 2px 8px rgba(0,0,0,.15);display:none;z-index:5} #mcps-enroll .tip b{display:block} #mcps-enroll .note{color:var(–ink2);font-size:12px;margin-top:4px}

MCPS Enrollment by School, 2007–2026

Switch between individual schools and cluster totals. Hover a line to identify it; type a name or click a line to highlight it.

Source: MCPS Department of Shared Accountability, Official Reports of Enrollment (Sept 30, 2007–2025); 2026-27 is preliminary, from MCPS FY2028 CIP Appendix E. Elementary totals include Pre-K. X-axis year = fall of the school year. Cluster totals use each school’s current cluster (from the workbook) for every year, so they show enrollment in today’s cluster schools, not historical boundaries. Schools with no current cluster (Community Montessori, Stephen Knolls Pre-K, M.E.C.C.A.) are left out of cluster totals.

(function(){ const DATA={“ES”: [{“n”: “Arcola”, “v”: [347, 467, 552, 615, 655, 713, 708, 721, 701, 704, 686, 732, 748, 703, 631, 709, 724, 747, 729, 691]}, {“n”: “Ashburton”, “v”: [583, 576, 633, 733, 771, 794, 837, 891, 911, 905, 877, 891, 922, 900, 834, 810, 821, 871, 818, 838]}, {“n”: “Bannockburn”, “v”: [343, 349, 362, 365, 361, 385, 398, 407, 420, 454, 449, 440, 461, 401, 421, 418, 424, 446, 402, 399]}, {“n”: “Bayard Rustin”, “v”: [null, null, null, null, null, null, null, null, null, null, null, 600, 719, 686, 729, 758, 787, 757, 726, 670]}, {“n”: “Beall”, “v”: [600, 647, 640, 708, 761, 777, 782, 801, 825, 812, 785, 572, 531, 516, 497, 497, 490, 475, 441, 485]}, {“n”: “Bel Pre”, “v”: [480, 477, 487, 484, 499, 488, 471, 544, 576, 575, 589, 586, 612, 549, 542, 522, 527, 558, 540, 509]}, {“n”: “Bells Mill”, “v”: [406, 403, 521, 538, 560, 578, 592, 610, 626, 614, 609, 619, 642, 579, 579, 611, 591, 570, 540, 558]}, {“n”: “Belmont”, “v”: [408, 383, 364, 325, 312, 320, 309, 309, 318, 320, 320, 333, 348, 340, 338, 344, 348, 343, 327, 313]}, {“n”: “Bethesda”, “v”: [447, 504, 497, 511, 491, 513, 494, 518, 560, 598, 619, 650, 665, 619, 640, 611, 584, 645, 597, 603]}, {“n”: “Beverly Farms”, “v”: [585, 588, 581, 571, 567, 576, 593, 614, 602, 569, 574, 585, 585, 570, 545, 583, 561, 526, 550, 532]}, {“n”: “Bradley Hills”, “v”: [423, 456, 472, 499, 523, 507, 577, 628, 627, 639, 630, 590, 566, 497, 479, 464, 466, 474, 480, 448]}, {“n”: “Brooke Grove”, “v”: [403, 403, 387, 388, 389, 386, 388, 401, 387, 424, 407, 433, 464, 450, 442, 417, 415, 390, 421, 442]}, {“n”: “Brookhaven”, “v”: [392, 385, 394, 402, 478, 432, 457, 451, 445, 451, 477, 456, 467, 421, 422, 410, 426, 436, 409, 367]}, {“n”: “Brown Station”, “v”: [379, 397, 424, 463, 496, 521, 533, 502, 499, 470, 579, 585, 636, 612, 604, 617, 631, 572, 559, 565]}, {“n”: “Burning Tree”, “v”: [515, 496, 514, 502, 497, 506, 502, 492, 499, 512, 463, 473, 469, 420, 405, 437, 484, 479, 467, 453]}, {“n”: “Burnt Mills”, “v”: [349, 364, 369, 410, 483, 500, 496, 533, 532, 569, 591, 607, 578, 607, 596, 637, 684, 747, 703, 636]}, {“n”: “Burtonsville”, “v”: [626, 626, 662, 677, 686, 682, 649, 660, 613, 588, 580, 627, 604, 608, 603, 617, 609, 601, 591, 615]}, {“n”: “Cabin Branch”, “v”: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 498, 645, 716, 706]}, {“n”: “Candlewood”, “v”: [344, 330, 323, 342, 347, 360, 338, 331, 356, 353, 376, 367, 387, 398, 366, 368, 368, 358, 351, 343]}, {“n”: “Cannon Road”, “v”: [392, 402, 408, 424, 398, 420, 428, 428, 445, 412, 407, 412, 412, 421, 391, 401, 405, 388, 352, 350]}, {“n”: “Capt. James E. Daly”, “v”: [557, 558, 592, 558, 566, 594, 601, 589, 598, 649, 615, 585, 618, 578, 521, 515, 502, 472, 463, 446]}, {“n”: “Carderock Springs”, “v”: [298, 299, 318, 352, 368, 409, 424, 418, 406, 407, 393, 361, 366, 319, 321, 337, 333, 363, 349, 345]}, {“n”: “Cashell”, “v”: [302, 284, 277, 305, 318, 326, 323, 336, 371, 378, 382, 363, 340, 313, 321, 336, 342, 386, 377, 381]}, {“n”: “Cedar Grove”, “v”: [571, 556, 346, 340, 427, 528, 730, 641, 585, 601, 612, 613, 418, 379, 382, 386, 349, 326, 314, 306]}, {“n”: “Chevy Chase”, “v”: [439, 446, 455, 485, 504, 523, 532, 543, 558, 556, 423, 452, 466, 441, 456, 431, 427, 434, 465, 439]}, {“n”: “Clarksburg”, “v”: [324, 309, 265, 241, 261, 264, 279, 304, 309, 341, 402, 529, 623, 690, 771, 778, 448, 365, 344, 326]}, {“n”: “Clearspring”, “v”: [626, 626, 616, 644, 622, 624, 603, 625, 624, 663, 663, 618, 588, 562, 558, 574, 539, 541, 529, 539]}, {“n”: “Clopper Mill”, “v”: [442, 424, 449, 416, 427, 436, 451, 461, 488, 526, 541, 562, 539, 478, 440, 459, 460, 458, 440, 404]}, {“n”: “Cloverly”, “v”: [503, 514, 499, 451, 440, 452, 459, 454, 466, 482, 500, 533, 511, 476, 445, 460, 464, 429, 439, 397]}, {“n”: “Cold Spring”, “v”: [411, 392, 378, 388, 381, 363, 344, 335, 334, 322, 327, 330, 332, 317, 326, 351, 335, 362, 366, 355]}, {“n”: “College Gardens”, “v”: [574, 673, 741, 792, 815, 837, 852, 868, 890, 878, 881, 695, 634, 583, 518, 471, 506, 506, 452, 429]}, {“n”: “Community Montessori”, “v”: [null, null, null, null, null, 68, 99, null, null, null, null, null, null, null, null, null, null, null, null, null]}, {“n”: “Cresthaven”, “v”: [340, 334, 374, 394, 405, 482, 487, 506, 510, 558, 560, 557, 505, 491, 465, 472, 454, 474, 450, 457]}, {“n”: “Damascus”, “v”: [287, 279, 285, 293, 306, 303, 314, 299, 337, 341, 331, 341, 362, 354, 361, 366, 346, 331, 338, 340]}, {“n”: “Darnestown”, “v”: [382, 376, 378, 373, 351, 345, 313, 309, 290, 292, 284, 310, 323, 301, 314, 340, 354, 356, 338, 304]}, {“n”: “Diamond”, “v”: [438, 483, 529, 548, 587, 606, 648, 645, 665, 698, 738, 770, 791, 780, 732, 676, 653, 654, 659, 620]}, {“n”: “Dr. Charles R. Drew”, “v”: [434, 422, 427, 459, 452, 469, 444, 440, 489, 522, 501, 469, 498, 468, 465, 476, 466, 485, 426, 415]}, {“n”: “Dr. Sally K. Ride”, “v”: [501, 550, 569, 537, 520, 510, 544, 524, 515, 500, 478, 519, 502, 475, 472, 502, 455, 428, 399, 368]}, {“n”: “Dufief”, “v”: [404, 434, 431, 386, 375, 367, 327, 328, 318, 298, 313, 310, 316, 305, 261, 244, 246, 276, 265, 266]}, {“n”: “East Silver Spring”, “v”: [227, 228, 308, 352, 419, 484, 512, 518, 554, 534, 539, 511, 497, 481, 485, 513, 525, 540, 516, 487]}, {“n”: “Fairland”, “v”: [518, 548, 565, 593, 592, 602, 622, 621, 645, 640, 631, 628, 592, 585, 533, 544, 566, 553, 558, 499]}, {“n”: “Fallsmead”, “v”: [483, 492, 512, 545, 551, 531, 569, 564, 535, 531, 558, 562, 564, 520, 525, 543, 515, 512, 501, 480]}, {“n”: “Farmland”, “v”: [598, 616, 593, 579, 660, 650, 652, 654, 691, 753, 797, 830, 856, 774, 793, 797, 813, 847, 825, 771]}, {“n”: “Fields Road”, “v”: [392, 420, 452, 464, 475, 472, 490, 484, 464, 455, 467, 474, 487, 458, 461, 452, 449, 453, 440, 425]}, {“n”: “Flora M. Singer”, “v”: [null, null, null, null, null, 505, 629, 675, 735, 699, 709, 669, 683, 613, 619, 634, 618, 653, 642, 648]}, {“n”: “Flower Hill”, “v”: [442, 451, 466, 474, 481, 483, 497, 504, 493, 498, 491, 456, 458, 441, 427, 460, 461, 454, 453, 424]}, {“n”: “Flower Valley”, “v”: [443, 440, 444, 470, 462, 472, 482, 476, 503, 492, 474, 490, 499, 470, 501, 540, 574, 524, 504, 476]}, {“n”: “Forest Knolls”, “v”: [506, 547, 609, 648, 671, 683, 709, 733, 769, 728, 734, 721, 755, 543, 483, 494, 492, 472, 471, 470]}, {“n”: “Fox Chapel”, “v”: [540, 570, 586, 593, 585, 622, 633, 595, 635, 634, 619, 598, 611, 589, 573, 593, 598, 617, 590, 562]}, {“n”: “Gaithersburg”, “v”: [481, 493, 530, 591, 654, 740, 756, 802, 864, 845, 857, 839, 865, 825, 774, 717, 665, 603, 583, 536]}, {“n”: “Galway”, “v”: [692, 744, 766, 790, 830, 828, 831, 806, 807, 786, 788, 788, 763, 750, 696, 733, 701, 695, 680, 694]}, {“n”: “Garrett Park”, “v”: [446, 471, 481, 551, 563, 632, 701, 745, 804, 805, 815, 798, 802, 729, 670, 686, 685, 724, 761, 709]}, {“n”: “Georgian Forest”, “v”: [457, 495, 494, 502, 541, 554, 583, 580, 585, 585, 633, 655, 625, 568, 554, 519, 552, 600, 623, 574]}, {“n”: “Germantown”, “v”: [288, 285, 274, 289, 313, 298, 290, 313, 318, 342, 321, 321, 324, 301, 289, 294, 318, 314, 316, 291]}, {“n”: “Glen Haven”, “v”: [564, 523, 516, 547, 533, 554, 538, 545, 551, 505, 503, 482, 511, 480, 503, 551, 564, 540, 500, 426]}, {“n”: “Glenallan”, “v”: [370, 374, 382, 403, 419, 468, 543, 650, 664, 716, 717, 746, 744, 707, 690, 656, 673, 679, 679, 654]}, {“n”: “Goshen”, “v”: [626, 613, 593, 590, 620, 581, 575, 579, 578, 605, 621, 578, 571, 522, 517, 516, 501, 494, 475, 417]}, {“n”: “Great Seneca Creek”, “v”: [682, 723, 745, 769, 764, 766, 744, 736, 700, 644, 628, 606, 594, 538, 521, 520, 510, 487, 464, 460]}, {“n”: “Greencastle”, “v”: [565, 604, 580, 652, 722, 718, 773, 808, 759, 741, 711, 700, 721, 743, 697, 714, 752, 722, 692, 652]}, {“n”: “Greenwood”, “v”: [579, 581, 554, 545, 534, 529, 529, 504, 481, 488, 485, 515, 521, 501, 546, 539, 543, 534, 525, 478]}, {“n”: “Harmony Hills”, “v”: [495, 542, 557, 566, 640, 740, 729, 730, 743, 746, 735, 716, 745, 690, 683, 699, 693, 655, 609, 605]}, {“n”: “Harriet R. Tubman”, “v”: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 440, 575, 571, 586, 555]}, {“n”: “Highland”, “v”: [488, 457, 479, 462, 485, 534, 544, 542, 558, 575, 583, 548, 555, 530, 521, 515, 510, 509, 494, 474]}, {“n”: “Highland View”, “v”: [329, 320, 348, 362, 385, 393, 390, 422, 411, 406, 397, 440, 434, 382, 371, 382, 380, 334, 311, 312]}, {“n”: “Jackson Road”, “v”: [539, 587, 587, 615, 637, 677, 694, 722, 691, 695, 684, 726, 732, 696, 660, 661, 647, 623, 620, 562]}, {“n”: “JoAnn Leleck”, “v”: [447, 485, 523, 615, 651, 694, 720, 747, 825, 859, 851, 828, 874, 821, 799, 761, 755, 756, 679, 674]}, {“n”: “Jones Lane”, “v”: [509, 498, 487, 502, 515, 489, 480, 469, 466, 455, 448, 420, 442, 402, 425, 449, 453, 428, 430, 377]}, {“n”: “Judith A. Resnik”, “v”: [544, 546, 520, 547, 587, 592, 614, 614, 646, 628, 636, 640, 602, 591, 559, 576, 542, 516, 483, 459]}, {“n”: “Kemp Mill”, “v”: [435, 441, 464, 489, 458, 477, 499, 529, 530, 529, 532, 491, 486, 458, 417, 422, 412, 412, 399, 369]}, {“n”: “Kensington Parkwood”, “v”: [499, 554, 590, 667, 683, 654, 673, 653, 644, 656, 657, 656, 642, 596, 597, 592, 560, 535, 533, 559]}, {“n”: “Lake Seneca”, “v”: [342, 372, 382, 392, 413, 449, 470, 536, 503, 532, 545, 516, 510, 461, 485, 459, 478, 437, 404, 390]}, {“n”: “Lakewood”, “v”: [598, 630, 631, 614, 585, 569, 553, 542, 543, 543, 519, 476, 460, 415, 412, 438, 439, 406, 413, 412]}, {“n”: “Laytonsville”, “v”: [470, 479, 472, 458, 455, 470, 455, 429, 412, 381, 377, 384, 392, 369, 347, 333, 365, 355, 365, 354]}, {“n”: “Little Bennett”, “v”: [769, 826, 793, 843, 883, 957, 986, 688, 645, 634, 629, 614, 636, 639, 642, 631, 609, 614, 571, 539]}, {“n”: “Lois P. Rockwell”, “v”: [406, 393, 389, 417, 441, 449, 440, 450, 459, 464, 470, 474, 452, 460, 481, 514, 526, 518, 477, 479]}, {“n”: “Lucy V. Barnsley”, “v”: [598, 597, 628, 666, 669, 663, 682, 686, 710, 713, 725, 721, 737, 701, 689, 657, 646, 621, 615, 611]}, {“n”: “Luxmanor”, “v”: [350, 370, 395, 435, 456, 452, 433, 460, 429, 467, 523, 576, 678, 656, 670, 707, 720, 684, 644, 647]}, {“n”: “Maryvale”, “v”: [595, 604, 584, 565, 573, 571, 575, 612, 620, 642, 650, 617, 625, 571, 609, 631, 632, 617, 593, 607]}, {“n”: “MCPS Pre-K At Stephen Knolls”, “v”: [39, 38, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}, {“n”: “Meadow Hall”, “v”: [319, 344, 366, 391, 415, 425, 442, 424, 462, 459, 423, 431, 407, 406, 385, 389, 377, 348, 327, 323]}, {“n”: “Mill Creek Towne”, “v”: [437, 444, 425, 422, 417, 408, 401, 410, 378, 363, 389, 464, 506, 482, 463, 468, 497, 528, 513, 508]}, {“n”: “Monocacy”, “v”: [204, 191, 176, 169, 160, 160, 165, 161, 167, 162, 146, 147, 151, 136, 154, 167, 180, 164, 166, 162]}, {“n”: “Montgomery Knolls”, “v”: [386, 409, 481, 444, 475, 488, 498, 508, 477, 507, 493, 489, 469, 490, 518, 515, 506, 477, 437, 402]}, {“n”: “New Hampshire Estates”, “v”: [386, 387, 410, 420, 484, 510, 508, 518, 502, 453, 459, 442, 478, 448, 427, 434, 455, 455, 441, 447]}, {“n”: “North Chevy Chase”, “v”: [316, 356, 395, 427, 421, 409, 402, 354, 387, 378, 281, 261, 259, 225, 222, 234, 243, 237, 211, 221]}, {“n”: “Oak View”, “v”: [242, 283, 309, 299, 329, 352, 350, 381, 403, 437, 471, 430, 423, 419, 399, 415, 409, 423, 423, 406]}, {“n”: “Oakland Terrace”, “v”: [693, 734, 793, 829, 870, 518, 507, 490, 480, 467, 488, 490, 531, 512, 493, 530, 501, 500, 500, 486]}, {“n”: “Olney”, “v”: [586, 575, 558, 581, 610, 612, 589, 630, 650, 661, 686, 692, 683, 634, 610, 613, 605, 585, 553, 536]}, {“n”: “Pine Crest”, “v”: [346, 357, 390, 416, 418, 438, 454, 474, 469, 492, 468, 435, 413, 446, 463, 468, 471, 493, 487, 498]}, {“n”: “Piney Branch”, “v”: [467, 480, 454, 476, 479, 493, 523, 526, 563, 612, 660, 677, 650, 626, 610, 599, 599, 575, 545, 568]}, {“n”: “Poolesville”, “v”: [405, 381, 382, 395, 387, 390, 396, 439, 421, 420, 448, 480, 489, 474, 538, 567, 561, 576, 548, 520]}, {“n”: “Potomac”, “v”: [541, 557, 569, 551, 518, 496, 499, 470, 474, 433, 444, 362, 376, 393, 402, 443, 435, 475, 454, 424]}, {“n”: “Rachel Carson”, “v”: [808, 838, 890, 873, 870, 934, 964, 1005, 1046, 1069, 1023, 973, 893, 792, 682, 698, 674, 671, 644, 640]}, {“n”: “Ritchie Park”, “v”: [428, 466, 521, 516, 531, 522, 541, 541, 532, 510, 540, 432, 401, 384, 382, 378, 361, 342, 348, 360]}, {“n”: “Rock Creek Forest”, “v”: [500, 507, 497, 548, 579, 597, 612, 629, 710, 723, 753, 739, 760, 734, 691, 673, 669, 690, 708, 646]}, {“n”: “Rock Creek Valley”, “v”: [386, 395, 378, 370, 420, 416, 437, 437, 437, 440, 416, 441, 436, 422, 375, 385, 367, 332, 376, 361]}, {“n”: “Rock View”, “v”: [493, 546, 582, 598, 646, 630, 655, 654, 615, 642, 606, 608, 654, 625, 612, 600, 571, 588, 599, 597]}, {“n”: “Rolling Terrace”, “v”: [618, 637, 685, 749, 753, 816, 872, 900, 893, 903, 892, 798, 775, 727, 718, 709, 656, 645, 636, 600]}, {“n”: “Ronald McNair”, “v”: [734, 731, 712, 749, 734, 791, 813, 848, 841, 874, 845, 847, 828, 800, 773, 729, 707, 673, 639, 613]}, {“n”: “Roscoe R. Nix”, “v”: [404, 415, 467, 494, 548, 544, 553, 519, 538, 495, 498, 506, 482, 481, 470, 473, 480, 437, 432, 449]}, {“n”: “Rosemary Hills”, “v”: [601, 629, 638, 658, 690, 731, 643, 628, 617, 597, 589, 559, 570, 516, 541, 578, 533, 499, 470, 461]}, {“n”: “Rosemont”, “v”: [478, 468, 502, 484, 522, 532, 542, 566, 588, 628, 619, 628, 645, 602, 595, 615, 595, 564, 593, 558]}, {“n”: “S. Christa McAuliffe”, “v”: [566, 570, 588, 584, 628, 636, 675, 629, 640, 596, 582, 567, 554, 565, 517, 517, 493, 467, 508, 484]}, {“n”: “Sargent Shriver”, “v”: [618, 632, 643, 688, 731, 758, 770, 756, 756, 798, 796, 775, 744, 736, 740, 734, 714, 697, 693, 639]}, {“n”: “Sequoyah”, “v”: [432, 407, 408, 413, 402, 445, 446, 438, 387, 404, 384, 389, 376, 368, 353, 431, 452, 460, 488, 429]}, {“n”: “Seven Locks”, “v”: [259, 279, 254, 300, 321, 358, 400, 397, 401, 422, 405, 429, 425, 390, 390, 386, 372, 376, 370, 367]}, {“n”: “Sherwood”, “v”: [481, 470, 469, 467, 455, 489, 520, 494, 513, 491, 493, 527, 524, 467, 492, 521, 520, 498, 462, 465]}, {“n”: “Sligo Creek”, “v”: [617, 615, 647, 582, 557, 564, 597, 637, 647, 671, 671, 670, 679, 658, 646, 649, 666, 632, 657, 604]}, {“n”: “Snowden Farm”, “v”: [null, null, null, null, null, null, null, null, null, null, null, null, 644, 757, 742, 668, 614, 578, 538, 487]}, {“n”: “Somerset”, “v”: [379, 397, 465, 518, 509, 516, 531, 565, 570, 595, 596, 587, 582, 500, 434, 338, 303, 314, 312, 285]}, {“n”: “South Lake”, “v”: [549, 607, 620, 659, 691, 786, 798, 850, 816, 849, 839, 831, 893, 790, 823, 797, 780, 746, 689, 662]}, {“n”: “Spark M. Matsunaga”, “v”: [877, 948, 1015, 1026, 1036, 1010, 958, 919, 860, 794, 771, 728, 710, 663, 584, 567, 569, 530, 502, 469]}, {“n”: “Stedwick”, “v”: [576, 591, 596, 605, 601, 594, 605, 575, 581, 608, 607, 583, 537, 516, 497, 501, 512, 492, 480, 486]}, {“n”: “Stone Mill”, “v”: [642, 608, 593, 608, 598, 621, 628, 598, 644, 618, 601, 613, 588, 521, 542, 550, 534, 516, 544, 664]}, {“n”: “Stonegate”, “v”: [453, 441, 466, 442, 457, 468, 474, 489, 494, 518, 510, 502, 501, 494, 494, 490, 549, 565, 536, 502]}, {“n”: “Strathmore”, “v”: [391, 398, 381, 402, 397, 407, 442, 454, 473, 453, 436, 448, 483, 491, 475, 487, 469, 464, 434, 423]}, {“n”: “Strawberry Knoll”, “v”: [532, 528, 549, 550, 544, 558, 597, 592, 621, 659, 658, 640, 651, 594, 598, 500, 470, 448, 430, 409]}, {“n”: “Summit Hall”, “v”: [454, 461, 497, 529, 537, 608, 602, 628, 675, 656, 668, 672, 702, 683, 675, 472, 422, 413, 407, 393]}, {“n”: “Takoma Park”, “v”: [396, 399, 408, 493, 560, 587, 651, 654, 703, 647, 623, 641, 613, 617, 546, 579, 598, 559, 564, 505]}, {“n”: “Thurgood Marshall”, “v”: [497, 523, 534, 541, 571, 590, 614, 605, 664, 662, 684, 667, 621, 556, 556, 591, 594, 553, 485, 440]}, {“n”: “Travilah”, “v”: [456, 441, 441, 431, 430, 429, 414, 411, 390, 393, 399, 358, 341, 323, 351, 377, 385, 372, 382, 382]}, {“n”: “Twinbrook”, “v”: [519, 532, 547, 559, 567, 551, 559, 531, 547, 563, 549, 582, 558, 508, 504, 489, 461, 459, 437, 445]}, {“n”: “Viers Mill”, “v”: [464, 504, 556, 580, 618, 646, 649, 707, 684, 675, 644, 604, 579, 503, 492, 528, 539, 556, 541, 507]}, {“n”: “Washington Grove”, “v”: [372, 371, 357, 369, 394, 383, 389, 404, 444, 445, 482, 488, 462, 403, 397, 434, 459, 480, 449, 466]}, {“n”: “Waters Landing”, “v”: [645, 632, 626, 629, 663, 669, 687, 694, 707, 698, 710, 667, 659, 673, 720, 753, 718, 735, 744, 685]}, {“n”: “Watkins Mill”, “v”: [529, 524, 538, 592, 575, 648, 636, 633, 672, 679, 696, 700, 731, 749, 795, 735, 716, 734, 729, 675]}, {“n”: “Wayside”, “v”: [603, 595, 568, 560, 576, 535, 523, 531, 526, 517, 548, 533, 500, 459, 450, 442, 470, 465, 453, 466]}, {“n”: “Weller Road”, “v”: [466, 533, 571, 577, 588, 604, 645, 654, 710, 686, 701, 714, 747, 677, 688, 742, 700, 691, 667, 643]}, {“n”: “Westbrook”, “v”: [336, 379, 385, 403, 411, 435, 430, 455, 437, 407, 380, 348, 341, 331, 285, 496, 513, 468, 462, 480]}, {“n”: “Westover”, “v”: [269, 261, 277, 280, 325, 321, 325, 306, 305, 288, 278, 308, 316, 281, 289, 289, 299, 294, 284, 273]}, {“n”: “Wheaton Woods”, “v”: [436, 421, 431, 472, 480, 471, 501, 533, 533, 521, 546, 522, 503, 494, 499, 559, 556, 556, 559, 537]}, {“n”: “Whetstone”, “v”: [586, 601, 618, 639, 683, 708, 712, 744, 788, 780, 790, 751, 742, 693, 681, 715, 718, 711, 741, 683]}, {“n”: “William B. Gibbs, Jr.”, “v”: [null, null, 552, 731, 741, 754, 749, 776, 748, 732, 705, 652, 621, 551, 516, 632, 601, 601, 567, 545]}, {“n”: “William Tyler Page”, “v”: [368, 387, 395, 413, 413, 402, 411, 409, 421, 418, 439, 535, 615, 622, 619, 611, 619, 620, 608, 627]}, {“n”: “Wilson Wims”, “v”: [null, null, null, null, null, null, null, 659, 921, 1101, 1207, 1244, 767, 624, 598, 563, 521, 484, 474, 476]}, {“n”: “Wood Acres”, “v”: [616, 645, 728, 733, 739, 767, 789, 714, 660, 662, 676, 660, 649, 583, 534, 605, 612, 609, 585, 611]}, {“n”: “Woodfield”, “v”: [402, 389, 366, 359, 338, 325, 328, 296, 284, 284, 331, 339, 355, 317, 338, 323, 318, 314, 280, 271]}, {“n”: “Woodlin”, “v”: [411, 443, 478, 500, 543, 562, 608, 625, 590, 588, 573, 577, 553, 511, 549, 560, 597, 603, 640, 664]}, {“n”: “Wyngate”, “v”: [559, 603, 632, 677, 694, 710, 767, 771, 755, 740, 738, 728, 741, 673, 701, 715, 679, 640, 629, 630]}], “MS”: [{“n”: “A. Mario Loiederman”, “v”: [924, 868, 850, 763, 801, 808, 835, 912, 919, 919, 944, 986, 999, 996, 935, 1001, 979, 978, 985, 984]}, {“n”: “Argyle”, “v”: [779, 765, 750, 753, 760, 795, 830, 915, 912, 929, 989, 1008, 1024, 1043, 968, 995, 919, 868, 843, 837]}, {“n”: “Benjamin Banneker”, “v”: [756, 772, 823, 808, 788, 769, 831, 879, 863, 861, 840, 856, 900, 864, 856, 781, 776, 705, 707, 703]}, {“n”: “Briggs Chaney”, “v”: [885, 905, 915, 903, 881, 875, 873, 903, 866, 889, 886, 896, 936, 978, 943, 864, 869, 858, 844, 812]}, {“n”: “Cabin John”, “v”: [929, 901, 940, 924, 918, 923, 950, 942, 941, 969, 1005, 1023, 1040, 1077, 1030, 974, 974, 983, 1021, 1055]}, {“n”: “Col. E. Brooke Lee / Odessa Shannon”, “v”: [465, 470, 490, 559, 586, 598, 659, 720, 691, 730, 757, 760, 771, 795, 760, 823, 771, 784, 766, 742]}, {“n”: “Dr. Martin Luther King, Jr.”, “v”: [635, 610, 577, 600, 611, 595, 609, 611, 623, 581, 596, 648, 764, 888, 905, 890, 858, 841, 773, 783]}, {“n”: “Earle B. Wood”, “v”: [805, 814, 847, 845, 908, 922, 937, 927, 970, 1002, 1026, 964, 994, 998, 1036, 1068, 1040, 1019, 999, 982]}, {“n”: “Eastern”, “v”: [792, 805, 786, 814, 859, 877, 870, 863, 905, 957, 971, 970, 1010, 966, 901, 893, 910, 963, 953, 943]}, {“n”: “Forest Oak”, “v”: [784, 824, 847, 853, 787, 771, 815, 823, 804, 789, 861, 864, 950, 920, 917, 923, 847, 828, 761, 764]}, {“n”: “Francis Scott Key”, “v”: [738, 769, 828, 869, 899, 868, 903, 943, 979, 923, 996, 991, 1004, 966, 968, 965, 991, 950, 950, 886]}, {“n”: “Gaithersburg”, “v”: [723, 714, 671, 665, 656, 682, 681, 750, 752, 797, 830, 863, 877, 868, 874, 875, 898, 869, 880, 847]}, {“n”: “Hallie Wells”, “v”: [null, null, null, null, null, null, null, null, null, 474, 752, 792, 873, 930, 971, 963, 943, 931, 901, 878]}, {“n”: “Herbert Hoover”, “v”: [1043, 1011, 1012, 1026, 1015, 999, 1041, 1063, 1038, 1017, 1006, 1043, 1045, 1021, 1002, 925, 926, 930, 959, 959]}, {“n”: “John Poole”, “v”: [387, 379, 355, 355, 380, 351, 351, 326, 332, 360, 375, 395, 390, 381, 427, 443, 432, 467, 440, 453]}, {“n”: “John T. Baker”, “v”: [689, 684, 649, 776, 837, 794, 813, 770, 813, 812, 872, 850, 830, 797, 832, 825, 842, 841, 819, 790]}, {“n”: “Julius West”, “v”: [975, 972, 965, 1038, 1093, 1118, 1131, 1197, 1279, 1316, 1324, 1317, 1382, 1375, 1352, 1325, 1306, 1365, 1283, 1257]}, {“n”: “Kingsview”, “v”: [861, 898, 895, 894, 924, 949, 987, 1002, 1034, 1041, 1029, 996, 983, 1048, 993, 960, 922, 908, 869, 880]}, {“n”: “Lakelands Park”, “v”: [846, 889, 854, 873, 919, 980, 1003, 1000, 1049, 1067, 1103, 1121, 1200, 1182, 1074, 1042, 1014, 993, 992, 1000]}, {“n”: “M.E.C.C.A. Business Learning Institute Charter”, “v”: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 186, null]}, {“n”: “Montgomery Village”, “v”: [656, 634, 664, 617, 628, 600, 647, 658, 713, 745, 742, 743, 790, 776, 755, 773, 807, 780, 755, 743]}, {“n”: “Neelsville”, “v”: [871, 851, 888, 881, 853, 825, 862, 915, 911, 915, 922, 944, 945, 842, 792, 815, 782, 781, 759, 796]}, {“n”: “Newport Mill”, “v”: [640, 649, 677, 620, 580, 575, 614, 600, 587, 593, 626, 675, 702, 670, 647, 623, 607, 652, 681, 641]}, {“n”: “North Bethesda”, “v”: [792, 803, 790, 800, 838, 819, 901, 949, 1028, 1102, 1165, 1163, 1233, 1198, 1152, 1110, 1163, 1224, 1229, 1178]}, {“n”: “Parkland”, “v”: [787, 820, 858, 826, 828, 872, 883, 943, 964, 973, 1000, 1058, 1141, 1158, 1157, 1050, 1092, 1185, 1186, 1108]}, {“n”: “Redland”, “v”: [674, 639, 606, 564, 534, 534, 507, 543, 550, 553, 560, 608, 635, 646, 614, 571, 583, 562, 567, 576]}, {“n”: “Ridgeview”, “v”: [741, 708, 695, 681, 688, 685, 670, 699, 746, 752, 704, 751, 784, 792, 772, 751, 749, 722, 684, 709]}, {“n”: “Robert Frost”, “v”: [1146, 1177, 1187, 1122, 1133, 1139, 1155, 1138, 1112, 1107, 1083, 1074, 1028, 1017, 972, 969, 959, 915, 913, 924]}, {“n”: “Roberto W. Clemente”, “v”: [1153, 1153, 1158, 1139, 1159, 1157, 1147, 1204, 1277, 1318, 1373, 1301, 1287, 1040, 943, 857, 866, 888, 909, 913]}, {“n”: “Rocky Hill”, “v”: [1063, 1109, 1168, 1049, 983, 998, 1091, 1130, 1279, 934, 804, 844, 883, 986, 999, 1058, 1041, 1010, 999, 1027]}, {“n”: “Rosa M. Parks”, “v”: [921, 918, 891, 911, 887, 871, 880, 904, 902, 869, 845, 826, 868, 864, 836, 848, 855, 863, 833, 838]}, {“n”: “Shady Grove”, “v”: [622, 593, 610, 585, 569, 551, 583, 595, 565, 627, 614, 627, 575, 578, 524, 495, 513, 514, 574, 565]}, {“n”: “Silver Creek”, “v”: [null, null, null, null, null, null, null, null, null, null, 549, 865, 887, 838, 795, 778, 766, 751, 731, 719]}, {“n”: “Silver Spring International”, “v”: [739, 728, 752, 775, 830, 916, 950, 974, 1042, 1066, 1082, 1125, 1153, 1160, 1157, 1158, 1062, 1015, 952, 857]}, {“n”: “Sligo”, “v”: [610, 630, 581, 482, 430, 411, 446, 521, 625, 703, 724, 657, 722, 738, 718, 676, 702, 685, 700, 722]}, {“n”: “Takoma Park”, “v”: [855, 834, 826, 826, 840, 918, 954, 993, 1055, 1075, 1090, 1107, 1162, 1158, 1129, 1077, 1124, 1177, 1197, 1208]}, {“n”: “Thomas W. Pyle”, “v”: [1303, 1289, 1336, 1291, 1338, 1370, 1411, 1479, 1516, 1489, 1485, 1530, 1534, 1433, 1312, 1241, 1260, 1259, 1232, 1259]}, {“n”: “Tilden”, “v”: [698, 697, 744, 743, 738, 772, 781, 797, 850, 911, 947, 989, 989, 1022, 1022, 1100, 1087, 1112, 1109, 1141]}, {“n”: “Westland”, “v”: [1035, 1031, 987, 1043, 1159, 1197, 1223, 1251, 1260, 1352, 1037, 770, 808, 764, 802, 845, 865, 839, 841, 864]}, {“n”: “White Oak”, “v”: [726, 700, 639, 643, 699, 706, 724, 746, 760, 772, 789, 784, 845, 860, 815, 852, 805, 808, 833, 852]}, {“n”: “William H. Farquhar”, “v”: [716, 701, 622, 635, 636, 638, 577, 582, 595, 668, 703, 705, 694, 671, 650, 674, 646, 682, 659, 656]}]}; const CL={“ES”: [{“n”: “Bethesda-Chevy Chase”, “k”: 7, “v”: [3018, 3218, 3332, 3550, 3605, 3724, 3644, 3692, 3839, 3854, 3641, 3596, 3643, 3366, 3269, 3361, 3272, 3287, 3225, 3135]}, {“n”: “Churchill”, “k”: 5, “v”: [2394, 2422, 2493, 2520, 2542, 2543, 2607, 2622, 2629, 2555, 2580, 2528, 2528, 2391, 2366, 2465, 2429, 2412, 2367, 2347]}, {“n”: “Clarksburg”, “k”: 7, “v”: [2190, 2263, 2236, 2235, 2295, 2437, 2499, 2835, 3108, 3359, 3472, 3570, 3899, 3877, 3847, 3748, 3790, 3775, 3696, 3542]}, {“n”: “Damascus”, “k”: 5, “v”: [2292, 2243, 2002, 2053, 2134, 2229, 2415, 2311, 2289, 2353, 2407, 2385, 2175, 2072, 2120, 2163, 2078, 2030, 1938, 1935]}, {“n”: “Downcounty Consortium”, “k”: 29, “v”: [12575, 13134, 13938, 14570, 15284, 16131, 16805, 17407, 17700, 17713, 17735, 17445, 17563, 16505, 16173, 16485, 16432, 16369, 16015, 15419]}, {“n”: “Gaithersburg”, “k”: 7, “v”: [2935, 2945, 2998, 3087, 3204, 3340, 3374, 3434, 3594, 3591, 3663, 3601, 3643, 3396, 3308, 3412, 3457, 3364, 3295, 3130]}, {“n”: “Magruder”, “k”: 6, “v”: [2501, 2462, 2419, 2503, 2552, 2614, 2619, 2633, 2631, 2624, 2658, 2679, 2669, 2593, 2489, 2639, 2662, 2702, 2665, 2544]}, {“n”: “Northeast Consortium”, “k”: 14, “v”: [6452, 6649, 6842, 7094, 7388, 7565, 7646, 7701, 7715, 7712, 7678, 7898, 7830, 7723, 7423, 7578, 7695, 7633, 7371, 7128]}, {“n”: “Northwest”, “k”: 7, “v”: [4363, 4523, 4718, 4754, 4769, 4888, 4891, 4923, 4890, 4897, 4830, 4796, 4678, 4352, 4046, 3989, 3927, 3829, 3686, 3510]}, {“n”: “Poolesville”, “k”: 2, “v”: [609, 572, 558, 564, 547, 550, 561, 600, 588, 582, 594, 627, 640, 610, 692, 734, 741, 740, 714, 682]}, {“n”: “Quince Orchard”, “k”: 4, “v”: [1777, 1838, 1897, 1970, 2057, 2072, 2117, 2060, 2093, 2042, 2178, 2146, 2186, 2028, 2046, 2109, 2127, 2006, 1914, 1807]}, {“n”: “Richard Montgomery”, “k”: 4, “v”: [1693, 1852, 1928, 2059, 2143, 2165, 2193, 2200, 2262, 2253, 2215, 2449, 2442, 2293, 2248, 2215, 2244, 2197, 2056, 2029]}, {“n”: “Rockville”, “k”: 6, “v”: [2733, 2765, 2794, 2864, 3017, 2979, 3075, 3086, 3177, 3197, 3165, 3156, 3171, 2991, 2981, 3012, 3022, 2878, 2824, 2745]}, {“n”: “Seneca Valley”, “k”: 6, “v”: [2342, 2409, 2991, 3162, 3278, 3316, 3415, 3472, 3431, 3400, 3341, 3242, 3170, 3026, 2999, 3157, 3063, 2982, 2938, 2763]}, {“n”: “Sherwood”, “k”: 5, “v”: [2457, 2412, 2332, 2306, 2300, 2336, 2335, 2338, 2349, 2384, 2391, 2500, 2540, 2392, 2428, 2434, 2431, 2350, 2288, 2234]}, {“n”: “Walter Johnson”, “k”: 6, “v”: [3035, 3190, 3324, 3642, 3827, 3892, 4063, 4174, 4234, 4326, 4407, 4479, 4641, 4328, 4265, 4307, 4278, 4301, 4210, 4154]}, {“n”: “Watkins Mill”, “k”: 4, “v”: [2240, 2323, 2372, 2495, 2550, 2736, 2751, 2802, 2857, 2916, 2932, 2865, 2903, 2748, 2796, 2748, 2726, 2683, 2639, 2506]}, {“n”: “Whitman”, “k”: 5, “v”: [2195, 2245, 2394, 2451, 2488, 2574, 2690, 2659, 2612, 2674, 2611, 2524, 2511, 2220, 2160, 2261, 2319, 2371, 2283, 2256]}, {“n”: “Wootton”, “k”: 8, “v”: [3900, 3931, 4009, 3972, 3973, 3934, 3918, 3885, 3884, 3843, 3876, 3709, 3647, 3387, 3394, 3496, 3410, 3350, 3412, 3477]}], “MS”: [{“n”: “Bethesda-Chevy Chase”, “k”: 2, “v”: [1035, 1031, 987, 1043, 1159, 1197, 1223, 1251, 1260, 1352, 1586, 1635, 1695, 1602, 1597, 1623, 1631, 1590, 1572, 1583]}, {“n”: “Churchill”, “k”: 2, “v”: [1972, 1912, 1952, 1950, 1933, 1922, 1991, 2005, 1979, 1986, 2011, 2066, 2085, 2098, 2032, 1899, 1900, 1913, 1980, 2014]}, {“n”: “Clarksburg”, “k”: 1, “v”: [1063, 1109, 1168, 1049, 983, 998, 1091, 1130, 1279, 934, 804, 844, 883, 986, 999, 1058, 1041, 1010, 999, 1027]}, {“n”: “Damascus”, “k”: 2, “v”: [689, 684, 649, 776, 837, 794, 813, 770, 813, 1286, 1624, 1642, 1703, 1727, 1803, 1788, 1785, 1772, 1720, 1668]}, {“n”: “Downcounty Consortium”, “k”: 9, “v”: [6591, 6569, 6570, 6418, 6514, 6770, 7041, 7441, 7700, 7945, 8183, 8346, 8684, 8684, 8372, 8296, 8166, 8307, 8263, 8042]}, {“n”: “Gaithersburg”, “k”: 2, “v”: [1507, 1538, 1518, 1518, 1443, 1453, 1496, 1573, 1556, 1586, 1691, 1727, 1827, 1788, 1791, 1798, 1745, 1697, 1641, 1611]}, {“n”: “Magruder”, “k”: 2, “v”: [1296, 1232, 1216, 1149, 1103, 1085, 1090, 1138, 1115, 1180, 1174, 1235, 1210, 1224, 1138, 1066, 1096, 1076, 1141, 1141]}, {“n”: “Northeast Consortium”, “k”: 4, “v”: [3105, 3146, 3205, 3223, 3267, 3218, 3331, 3471, 3468, 3445, 3511, 3527, 3685, 3668, 3582, 3462, 3441, 3321, 3334, 3253]}, {“n”: “Northwest”, “k”: 2, “v”: [1707, 1787, 1749, 1767, 1843, 1929, 1990, 2002, 2083, 2108, 2132, 2117, 2183, 2230, 2067, 2002, 1936, 1901, 1861, 1880]}, {“n”: “Poolesville”, “k”: 1, “v”: [387, 379, 355, 355, 380, 351, 351, 326, 332, 360, 375, 395, 390, 381, 427, 443, 432, 467, 440, 453]}, {“n”: “Quince Orchard”, “k”: 1, “v”: [741, 708, 695, 681, 688, 685, 670, 699, 746, 752, 704, 751, 784, 792, 772, 751, 749, 722, 684, 709]}, {“n”: “Richard Montgomery”, “k”: 1, “v”: [975, 972, 965, 1038, 1093, 1118, 1131, 1197, 1279, 1316, 1324, 1317, 1382, 1375, 1352, 1325, 1306, 1365, 1283, 1257]}, {“n”: “Rockville”, “k”: 1, “v”: [805, 814, 847, 845, 908, 922, 937, 927, 970, 1002, 1026, 964, 994, 998, 1036, 1068, 1040, 1019, 999, 982]}, {“n”: “Seneca Valley”, “k”: 3, “v”: [2659, 2614, 2623, 2620, 2623, 2577, 2618, 2730, 2811, 2814, 2891, 2893, 2996, 2770, 2640, 2562, 2506, 2510, 2441, 2492]}, {“n”: “Sherwood”, “k”: 2, “v”: [1637, 1619, 1513, 1546, 1523, 1509, 1457, 1486, 1497, 1537, 1548, 1531, 1562, 1535, 1486, 1522, 1501, 1545, 1492, 1494]}, {“n”: “Walter Johnson”, “k”: 2, “v”: [1490, 1500, 1534, 1543, 1576, 1591, 1682, 1746, 1878, 2013, 2112, 2152, 2222, 2220, 2174, 2210, 2250, 2336, 2338, 2319]}, {“n”: “Watkins Mill”, “k”: 1, “v”: [656, 634, 664, 617, 628, 600, 647, 658, 713, 745, 742, 743, 790, 776, 755, 773, 807, 780, 755, 743]}, {“n”: “Whitman”, “k”: 1, “v”: [1303, 1289, 1336, 1291, 1338, 1370, 1411, 1479, 1516, 1489, 1485, 1530, 1534, 1433, 1312, 1241, 1260, 1259, 1232, 1259]}, {“n”: “Wootton”, “k”: 1, “v”: [1146, 1177, 1187, 1122, 1133, 1139, 1155, 1138, 1112, 1107, 1083, 1074, 1028, 1017, 972, 969, 959, 915, 913, 924]}]}; const YEARS=Array.from({length:20},(_,i)=>2007+i); const tip=document.getElementById(‘mcps-tip’); function chart(key,title){ const sec=document.getElementById(‘mcps-‘+key); sec.innerHTML=`

${title}

`; const body=sec.querySelector(‘.body’); const views={s:()=>plot(body,DATA[key],’schools’,`${DATA[key].length} schools · enrollment as of Sept 30`), c:()=>plot(body,CL[key],’clusters’,`${CL[key].length} clusters · sum of each cluster’s ${key==’ES’?’elementary’:’middle’} schools (current cluster assignments applied to all years)`)}; sec.querySelectorAll(‘.seg button’).forEach(b=>b.onclick=()=>{sec.querySelectorAll(‘.seg button’).forEach(x=>x.classList.toggle(‘on’,x===b));views[b.dataset.v]()}); views.s(); } function plot(sec,rows,unit,meta){ sec.innerHTML=`
${meta}
${rows.map(r=>“).join(”)}
`; const W=1060,H=520,m={l:52,r:150,t:12,b:30}; const max=Math.ceil(Math.max(…rows.flatMap(r=>r.v.filter(v=>v!=null)))/(unit==’clusters’?1000:100))*(unit==’clusters’?1000:100); const x=y=>m.l+(y-2007)/(2026-2007)*(W-m.l-m.r), yv=v=>m.t+(1-v/max)*(H-m.t-m.b); const NS=’http://www.w3.org/2000/svg&#8217;;const svg=document.createElementNS(NS,’svg’);svg.setAttribute(‘viewBox’,`0 0 ${W} ${H}`);sec.appendChild(svg); let g=”;const step=unit==’clusters’?(max>10000?2000:1000):(max>1200?200:100); g+=“; for(let v=0;v<=max;v+=step)g+=`${v.toLocaleString()}`; for(const y of YEARS)if(y%2==1||y==2026)g+=`${y==2026?’2026*’:y}`; g+=`*prelim.`; svg.innerHTML=g;const LG=svg.querySelector(‘.lines’),LB=svg.querySelector(‘.labels’); const paths=rows.map((r,i)=>{let d=”,pen=false;r.v.forEach((v,j)=>{if(v==null){pen=false;return}d+=(pen?’L’:’M’)+x(YEARS[j]).toFixed(1)+’,’+yv(v).toFixed(1);pen=true}); const p=document.createElementNS(NS,’path’);if(d&&!d.includes(‘L’))d+=’l0.1,0′;p.setAttribute(‘d’,d||’M0,0′);p.setAttribute(‘class’,’s’+(unit==’clusters’?’ cl’:”));p.dataset.i=i;LG.appendChild(p);return p}); const pinned=new Set();const chips=sec.querySelector(‘.chips’); function lastPt(r){for(let j=r.v.length-1;j>=0;j–)if(r.v[j]!=null)return [YEARS[j],r.v[j]]} function render(hov){paths.forEach((p,i)=>{p.classList.toggle(‘pin’,pinned.has(i));p.classList.toggle(‘hov’,i===hov&&!pinned.has(i));p.classList.toggle(‘dim’,(pinned.size>0||hov!=null)&&!pinned.has(i)&&i!==hov)}); […pinned].forEach(i=>LG.appendChild(paths[i]));if(hov!=null)LG.appendChild(paths[hov]); const L=[…pinned];if(hov!=null&&!pinned.has(hov))L.push(hov); const pos=L.map(i=>{const [yy,v]=lastPt(rows[i]);return {i,x:x(yy)+6,y:yv(v)+4}}).sort((a,b)=>a.y-b.y);for(let k=1;k<pos.length;k++)if(pos[k].y-pos[k-1].y`${rows[p.i].n}`).join(”); chips.innerHTML=[…pinned].map(i=>`${rows[i].n}`).join(”);} function nearest(evt){const pt=svg.createSVGPoint();pt.x=evt.clientX;pt.y=evt.clientY;const p=pt.matrixTransform(svg.getScreenCTM().inverse()); const j=Math.round((p.x-m.l)/(W-m.l-m.r)*19);if(j19)return null;let best=null,bd=unit==’clusters’?20:14; rows.forEach((r,i)=>{const v=r.v[j];if(v==null)return;const dd=Math.abs(yv(v)-p.y);if(dd{const n=nearest(e);if(!n){tip.style.display=’none’;render(null);return} const r=rows[n.i],v=r.v[n.j],pv=n.j>0?r.v[n.j-1]:null;const yl=YEARS[n.j]+’-‘+String(YEARS[n.j]+1).slice(2)+(n.j==19?’ (prelim.)’:”); tip.innerHTML=`${r.n}${r.k?`${r.k} schools
`:”}${yl}: ${v.toLocaleString()}${pv!=null?` (${v-pv>=0?’+’:”}${(v-pv).toLocaleString()} vs prior yr)`:”}`; tip.style.display=’block’;tip.style.left=Math.min(e.clientX+14,innerWidth-260)+’px’;tip.style.top=(e.clientY+14)+’px’;render(n.i)}); svg.addEventListener(‘mouseleave’,()=>{tip.style.display=’none’;render(null)}); svg.addEventListener(‘click’,e=>{const n=nearest(e);if(!n)return;pinned.has(n.i)?pinned.delete(n.i):pinned.add(n.i);render(n.i)}); const inp=sec.querySelector(‘input’);inp.addEventListener(‘change’,()=>{const i=rows.findIndex(r=>r.n.toLowerCase()==inp.value.trim().toLowerCase());if(i>=0){pinned.add(i);inp.value=”;render(null)}}); sec.querySelector(‘button’).onclick=()=>{pinned.clear();render(null)}; chips.addEventListener(‘click’,e=>{const c=e.target.closest(‘.chip’);if(c){pinned.delete(+c.dataset.i);render(null)}}); } chart(‘ES’,’Elementary schools’);chart(‘MS’,’Middle schools’); })();