|
351 | 351 | "cell_type": "markdown", |
352 | 352 | "id": "21", |
353 | 353 | "metadata": {}, |
| 354 | + "source": [ |
| 355 | + "### Multi-Trace Figures\n", |
| 356 | + "\n", |
| 357 | + "When both base and secondary figures already split into multiple traces (e.g. a categorical xarray dimension), `add_secondary_y` keeps each side's traces visible in the legend. If the two figures share `legendgroup` names — common when they share a categorical dimension — those legendgroups are namespaced with each figure's y-axis title so every trace gets its own legend entry." |
| 358 | + ] |
| 359 | + }, |
| 360 | + { |
| 361 | + "cell_type": "code", |
| 362 | + "execution_count": null, |
| 363 | + "id": "22", |
| 364 | + "metadata": {}, |
| 365 | + "outputs": [], |
| 366 | + "source": [ |
| 367 | + "# All four countries on both axes — population on left, GDP per capita on right.\n", |
| 368 | + "# Both figures have legendgroups \"United States\", \"China\", ... — without\n", |
| 369 | + "# namespacing, the secondary's three traces would be deduped out of the legend.\n", |
| 370 | + "pop_fig = xpx(population).line(markers=True)\n", |
| 371 | + "gdp_fig = xpx(gdp_per_capita).line()\n", |
| 372 | + "\n", |
| 373 | + "combined = add_secondary_y(pop_fig, gdp_fig, secondary_y_title=\"GDP per Capita ($)\")\n", |
| 374 | + "combined.update_layout(\n", |
| 375 | + " title=\"Population (left) vs GDP per Capita (right) — all countries\",\n", |
| 376 | + " yaxis_title=\"Population\",\n", |
| 377 | + ")\n", |
| 378 | + "combined" |
| 379 | + ] |
| 380 | + }, |
| 381 | + { |
| 382 | + "cell_type": "markdown", |
| 383 | + "id": "23", |
| 384 | + "metadata": {}, |
354 | 385 | "source": [ |
355 | 386 | "### With Animation\n", |
356 | 387 | "\n", |
|
360 | 391 | { |
361 | 392 | "cell_type": "code", |
362 | 393 | "execution_count": null, |
363 | | - "id": "22", |
| 394 | + "id": "24", |
364 | 395 | "metadata": {}, |
365 | 396 | "outputs": [], |
366 | 397 | "source": [ |
|
378 | 409 | }, |
379 | 410 | { |
380 | 411 | "cell_type": "markdown", |
381 | | - "id": "23", |
| 412 | + "id": "25", |
382 | 413 | "metadata": {}, |
383 | 414 | "source": [ |
384 | 415 | "### Static Secondary on Animated Base\n", |
|
389 | 420 | { |
390 | 421 | "cell_type": "code", |
391 | 422 | "execution_count": null, |
392 | | - "id": "24", |
| 423 | + "id": "26", |
393 | 424 | "metadata": {}, |
394 | 425 | "outputs": [], |
395 | 426 | "source": [ |
|
410 | 441 | }, |
411 | 442 | { |
412 | 443 | "cell_type": "markdown", |
413 | | - "id": "25", |
| 444 | + "id": "27", |
414 | 445 | "metadata": {}, |
415 | 446 | "source": [ |
416 | 447 | "### With Facets\n", |
|
421 | 452 | { |
422 | 453 | "cell_type": "code", |
423 | 454 | "execution_count": null, |
424 | | - "id": "26", |
| 455 | + "id": "28", |
425 | 456 | "metadata": {}, |
426 | 457 | "outputs": [], |
427 | 458 | "source": [ |
|
439 | 470 | }, |
440 | 471 | { |
441 | 472 | "cell_type": "markdown", |
442 | | - "id": "27", |
| 473 | + "id": "29", |
443 | 474 | "metadata": {}, |
444 | 475 | "source": [ |
445 | 476 | "## subplots\n", |
|
450 | 481 | }, |
451 | 482 | { |
452 | 483 | "cell_type": "markdown", |
453 | | - "id": "28", |
| 484 | + "id": "30", |
454 | 485 | "metadata": {}, |
455 | 486 | "source": [ |
456 | 487 | "### Different Variables Side by Side" |
|
459 | 490 | { |
460 | 491 | "cell_type": "code", |
461 | 492 | "execution_count": null, |
462 | | - "id": "29", |
| 493 | + "id": "31", |
463 | 494 | "metadata": {}, |
464 | 495 | "outputs": [], |
465 | 496 | "source": [ |
|
479 | 510 | }, |
480 | 511 | { |
481 | 512 | "cell_type": "markdown", |
482 | | - "id": "30", |
| 513 | + "id": "32", |
483 | 514 | "metadata": {}, |
484 | 515 | "source": [ |
485 | 516 | "### 2x2 Grid\n", |
|
490 | 521 | { |
491 | 522 | "cell_type": "code", |
492 | 523 | "execution_count": null, |
493 | | - "id": "31", |
| 524 | + "id": "33", |
494 | 525 | "metadata": {}, |
495 | 526 | "outputs": [], |
496 | 527 | "source": [ |
|
507 | 538 | }, |
508 | 539 | { |
509 | 540 | "cell_type": "markdown", |
510 | | - "id": "32", |
| 541 | + "id": "34", |
511 | 542 | "metadata": {}, |
512 | 543 | "source": [ |
513 | 544 | "### Mixed Chart Types\n", |
|
519 | 550 | { |
520 | 551 | "cell_type": "code", |
521 | 552 | "execution_count": null, |
522 | | - "id": "33", |
| 553 | + "id": "35", |
523 | 554 | "metadata": {}, |
524 | 555 | "outputs": [], |
525 | 556 | "source": [ |
|
535 | 566 | }, |
536 | 567 | { |
537 | 568 | "cell_type": "markdown", |
538 | | - "id": "34", |
| 569 | + "id": "36", |
539 | 570 | "metadata": {}, |
540 | 571 | "source": [ |
541 | 572 | "### With Facets\n", |
|
546 | 577 | { |
547 | 578 | "cell_type": "code", |
548 | 579 | "execution_count": null, |
549 | | - "id": "35", |
| 580 | + "id": "37", |
550 | 581 | "metadata": {}, |
551 | 582 | "outputs": [], |
552 | 583 | "source": [ |
|
561 | 592 | }, |
562 | 593 | { |
563 | 594 | "cell_type": "markdown", |
564 | | - "id": "36", |
| 595 | + "id": "38", |
565 | 596 | "metadata": {}, |
566 | 597 | "source": [ |
567 | 598 | "---\n", |
|
573 | 604 | }, |
574 | 605 | { |
575 | 606 | "cell_type": "markdown", |
576 | | - "id": "37", |
| 607 | + "id": "39", |
577 | 608 | "metadata": {}, |
578 | 609 | "source": [ |
579 | 610 | "### overlay: Mismatched Facet Structure\n", |
|
584 | 615 | { |
585 | 616 | "cell_type": "code", |
586 | 617 | "execution_count": null, |
587 | | - "id": "38", |
| 618 | + "id": "40", |
588 | 619 | "metadata": {}, |
589 | 620 | "outputs": [], |
590 | 621 | "source": [ |
|
602 | 633 | }, |
603 | 634 | { |
604 | 635 | "cell_type": "markdown", |
605 | | - "id": "39", |
| 636 | + "id": "41", |
606 | 637 | "metadata": {}, |
607 | 638 | "source": [ |
608 | 639 | "### overlay: Animated Overlay on Static Base\n", |
|
613 | 644 | { |
614 | 645 | "cell_type": "code", |
615 | 646 | "execution_count": null, |
616 | | - "id": "40", |
| 647 | + "id": "42", |
617 | 648 | "metadata": {}, |
618 | 649 | "outputs": [], |
619 | 650 | "source": [ |
|
631 | 662 | }, |
632 | 663 | { |
633 | 664 | "cell_type": "markdown", |
634 | | - "id": "41", |
| 665 | + "id": "43", |
635 | 666 | "metadata": {}, |
636 | 667 | "source": [ |
637 | 668 | "### overlay: Mismatched Animation Frames\n", |
|
642 | 673 | { |
643 | 674 | "cell_type": "code", |
644 | 675 | "execution_count": null, |
645 | | - "id": "42", |
| 676 | + "id": "44", |
646 | 677 | "metadata": {}, |
647 | 678 | "outputs": [], |
648 | 679 | "source": [ |
|
658 | 689 | }, |
659 | 690 | { |
660 | 691 | "cell_type": "markdown", |
661 | | - "id": "43", |
| 692 | + "id": "45", |
662 | 693 | "metadata": {}, |
663 | 694 | "source": [ |
664 | 695 | "### add_secondary_y: Mismatched Facet Structure\n", |
|
669 | 700 | { |
670 | 701 | "cell_type": "code", |
671 | 702 | "execution_count": null, |
672 | | - "id": "44", |
| 703 | + "id": "46", |
673 | 704 | "metadata": {}, |
674 | 705 | "outputs": [], |
675 | 706 | "source": [ |
|
687 | 718 | }, |
688 | 719 | { |
689 | 720 | "cell_type": "markdown", |
690 | | - "id": "45", |
| 721 | + "id": "47", |
691 | 722 | "metadata": {}, |
692 | 723 | "source": [ |
693 | 724 | "### add_secondary_y: Animated Secondary on Static Base\n", |
|
698 | 729 | { |
699 | 730 | "cell_type": "code", |
700 | 731 | "execution_count": null, |
701 | | - "id": "46", |
| 732 | + "id": "48", |
702 | 733 | "metadata": {}, |
703 | 734 | "outputs": [], |
704 | 735 | "source": [ |
|
716 | 747 | }, |
717 | 748 | { |
718 | 749 | "cell_type": "markdown", |
719 | | - "id": "47", |
| 750 | + "id": "49", |
720 | 751 | "metadata": {}, |
721 | 752 | "source": [ |
722 | 753 | "### add_secondary_y: Mismatched Animation Frames" |
|
725 | 756 | { |
726 | 757 | "cell_type": "code", |
727 | 758 | "execution_count": null, |
728 | | - "id": "48", |
| 759 | + "id": "50", |
729 | 760 | "metadata": {}, |
730 | 761 | "outputs": [], |
731 | 762 | "source": [ |
|
741 | 772 | }, |
742 | 773 | { |
743 | 774 | "cell_type": "markdown", |
744 | | - "id": "49", |
| 775 | + "id": "51", |
745 | 776 | "metadata": {}, |
746 | 777 | "source": [ |
747 | 778 | "## Summary\n", |
|
761 | 792 | "name": "python3" |
762 | 793 | }, |
763 | 794 | "language_info": { |
| 795 | + "codemirror_mode": { |
| 796 | + "name": "ipython", |
| 797 | + "version": 3 |
| 798 | + }, |
| 799 | + "file_extension": ".py", |
| 800 | + "mimetype": "text/x-python", |
764 | 801 | "name": "python", |
765 | | - "version": "3.12.0" |
| 802 | + "nbconvert_exporter": "python", |
| 803 | + "pygments_lexer": "ipython3", |
| 804 | + "version": "3.12.9" |
766 | 805 | } |
767 | 806 | }, |
768 | 807 | "nbformat": 4, |
|
0 commit comments