From 28d9b8034ccab62b8bc48e3cf8333f09d4082540 Mon Sep 17 00:00:00 2001 From: Johannes Wolf Date: Thu, 23 May 2024 22:31:54 +0200 Subject: [PATCH] treewide: Initial comit --- .editorconfig | 10 + .github/workflows/ci.yml | 44 ++ LICENSE | 674 +++++++++++++++++++ README.md | 63 ++ gallery/.gitkeep | 0 gallery/barchart.png | Bin 0 -> 90399 bytes gallery/barchart.typ | 26 + gallery/line.pdf | Bin 0 -> 125399 bytes gallery/line.png | Bin 0 -> 63015 bytes gallery/line.typ | 26 + gallery/piechart.pdf | Bin 0 -> 14147 bytes gallery/piechart.png | Bin 0 -> 63367 bytes gallery/piechart.typ | 32 + justfile | 22 + manual.typ | 1 + scripts/package | 91 +++ scripts/relpaths | 20 + src/axes.typ | 825 ++++++++++++++++++++++++ src/cetz.typ | 2 + src/chart.typ | 4 + src/chart/barchart.typ | 141 ++++ src/chart/barcol-common.typ | 40 ++ src/chart/boxwhisker.typ | 97 +++ src/chart/columnchart.typ | 141 ++++ src/chart/piechart.typ | 431 +++++++++++++ src/lib.typ | 5 + src/plot.typ | 513 +++++++++++++++ src/plot/annotation.typ | 76 +++ src/plot/bar.typ | 264 ++++++++ src/plot/boxwhisker.typ | 117 ++++ src/plot/contour.typ | 350 ++++++++++ src/plot/errorbar.typ | 118 ++++ src/plot/legend.typ | 179 +++++ src/plot/line.typ | 508 +++++++++++++++ src/plot/mark.typ | 51 ++ src/plot/sample.typ | 79 +++ src/plot/util.typ | 350 ++++++++++ tests/.gitignore | 3 + tests/axes/ref/1.png | Bin 0 -> 28029 bytes tests/axes/test.typ | 59 ++ tests/chart/boxwhisker/ref/1.png | Bin 0 -> 18989 bytes tests/chart/boxwhisker/test.typ | 26 + tests/chart/piechart/ref/1.png | Bin 0 -> 80349 bytes tests/chart/piechart/test.typ | 110 ++++ tests/chart/ref/1.png | Bin 0 -> 244400 bytes tests/chart/test.typ | 226 +++++++ tests/helper.typ | 31 + tests/plot/annotation/ref.png | Bin 0 -> 63021 bytes tests/plot/annotation/ref/1.png | Bin 0 -> 18920 bytes tests/plot/annotation/test.typ | 25 + tests/plot/bar/ref/1.png | Bin 0 -> 6987 bytes tests/plot/bar/test.typ | 20 + tests/plot/boxwhisker/ref/1.png | Bin 0 -> 53599 bytes tests/plot/boxwhisker/test.typ | 57 ++ tests/plot/broken-axes/ref/1.png | Bin 0 -> 36355 bytes tests/plot/broken-axes/test.typ | 23 + tests/plot/contour/ref/1.png | Bin 0 -> 83206 bytes tests/plot/contour/test.typ | 130 ++++ tests/plot/equal-axis/ref/1.png | Bin 0 -> 14905 bytes tests/plot/equal-axis/test.typ | 36 ++ tests/plot/grid/ref/1.png | Bin 0 -> 25662 bytes tests/plot/grid/test.typ | 74 +++ tests/plot/hvline/ref/1.png | Bin 0 -> 9648 bytes tests/plot/hvline/test.typ | 61 ++ tests/plot/legend/ref/1.png | Bin 0 -> 145605 bytes tests/plot/legend/test.typ | 166 +++++ tests/plot/line/between/ref/1.png | Bin 0 -> 52915 bytes tests/plot/line/between/test.typ | 107 +++ tests/plot/line/fill/ref/1.png | Bin 0 -> 57898 bytes tests/plot/line/fill/test.typ | 178 +++++ tests/plot/line/line-type/ref/1.png | Bin 0 -> 19091 bytes tests/plot/line/line-type/test.typ | 25 + tests/plot/line/linearization/ref.png | Bin 0 -> 115459 bytes tests/plot/line/linearization/ref/1.png | Bin 0 -> 32512 bytes tests/plot/line/linearization/test.typ | 28 + tests/plot/line/mark/ref/1.png | Bin 0 -> 13195 bytes tests/plot/line/mark/test.typ | 28 + tests/plot/line/spline/ref.png | Bin 0 -> 65507 bytes tests/plot/line/spline/ref/1.png | Bin 0 -> 20868 bytes tests/plot/line/spline/test.typ | 16 + tests/plot/mirror-axes/ref/1.png | Bin 0 -> 27385 bytes tests/plot/mirror-axes/test.typ | 12 + tests/plot/parametric/ref/1.png | Bin 0 -> 54120 bytes tests/plot/parametric/test.typ | 94 +++ tests/plot/ref.png | Bin 0 -> 823129 bytes tests/plot/ref/1.png | Bin 0 -> 264580 bytes tests/plot/reverse-axis/ref.png | Bin 0 -> 161152 bytes tests/plot/reverse-axis/ref/1.png | Bin 0 -> 36238 bytes tests/plot/reverse-axis/test.typ | 18 + tests/plot/sample/sample.typ | 37 ++ tests/plot/test.typ | 288 +++++++++ tests/plot/vertical/ref/1.png | Bin 0 -> 78757 bytes tests/plot/vertical/test.typ | 51 ++ typst.toml | 15 + 94 files changed, 7244 insertions(+) create mode 100644 .editorconfig create mode 100644 .github/workflows/ci.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 gallery/.gitkeep create mode 100644 gallery/barchart.png create mode 100644 gallery/barchart.typ create mode 100644 gallery/line.pdf create mode 100644 gallery/line.png create mode 100644 gallery/line.typ create mode 100644 gallery/piechart.pdf create mode 100644 gallery/piechart.png create mode 100644 gallery/piechart.typ create mode 100644 justfile create mode 100644 manual.typ create mode 100755 scripts/package create mode 100755 scripts/relpaths create mode 100644 src/axes.typ create mode 100644 src/cetz.typ create mode 100644 src/chart.typ create mode 100644 src/chart/barchart.typ create mode 100644 src/chart/barcol-common.typ create mode 100644 src/chart/boxwhisker.typ create mode 100644 src/chart/columnchart.typ create mode 100644 src/chart/piechart.typ create mode 100644 src/lib.typ create mode 100644 src/plot.typ create mode 100644 src/plot/annotation.typ create mode 100644 src/plot/bar.typ create mode 100644 src/plot/boxwhisker.typ create mode 100644 src/plot/contour.typ create mode 100644 src/plot/errorbar.typ create mode 100644 src/plot/legend.typ create mode 100644 src/plot/line.typ create mode 100644 src/plot/mark.typ create mode 100644 src/plot/sample.typ create mode 100644 src/plot/util.typ create mode 100644 tests/.gitignore create mode 100644 tests/axes/ref/1.png create mode 100644 tests/axes/test.typ create mode 100644 tests/chart/boxwhisker/ref/1.png create mode 100644 tests/chart/boxwhisker/test.typ create mode 100644 tests/chart/piechart/ref/1.png create mode 100644 tests/chart/piechart/test.typ create mode 100644 tests/chart/ref/1.png create mode 100644 tests/chart/test.typ create mode 100644 tests/helper.typ create mode 100644 tests/plot/annotation/ref.png create mode 100644 tests/plot/annotation/ref/1.png create mode 100644 tests/plot/annotation/test.typ create mode 100644 tests/plot/bar/ref/1.png create mode 100644 tests/plot/bar/test.typ create mode 100644 tests/plot/boxwhisker/ref/1.png create mode 100644 tests/plot/boxwhisker/test.typ create mode 100644 tests/plot/broken-axes/ref/1.png create mode 100644 tests/plot/broken-axes/test.typ create mode 100644 tests/plot/contour/ref/1.png create mode 100644 tests/plot/contour/test.typ create mode 100644 tests/plot/equal-axis/ref/1.png create mode 100644 tests/plot/equal-axis/test.typ create mode 100644 tests/plot/grid/ref/1.png create mode 100644 tests/plot/grid/test.typ create mode 100644 tests/plot/hvline/ref/1.png create mode 100644 tests/plot/hvline/test.typ create mode 100644 tests/plot/legend/ref/1.png create mode 100644 tests/plot/legend/test.typ create mode 100644 tests/plot/line/between/ref/1.png create mode 100644 tests/plot/line/between/test.typ create mode 100644 tests/plot/line/fill/ref/1.png create mode 100644 tests/plot/line/fill/test.typ create mode 100644 tests/plot/line/line-type/ref/1.png create mode 100644 tests/plot/line/line-type/test.typ create mode 100644 tests/plot/line/linearization/ref.png create mode 100644 tests/plot/line/linearization/ref/1.png create mode 100644 tests/plot/line/linearization/test.typ create mode 100644 tests/plot/line/mark/ref/1.png create mode 100644 tests/plot/line/mark/test.typ create mode 100644 tests/plot/line/spline/ref.png create mode 100644 tests/plot/line/spline/ref/1.png create mode 100644 tests/plot/line/spline/test.typ create mode 100644 tests/plot/mirror-axes/ref/1.png create mode 100644 tests/plot/mirror-axes/test.typ create mode 100644 tests/plot/parametric/ref/1.png create mode 100644 tests/plot/parametric/test.typ create mode 100644 tests/plot/ref.png create mode 100644 tests/plot/ref/1.png create mode 100644 tests/plot/reverse-axis/ref.png create mode 100644 tests/plot/reverse-axis/ref/1.png create mode 100644 tests/plot/reverse-axis/test.typ create mode 100644 tests/plot/sample/sample.typ create mode 100644 tests/plot/test.typ create mode 100644 tests/plot/vertical/ref/1.png create mode 100644 tests/plot/vertical/test.typ create mode 100644 typst.toml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..78716e9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 + +[Makefile] +indent_style = tab \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..53fa049 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,44 @@ +name: Tests +on: + push: + branches: + - main + - master + pull_request: + branches: + - '**' + +jobs: + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: imagemagick cargo parallel + version: 1.0 + - name: Install typos-cli from crates.io + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: typos-cli + - name: Install just from crates.io + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: just + - name: Install typst-test from github + uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: typst-test + git: https://github.com/tingerrr/typst-test.git + tag: ci-semi-stable + - uses: typst-community/setup-typst@v3 + with: + typst-version: '0.11.1' + cache-dependency-path: src/cetz.typ + - run: | + just install @local + just install @preview + just manual + just test diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..132bc28 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 2024 Johannes Wolf + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3572d0e --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# CeTZ-Plot + +CeTZ-Plot is a library that adds a plots and charts to [CeTZ](https://github.com/cetz-package/cetz). + +## Examples + + + + + + + + + + + +
+ + + + + + + + + + + +
PlotPie ChartClustered Barchart
+ +*Click on the example image to jump to the code.* + + +## Usage + +For information, see the [manual (stable)](https://github.com/cetz-package/cetz/blob/stable/manual.pdf?raw=true). + +To use this package, simply add the following code to your document: +``` +#import "@preview/cetz:0.2.2" +#import "@preview/cetz-plot:0.1.0": plot, chart + +#cetz.canvas({ + // Your plot/chart code goes here +}) +``` + +## Installing + +To install the CeTZ-Plot package under [your local typst package dir](https://github.com/typst/packages?tab=readme-ov-file#local-packages) you can use the `install` script from the repository. + +### Just + +This project uses [just](https://github.com/casey/just), a handy command runner. + +You can run all commands without having `just` installed, just have a look into the `justfile`. +To install `just` on your system, use your systems package manager. On Windows, [Cargo](https://doc.rust-lang.org/cargo/) (`cargo install just`), [Chocolatey](https://chocolatey.org/) (`choco install just`) and [some other sources](https://just.systems/man/en/chapter_4.html) can be used. You need to run it from a `sh` compatible shell on Windows (e.g git-bash). + +## Testing + +This package comes with some unit tests under the `tests` directory. +To run all tests you can run the `just test` target. You need to have +[`typst-test`](https://github.com/tingerrr/typst-test/) in your `PATH`: `cargo install typst-test --git https://github.com/tingerrr/typst-test`. diff --git a/gallery/.gitkeep b/gallery/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/gallery/barchart.png b/gallery/barchart.png new file mode 100644 index 0000000000000000000000000000000000000000..f02dd78a1314985fcaba8072f04c2490d6d7e98f GIT binary patch literal 90399 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 literal 0 HcmV?d00001 diff --git a/gallery/barchart.typ b/gallery/barchart.typ new file mode 100644 index 0000000..d40542c --- /dev/null +++ b/gallery/barchart.typ @@ -0,0 +1,26 @@ +#import "@preview/cetz:0.2.2": canvas, draw +#import "@preview/cetz-plot:0.1.0": chart + +#set page(width: auto, height: auto, margin: .5cm) + +#let data2 = ( + ([15-24], 18.0, 20.1, 23.0, 17.0), + ([25-29], 16.3, 17.6, 19.4, 15.3), + ([30-34], 14.0, 15.3, 13.9, 18.7), + ([35-44], 35.5, 26.5, 29.4, 25.8), + ([45-54], 25.0, 20.6, 22.4, 22.0), + ([55+], 19.9, 18.2, 19.2, 16.4), +) + +#canvas({ + draw.set-style(legend: (fill: white)) + chart.barchart(mode: "clustered", + size: (9, auto), + label-key: 0, + value-key: (..range(1, 5)), + bar-width: .8, + x-tick-step: 2.5, + data2, + labels: ([Low], [Medium], [High], [Very high]), + legend: "legend.inner-north-east",) +}) diff --git a/gallery/line.pdf b/gallery/line.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c2db485b987784d28c1549727719aa5fdfaa4275 GIT binary patch literal 125399 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

(~J3D7PGz=5C>jB%FF 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 literal 0 HcmV?d00001 diff --git a/gallery/line.typ b/gallery/line.typ new file mode 100644 index 0000000..702e127 --- /dev/null +++ b/gallery/line.typ @@ -0,0 +1,26 @@ +#import "@preview/cetz:0.2.2": canvas +#import "@preview/cetz-plot:0.1.0": plot + +#set page(width: auto, height: auto, margin: .5cm) + +#let style = (stroke: black, fill: rgb(0, 0, 200, 75)) + +#canvas(length: 1cm, { + plot.plot(size: (8, 6), + x-tick-step: none, + x-ticks: ((-calc.pi, $-pi$), (0, $0$), (calc.pi, $pi$)), + y-tick-step: 1, + { + plot.add( + style: style, + domain: (-calc.pi, calc.pi), calc.sin) + plot.add( + hypograph: true, + style: style, + domain: (-calc.pi, calc.pi), calc.cos) + plot.add( + hypograph: true, + style: style, + domain: (-calc.pi, calc.pi), x => calc.cos(x + calc.pi)) + }) +}) diff --git a/gallery/piechart.pdf b/gallery/piechart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cd17ee2a47fca0fd5e568bced82561da4ad5a710 GIT binary patch literal 14147 zcmb7r1zeL|8@FH}2pFiOFhELVVgPd6!@TE5ekmmz=wiD2*eM>hKK>+KK27_b-2bHt0AzIM|~xfR7+zWB{W9X`&rOPn~QW2skH@$bmlq zU(Vn_2m*|(i&IpVQ%5@d4iHh%0A$Dy2n+G^13?f42@42=MWCW0LLev{1QP%W3JZco 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 [#text(white, str(value))], radius: 110%), + outer-label: (content: "%", radius: 110%)) +}) diff --git a/justfile b/justfile new file mode 100644 index 0000000..dc85f31 --- /dev/null +++ b/justfile @@ -0,0 +1,22 @@ +# Local Variables: +# mode: makefile +# End: +gallery_dir := "./gallery" + +package target *options: + ./scripts/package "{{target}}" {{options}} + +install target="@local": + ./scripts/package "{{target}}" + +test *filter: + typst-test run {{filter}} + +update-test *filter: + typst-test update {{filter}} + +manual: + typst c manual.typ manual.pdf + +gallery: + for f in "{{gallery_dir}}"/*.typ; do typst c "$f" "${f/typ/png}"; done diff --git a/manual.typ b/manual.typ new file mode 100644 index 0000000..1333ed7 --- /dev/null +++ b/manual.typ @@ -0,0 +1 @@ +TODO diff --git a/scripts/package b/scripts/package new file mode 100755 index 0000000..a30f932 --- /dev/null +++ b/scripts/package @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +set -eu + +PKG_PREFIX="cetz-plot" + +# List of all files that get packaged +files=( + src/ + gallery/ + typst.toml + LICENSE + README.md + manual.typ + manual.pdf +) + +# Local package directories per platform +if [[ "$OSTYPE" == "linux"* ]]; then + DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}" +elif [[ "$OSTYPE" == "darwin"* ]]; then + DATA_DIR="$HOME/Library/Application Support" +else + DATA_DIR="${APPDATA}" +fi + +if (( $# < 1 )) || [[ "${1:-}" == "help" ]]; then + echo "package TARGET [--relative-paths]" + echo "" + echo "Packages all relevant files into a directory named '${PKG_PREFIX}/'" + echo "at TARGET. If TARGET is set to @local, the local Typst package directory" + echo "will be used so that the package gets installed for local use, if @preview" + echo "is used, Typsts preview cache dir will be used." + echo "The version is read from 'typst.toml' in the project root." + echo "" + echo "Local package prefix: $DATA_DIR/typst/package/local" + exit 1 +fi + +function read-toml() { + local file="$1" + local key="$2" + # Read a key value pair in the format: = "" + # stripping surrounding quotes. + perl -lne "print \"\$1\" if /^${key}\\s*=\\s*\"(.*)\"/" < "$file" +} + +SOURCE="$(cd "$(dirname "$0")"; pwd -P)/.." # macOS has no realpath +TARGET="${1:?Missing target path or @local}"; shift +VERSION="$(read-toml "$SOURCE/typst.toml" "version")" + +OPT_RELATIVE_PATHS=false +while [[ $# -gt 0 ]]; do + case "$1" in + --relative-paths) + OPT_RELATIVE_PATHS=true + shift + ;; + *) + echo "Unexpected option $1!" + exit 1 + ;; + esac +done + +if [[ "$TARGET" == "@local" ]] || [[ "$TARGET" == "install" ]]; then + TARGET="${DATA_DIR}/typst/packages/local/" +elif [[ "$TARGET" == "@preview" ]]; then + TARGET="${DATA_DIR}/typst/packages/preview/" +fi +echo "Install dir: $TARGET" + +TMP="$(mktemp -d)" + +for f in "${files[@]}"; do + mkdir -p "$TMP/$(dirname "$f")" 2>/dev/null + cp -r "$SOURCE/$f" "$TMP/$f" +done + +TARGET="${TARGET:?}/${PKG_PREFIX:?}/${VERSION:?}" +echo "Packaged to: $TARGET" +if rm -rf "${TARGET:?}" 2>/dev/null; then + echo "Overwriting existing version." +fi + +if $OPT_RELATIVE_PATHS; then + echo "Changing imports to relative." + "$SOURCE/scripts/relpaths" "$TMP" +fi + +mkdir -p "$TARGET" +mv "$TMP"/* "$TARGET" diff --git a/scripts/relpaths b/scripts/relpaths new file mode 100755 index 0000000..ef9677a --- /dev/null +++ b/scripts/relpaths @@ -0,0 +1,20 @@ +#!/bin/env python +import glob, os, sys, re + +import_regexp = re.compile(f'#(import|include)\\s*"(/.+)"') + +def replace_imports(filename): + s = None + with open(filename, "r") as file: + s = file.read() + def abs_to_rel(captures): + g = captures.groups() + p = os.path.relpath("." + g[1], os.path.dirname(filename)) + return f'#{g[0]} "{p}"' + s = re.sub(import_regexp, abs_to_rel, s) + with open(filename, "w") as file: + file.write(s) + +os.chdir(sys.argv[1]) +for file in glob.iglob("./**/*.typ", recursive=True): + replace_imports(file) diff --git a/src/axes.typ b/src/axes.typ new file mode 100644 index 0000000..34ce66b --- /dev/null +++ b/src/axes.typ @@ -0,0 +1,825 @@ +#import "/src/cetz.typ": util, draw, vector, styles, process, drawable, path-util + +#let typst-content = content + +/// Default axis style +/// +/// #show-parameter-block("tick-limit", "int", default: 100, [Upper major tick limit.]) +/// #show-parameter-block("minor-tick-limit", "int", default: 1000, [Upper minor tick limit.]) +/// #show-parameter-block("auto-tick-factors", "array", [List of tick factors used for automatic tick step determination.]) +/// #show-parameter-block("auto-tick-count", "int", [Number of ticks to generate by default.]) +/// #show-parameter-block("stroke", "stroke", [Axis stroke style.]) +/// #show-parameter-block("label.offset", "number", [Distance to move axis labels away from the axis.]) +/// #show-parameter-block("label.anchor", "anchor", [Anchor of the axis label to use for it's placement.]) +/// #show-parameter-block("label.angle", "angle", [Angle of the axis label.]) +/// #show-parameter-block("axis-layer", "float", [Layer to draw axes on (see @@on-layer() )]) +/// #show-parameter-block("grid-layer", "float", [Layer to draw the grid on (see @@on-layer() )]) +/// #show-parameter-block("background-layer", "float", [Layer to draw the background on (see @@on-layer() )]) +/// #show-parameter-block("padding", "number", [Extra distance between axes and plotting area. For schoolbook axes, this is the length of how much axes grow out of the plotting area.]) +/// #show-parameter-block("overshoot", "number", [School-book style axes only: Extra length to add to the end (right, top) of axes.]) +/// #show-parameter-block("tick.stroke", "stroke", [Major tick stroke style.]) +/// #show-parameter-block("tick.minor-stroke", "stroke", [Minor tick stroke style.]) +/// #show-parameter-block("tick.offset", ("number", "ratio"), [Major tick offset along the tick's direction, can be relative to the length.]) +/// #show-parameter-block("tick.minor-offset", ("number", "ratio"), [Minor tick offset along the tick's direction, can be relative to the length.]) +/// #show-parameter-block("tick.length", ("number"), [Major tick length.]) +/// #show-parameter-block("tick.minor-length", ("number", "ratio"), [Minor tick length, can be relative to the major tick length.]) +/// #show-parameter-block("tick.label.offset", ("number"), [Major tick label offset away from the tick.]) +/// #show-parameter-block("tick.label.angle", ("angle"), [Major tick label angle.]) +/// #show-parameter-block("tick.label.anchor", ("anchor"), [Anchor of major tick labels used for positioning.]) +/// #show-parameter-block("tick.label.show", ("auto", "bool"), default: auto, [Set visibility of tick labels. A value of `auto` shows tick labels for all but mirrored axes.]) +/// #show-parameter-block("grid.stroke", "stroke", [Major grid line stroke style.]) +/// #show-parameter-block("break-point.width", "number", [Axis break width along the axis.]) +/// #show-parameter-block("break-point.length", "number", [Axis break length.]) +/// #show-parameter-block("minor-grid.stroke", "stroke", [Minor grid line stroke style.]) +/// #show-parameter-block("shared-zero", ("bool", "content"), default: "$0$", [School-book style axes only: Content to display at the plots origin (0,0). If set to `false`, nothing is shown. Having this set, suppresses auto-generated ticks for $0$!]) +#let default-style = ( + tick-limit: 100, + minor-tick-limit: 1000, + auto-tick-factors: (1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10), // Tick factor to try + auto-tick-count: 11, // Number of ticks the plot tries to place + fill: none, + stroke: auto, + label: ( + offset: .2cm, // Axis label offset + anchor: auto, // Axis label anchor + angle: auto, // Axis label angle + ), + axis-layer: 0, + grid-layer: 0, + background-layer: 0, + padding: 0, + tick: ( + fill: none, + stroke: black + 1pt, + minor-stroke: black + .5pt, + offset: 0, + minor-offset: 0, + length: .1cm, // Tick length: Number + minor-length: 70%, // Minor tick length: Number, Ratio + label: ( + offset: .15cm, // Tick label offset + angle: 0deg, // Tick label angle + anchor: auto, // Tick label anchor + "show": auto, // Show tick labels for axes in use + ) + ), + break-point: ( + width: .75cm, + length: .15cm, + ), + grid: ( + stroke: (paint: gray.lighten(50%), thickness: 1pt), + ), + minor-grid: ( + stroke: (paint: gray.lighten(50%), thickness: .5pt), + ), +) + +// Default Scientific Style +#let default-style-scientific = util.merge-dictionary(default-style, ( + left: (tick: (label: (anchor: "east"))), + bottom: (tick: (label: (anchor: "north"))), + right: (tick: (label: (anchor: "west"))), + top: (tick: (label: (anchor: "south"))), + stroke: (cap: "square"), + padding: 0, +)) + +#let default-style-schoolbook = util.merge-dictionary(default-style, ( + x: (stroke: auto, fill: none, mark: (start: none, end: "straight"), + tick: (label: (anchor: "north"))), + y: (stroke: auto, fill: none, mark: (start: none, end: "straight"), + tick: (label: (anchor: "east"))), + label: (offset: .1cm), + origin: (label: (offset: .05cm)), + padding: .1cm, // Axis padding on both sides outsides the plotting area + overshoot: .5cm, // Axis end "overshoot" out of the plotting area + tick: ( + offset: -50%, + minor-offset: -50%, + length: .2cm, + minor-length: 70%, + ), + shared-zero: $0$, // Show zero tick label at (0, 0) +)) + +#let _prepare-style(ctx, style) = { + if type(style) != dictionary { return style } + + let res = util.resolve-number.with(ctx) + let rel-to(v, to) = { + if type(v) == ratio { + return v * to / 100% + } else { + return res(v) + } + } + + style.tick.length = res(style.tick.length) + style.tick.offset = rel-to(style.tick.offset, style.tick.length) + style.tick.minor-length = rel-to(style.tick.minor-length, style.tick.length) + style.tick.minor-offset = rel-to(style.tick.minor-offset, style.tick.minor-length) + style.tick.label.offset = res(style.tick.label.offset) + + // Break points + style.break-point.width = res(style.break-point.width) + style.break-point.length = res(style.break-point.length) + + // Padding + style.padding = res(style.padding) + + if "overshoot" in style { + style.overshoot = res(style.overshoot) + } + + return style +} + +#let _get-axis-style(ctx, style, name) = { + if not name in style { + return style + } + + style = styles.resolve(style, merge: style.at(name)) + return _prepare-style(ctx, style) +} + +#let _get-grid-type(axis) = { + let grid = axis.ticks.at("grid", default: false) + if grid == "major" or grid == true { return 1 } + if grid == "minor" { return 2 } + if grid == "both" { return 3 } + return 0 +} + +#let _inset-axis-points(ctx, style, axis, start, end) = { + if axis == none { return (start, end) } + + let (low, high) = axis.inset.map(v => util.resolve-number(ctx, v)) + + let is-horizontal = start.at(1) == end.at(1) + if is-horizontal { + start = vector.add(start, (low, 0)) + end = vector.sub(end, (high, 0)) + } else { + start = vector.add(start, (0, low)) + end = vector.sub(end, (0, high)) + } + return (start, end) +} + +#let _draw-axis-line(start, end, axis, is-horizontal, style) = { + let enabled = if axis != none and axis.show-break { + axis.min > 0 or axis.max < 0 + } else { false } + + if enabled { + let size = if is-horizontal { + (style.break-point.width, 0) + } else { + (0, style.break-point.width, 0) + } + + let up = if is-horizontal { + (0, style.break-point.length) + } else { + (style.break-point.length, 0) + } + + let add-break(is-end) = { + let a = () + let b = (rel: vector.scale(size, .3), update: false) + let c = (rel: vector.add(vector.scale(size, .4), vector.scale(up, -1)), update: false) + let d = (rel: vector.add(vector.scale(size, .6), vector.scale(up, +1)), update: false) + let e = (rel: vector.scale(size, .7), update: false) + let f = (rel: size) + + let mark = if is-end { + style.at("mark", default: none) + } + draw.line(a, b, c, d, e, f, stroke: style.stroke, mark: mark) + } + + draw.merge-path({ + draw.move-to(start) + if axis.min > 0 { + add-break(false) + draw.line((rel: size, to: start), end, mark: style.at("mark", default: none)) + } else if axis.max < 0 { + draw.line(start, (rel: vector.scale(size, -1), to: end)) + add-break(true) + } + }, stroke: style.stroke) + } else { + draw.line(start, end, stroke: style.stroke, mark: style.at("mark", default: none)) + } +} + +// Construct Axis Object +// +// - min (number): Minimum value +// - max (number): Maximum value +// - ticks (dictionary): Tick settings: +// - step (number): Major tic step +// - minor-step (number): Minor tic step +// - unit (content): Tick label suffix +// - decimals (int): Tick float decimal length +// - label (content): Axis label +#let axis(min: -1, max: 1, label: none, + ticks: (step: auto, minor-step: none, + unit: none, decimals: 2, grid: false, + format: "float")) = ( + min: min, max: max, ticks: ticks, label: label, inset: (0, 0), show-break: false, +) + +// Format a tick value +#let format-tick-value(value, tic-options) = { + // Without it we get negative zero in conversion + // to content! Typst has negative zero floats. + if value == 0 { value = 0 } + + let round(value, digits) = { + calc.round(value, digits: digits) + } + + let format-float(value, digits) = { + $#round(value, digits)$ + } + + let format-sci(value, digits) = { + let exponent = if value != 0 { + calc.floor(calc.log(calc.abs(value), base: 10)) + } else { + 0 + } + + let ee = calc.pow(10, calc.abs(exponent + 1)) + if exponent > 0 { + value = value / ee * 10 + } else if exponent < 0 { + value = value * ee * 10 + } + + value = round(value, digits) + if exponent <= -1 or exponent >= 1 { + return $#value times 10^#exponent$ + } + return $#value$ + } + + if type(value) != typst-content { + let format = tic-options.at("format", default: "float") + if format == none { + value = [] + } else if type(format) == typst-content { + value = format + } else if type(format) == function { + value = (format)(value) + } else if format == "sci" { + value = format-sci(value, tic-options.at("decimals", default: 2)) + } else { + value = format-float(value, tic-options.at("decimals", default: 2)) + } + } else if type(value) != typst-content { + value = str(value) + } + + if tic-options.at("unit", default: none) != none { + value += tic-options.unit + } + return value +} + +// Get value on axis [0, 1] +// +// - axis (axis): Axis +// - v (number): Value +// -> float +#let value-on-axis(axis, v) = { + if v == none { return } + let (min, max) = (axis.min, axis.max) + let dt = max - min; if dt == 0 { dt = 1 } + + return (v - min) / dt +} + +// Compute list of linear ticks for axis +// +// - axis (axis): Axis +#let compute-linear-ticks(axis, style, add-zero: true) = { + let (min, max) = (axis.min, axis.max) + let dt = max - min; if (dt == 0) { dt = 1 } + let ticks = axis.ticks + let ferr = util.float-epsilon + let tick-limit = style.tick-limit + let minor-tick-limit = style.minor-tick-limit + + let l = () + if ticks != none { + let major-tick-values = () + if "step" in ticks and ticks.step != none { + assert(ticks.step >= 0, + message: "Axis tick step must be positive and non 0.") + if axis.min > axis.max { ticks.step *= -1 } + + let s = 1 / ticks.step + + let num-ticks = int(max * s + 1.5) - int(min * s) + assert(num-ticks <= tick-limit, + message: "Number of major ticks exceeds limit " + str(tick-limit)) + + let n = range(int(min * s), int(max * s + 1.5)) + for t in n { + let v = (t / s - min) / dt + if t / s == 0 and not add-zero { continue } + + if v >= 0 - ferr and v <= 1 + ferr { + l.push((v, format-tick-value(t / s, ticks), true)) + major-tick-values.push(v) + } + } + } + + if "minor-step" in ticks and ticks.minor-step != none { + assert(ticks.minor-step >= 0, + message: "Axis minor tick step must be positive") + + let s = 1 / ticks.minor-step + + let num-ticks = int(max * s + 1.5) - int(min * s) + assert(num-ticks <= minor-tick-limit, + message: "Number of minor ticks exceeds limit " + str(minor-tick-limit)) + + let n = range(int(min * s), int(max * s + 1.5)) + for t in n { + let v = (t / s - min) / dt + if v in major-tick-values { + // Prefer major ticks over minor ticks + continue + } + + if v != none and v >= 0 and v <= 1 + ferr { + l.push((v, none, false)) + } + } + } + + } + + return l +} + +// Get list of fixed axis ticks +// +// - axis (axis): Axis object +#let fixed-ticks(axis) = { + let l = () + if "list" in axis.ticks { + for t in axis.ticks.list { + let (v, label) = (none, none) + if type(t) in (float, int) { + v = t + label = format-tick-value(t, axis.ticks) + } else { + (v, label) = t + } + + v = value-on-axis(axis, v) + if v != none and v >= 0 and v <= 1 { + l.push((v, label, true)) + } + } + } + return l +} + +// Compute list of axis ticks +// +// A tick triple has the format: +// (rel-value: float, label: content, major: bool) +// +// - axis (axis): Axis object +#let compute-ticks(axis, style, add-zero: true) = { + let find-max-n-ticks(axis, n: 11) = { + let dt = calc.abs(axis.max - axis.min) + let scale = calc.floor(calc.log(dt, base: 10) - 1) + if scale > 5 or scale < -5 {return none} + + let (step, best) = (none, 0) + for s in style.auto-tick-factors { + s = s * calc.pow(10, scale) + + let divs = calc.abs(dt / s) + if divs >= best and divs <= n { + step = s + best = divs + } + } + return step + } + + if axis == none or axis.ticks == none { return () } + if axis.ticks.step == auto { + axis.ticks.step = find-max-n-ticks(axis, n: style.auto-tick-count) + } + if axis.ticks.minor-step == auto { + axis.ticks.minor-step = if axis.ticks.step != none { + axis.ticks.step / 5 + } else { + none + } + } + + let ticks = compute-linear-ticks(axis, style, add-zero: add-zero) + ticks += fixed-ticks(axis) + return ticks +} + +// Prepares the axis post creation. The given axis +// must be completely set-up, including its intervall. +// Returns the prepared axis +#let prepare-axis(ctx, axis, name) = { + let style = styles.resolve(ctx.style, root: "axes", + base: default-style-scientific) + style = _prepare-style(ctx, style) + style = _get-axis-style(ctx, style, name) + + if type(axis.inset) != array { + axis.inset = (axis.inset, axis.inset) + } + + axis.inset = axis.inset.map(v => util.resolve-number(ctx, v)) + + if axis.show-break { + if axis.min > 0 { + axis.inset.at(0) += style.break-point.width + } else if axis.max < 0 { + axis.inset.at(1) += style.break-point.width + } + } + + return axis +} + +// Draw inside viewport coordinates of two axes +// +// - size (vector): Axis canvas size (relative to origin) +// - origin (coordinates): Axis Canvas origin +// - x (axis): Horizontal axis +// - y (axis): Vertical axis +// - name (string,none): Group name +#let axis-viewport(size, x, y, origin: (0, 0), name: none, body) = { + draw.group(name: name, ctx => { + let origin = origin + let size = size + + origin.at(0) += x.inset.at(0) + size.at(0) -= x.inset.sum() + origin.at(1) += y.inset.at(0) + size.at(1) -= y.inset.sum() + + size = (rel: size, to: origin) + draw.set-viewport(origin, size, + bounds: (x.max - x.min, + y.max - y.min, + 0)) + draw.translate((-x.min, -y.min)) + body + }) +} + +// Draw grid lines for the ticks of an axis +// +// - cxt (context): +// - axis (dictionary): The axis +// - ticks (array): The computed ticks +// - low (vector): Start position of a grid-line at tick 0 +// - high (vector): End position of a grid-line at tick 0 +// - dir (vector): Normalized grid direction vector along the grid axis +// - style (style): Axis style +#let draw-grid-lines(ctx, axis, ticks, low, high, dir, style) = { + let offset = (0,0) + if axis.inset != none { + let (inset-low, inset-high) = axis.inset.map(v => util.resolve-number(ctx, v)) + offset = vector.scale(vector.norm(dir), inset-low) + dir = vector.sub(dir, vector.scale(vector.norm(dir), inset-low + inset-high)) + } + + let kind = _get-grid-type(axis) + if kind > 0 { + for (distance, label, is-major) in ticks { + let offset = vector.add(vector.scale(dir, distance), offset) + let start = vector.add(low, offset) + let end = vector.add(high, offset) + + // Draw a major line + if is-major and (kind == 1 or kind == 3) { + draw.line(start, end, stroke: style.grid.stroke) + } + // Draw a minor line + if not is-major and kind >= 2 { + draw.line(start, end, stroke: style.minor-grid.stroke) + } + } + } +} + +// Place a list of tick marks and labels along a path +#let place-ticks-on-line(ticks, start, stop, style, flip: false, is-mirror: false) = { + let dir = vector.sub(stop, start) + let norm = vector.norm((-dir.at(1), dir.at(0), dir.at(2, default: 0))) + + let def(v, d) = { + return if v == none or v == auto {d} else {v} + } + + let show-label = style.tick.label.show + if show-label == auto { + show-label = not is-mirror + } + + for (distance, label, is-major) in ticks { + let offset = style.tick.offset + let length = if is-major { style.tick.length } else { style.tick.minor-length } + if flip { + offset *= -1 + length *= -1 + } + + let pt = vector.lerp(start, stop, distance) + let a = vector.add(pt, vector.scale(norm, offset)) + let b = vector.add(a, vector.scale(norm, length)) + + draw.line(a, b, stroke: style.tick.stroke) + + if show-label and label != none { + let offset = style.tick.label.offset + if flip { + offset *= -1 + length *= -1 + } + + let c = vector.sub(if length <= 0 { b } else { a }, + vector.scale(norm, offset)) + + let angle = def(style.tick.label.angle, 0deg) + let anchor = def(style.tick.label.anchor, "center") + + draw.content(c, [#label], angle: angle, anchor: anchor) + } + } +} + +// Draw up to four axes in an "scientific" style at origin (0, 0) +// +// - size (array): Size (width, height) +// - left (axis): Left (y) axis +// - bottom (axis): Bottom (x) axis +// - right (axis): Right axis +// - top (axis): Top axis +// - name (string): Object name +// - draw-unset (bool): Draw axes that are set to `none` +// - ..style (any): Style +#let scientific(size: (1, 1), + left: none, + right: auto, + bottom: none, + top: auto, + draw-unset: true, + name: none, + ..style) = { + import draw: * + + if right == auto { + if left != none { + right = left; right.is-mirror = true + } else { + right = none + } + } + if top == auto { + if bottom != none { + top = bottom; top.is-mirror = true + } else { + top = none + } + } + + group(name: name, ctx => { + let (w, h) = size + anchor("origin", (0, 0)) + + let style = style.named() + style = styles.resolve(ctx.style, merge: style, root: "axes", + base: default-style-scientific) + style = _prepare-style(ctx, style) + + // Compute ticks + let x-ticks = compute-ticks(bottom, style) + let y-ticks = compute-ticks(left, style) + let x2-ticks = compute-ticks(top, style) + let y2-ticks = compute-ticks(right, style) + + // Draw frame + if style.fill != none { + on-layer(style.background-layer, { + rect((0,0), (w,h), fill: style.fill, stroke: none) + }) + } + + // Draw grid + group(name: "grid", ctx => { + let axes = ( + ("bottom", (0,0), (0,h), (+w,0), x-ticks, bottom), + ("top", (0,h), (0,0), (+w,0), x2-ticks, top), + ("left", (0,0), (w,0), (0,+h), y-ticks, left), + ("right", (w,0), (0,0), (0,+h), y2-ticks, right), + ) + for (name, start, end, direction, ticks, axis) in axes { + if axis == none { continue } + + let style = _get-axis-style(ctx, style, name) + let is-mirror = axis.at("is-mirror", default: false) + + if not is-mirror { + on-layer(style.grid-layer, { + draw-grid-lines(ctx, axis, ticks, start, end, direction, style) + }) + } + } + }) + + // Draw axes + group(name: "axes", { + let axes = ( + ("bottom", (0, 0), (w, 0), (0, -1), false, x-ticks, bottom,), + ("top", (0, h), (w, h), (0, +1), true, x2-ticks, top,), + ("left", (0, 0), (0, h), (-1, 0), true, y-ticks, left,), + ("right", (w, 0), (w, h), (+1, 0), false, y2-ticks, right,) + ) + let label-placement = ( + bottom: ("south", "north", 0deg), + top: ("north", "south", 0deg), + left: ("west", "south", 90deg), + right: ("east", "north", 90deg), + ) + + for (name, start, end, outsides, flip, ticks, axis) in axes { + let style = _get-axis-style(ctx, style, name) + let is-mirror = axis == none or axis.at("is-mirror", default: false) + let is-horizontal = name in ("bottom", "top") + + if style.padding != 0 { + let padding = vector.scale(outsides, style.padding) + start = vector.add(start, padding) + end = vector.add(end, padding) + } + + let (data-start, data-end) = _inset-axis-points(ctx, style, axis, start, end) + + let path = _draw-axis-line(start, end, axis, is-horizontal, style) + on-layer(style.axis-layer, { + group(name: "axis", { + if draw-unset or axis != none { + path; + place-ticks-on-line(ticks, data-start, data-end, style, flip: flip, is-mirror: is-mirror) + } + }) + + if axis != none and axis.label != none and not is-mirror { + let offset = vector.scale(outsides, style.label.offset) + let (group-anchor, content-anchor, angle) = label-placement.at(name) + + if style.label.anchor != auto { + content-anchor = style.label.anchor + } + if style.label.angle != auto { + angle = style.label.angle + } + + content((rel: offset, to: "axis." + group-anchor), + [#axis.label], + angle: angle, + anchor: content-anchor) + } + }) + } + }) + }) +} + +// Draw two axes in a "school book" style +// +// - x-axis (axis): X axis +// - y-axis (axis): Y axis +// - size (array): Size (width, height) +// - x-position (number): X Axis position +// - y-position (number): Y Axis position +// - name (string): Object name +// - ..style (any): Style +#let school-book(x-axis, y-axis, + size: (1, 1), + x-position: 0, + y-position: 0, + name: none, + ..style) = { + import draw: * + + group(name: name, ctx => { + let (w, h) = size + anchor("origin", (0, 0)) + + let style = style.named() + style = styles.resolve( + ctx.style, + merge: style, + root: "axes", + base: default-style-schoolbook) + style = _prepare-style(ctx, style) + + let x-position = calc.min(calc.max(y-axis.min, x-position), y-axis.max) + let y-position = calc.min(calc.max(x-axis.min, y-position), x-axis.max) + let x-y = value-on-axis(y-axis, x-position) * h + let y-x = value-on-axis(x-axis, y-position) * w + + let shared-zero = style.shared-zero != false and x-position == 0 and y-position == 0 + + let x-ticks = compute-ticks(x-axis, style, add-zero: not shared-zero) + let y-ticks = compute-ticks(y-axis, style, add-zero: not shared-zero) + + // Draw grid + group(name: "grid", ctx => { + let axes = ( + ("x", (0,0), (0,h), (+w,0), x-ticks, x-axis), + ("y", (0,0), (w,0), (0,+h), y-ticks, y-axis), + ) + + for (name, start, end, direction, ticks, axis) in axes { + if axis == none { continue } + + let style = _get-axis-style(ctx, style, name) + on-layer(style.grid-layer, { + draw-grid-lines(ctx, axis, ticks, start, end, direction, style) + }) + } + }) + + // Draw axes + group(name: "axes", { + let axes = ( + ("x", (0, x-y), (w, x-y), (1, 0), false, x-ticks, x-axis), + ("y", (y-x, 0), (y-x, h), (0, 1), true, y-ticks, y-axis), + ) + let label-pos = ( + x: ("north", (0,-1)), + y: ("east", (-1,0)), + ) + + on-layer(style.axis-layer, { + for (name, start, end, dir, flip, ticks, axis) in axes { + let style = _get-axis-style(ctx, style, name) + + let pad = style.padding + let overshoot = style.overshoot + let vstart = vector.sub(start, vector.scale(dir, pad)) + let vend = vector.add(end, vector.scale(dir, pad + overshoot)) + let is-horizontal = name == "x" + + let (data-start, data-end) = _inset-axis-points(ctx, style, axis, start, end) + group(name: "axis", { + _draw-axis-line(vstart, vend, axis, is-horizontal, style) + place-ticks-on-line(ticks, data-start, data-end, style, flip: flip) + }) + + if axis.label != none { + let (content-anchor, offset-dir) = label-pos.at(name) + + let angle = if style.label.angle not in (none, auto) { + style.label.angle + } else { 0deg } + if style.label.anchor not in (none, auto) { + content-anchor = style.label.anchor + } + + let offset = vector.scale(offset-dir, style.label.offset) + content((rel: offset, to: vend), + [#axis.label], + angle: angle, + anchor: content-anchor) + } + } + + if shared-zero { + let pt = (rel: (-style.tick.label.offset, -style.tick.label.offset), + to: (y-x, x-y)) + let zero = if type(style.shared-zero) == typst-content { + style.shared-zero + } else { + $0$ + } + content(pt, zero, anchor: "north-east") + } + }) + }) + }) +} diff --git a/src/cetz.typ b/src/cetz.typ new file mode 100644 index 0000000..0b00a19 --- /dev/null +++ b/src/cetz.typ @@ -0,0 +1,2 @@ +// Import cetz into the root scope. Import cetz by importing this file only! +#import "@preview/cetz:0.2.2": * diff --git a/src/chart.typ b/src/chart.typ new file mode 100644 index 0000000..251cf65 --- /dev/null +++ b/src/chart.typ @@ -0,0 +1,4 @@ +#import "chart/boxwhisker.typ": boxwhisker, boxwhisker-default-style +#import "chart/barchart.typ": barchart, barchart-default-style +#import "chart/columnchart.typ": columnchart, columnchart-default-style +#import "chart/piechart.typ": piechart, piechart-default-style diff --git a/src/chart/barchart.typ b/src/chart/barchart.typ new file mode 100644 index 0000000..cbb42b7 --- /dev/null +++ b/src/chart/barchart.typ @@ -0,0 +1,141 @@ +#import "/src/cetz.typ": draw, styles, palette + +#import "/src/plot.typ" + +#let barchart-default-style = ( + axes: (tick: (length: 0), grid: (stroke: (dash: "dotted"))), + bar-width: .8, + cluster-gap: 0, + error: ( + whisker-size: .25, + ), + y-inset: 1, +) + +/// Draw a bar chart. A bar chart is a chart that represents data with +/// rectangular bars that grow from left to right, proportional to the values +/// they represent. For examples see @barchart-examples. +/// +/// = Styling +/// *Root*: `barchart`. +/// #show-parameter-block("bar-width", "float", default: .8, [ +/// Width of a single bar (basic) or a cluster of bars (clustered) in the plot.]) +/// #show-parameter-block("y-inset", "float", default: 1, [ +/// Distance of the plot data to the plot's edges on the y-axis of the plot.]) +/// You can use any `plot` or `axes` related style keys, too. +/// +/// The `barchart` function is a wrapper of the `plot` API. Arguments passed +/// to `..plot-args` are passed to the `plot.plot` function. +/// +/// - data (array): Array of data rows. A row can be of type array or +/// dictionary, with `label-key` and `value-key` being +/// the keys to access a rows label and value(s). +/// +/// *Example* +/// ```typc +/// (([A], 1), ([B], 2), ([C], 3),) +/// ``` +/// - label-key (int,string): Key to access the label of a data row. +/// This key is used as argument to the +/// rows `.at(..)` function. +/// - value-key (int,string): Key(s) to access values of a data row. +/// These keys are used as argument to the +/// rows `.at(..)` function. +/// - error-key (none,int,string): Key(s) to access error values of a data row. +/// These keys are used as argument to the +/// rows `.at(..)` function. +/// - mode (string): Chart mode: +/// / basic: Single bar per data row +/// / clustered: Group of bars per data row +/// / stacked: Stacked bars per data row +/// / stacked100: Stacked bars per data row relative +/// to the sum of the row +/// - size (array): Chart size as width and height tuple in canvas unist; +/// width can be set to `auto`. +/// - bar-style (style,function): Style or function (idx => style) to use for +/// each bar, accepts a palette function. +/// - x-unit (content,auto): Tick suffix added to each tick label +/// - y-label (content,none): Y axis label +/// - x-label (content,none): x axis label +/// - labels (none,content): Legend labels per x value group +/// - ..plot-args (any): Arguments to pass to `plot.plot` +#let barchart(data, + label-key: 0, + value-key: 1, + error-key: none, + mode: "basic", + size: (auto, 1), + bar-style: palette.red, + x-label: none, + x-unit: auto, + y-label: none, + labels: none, + ..plot-args + ) = { + assert(type(label-key) in (int, str)) + if mode == "basic" { + assert(type(value-key) in (int, str)) + } else { + assert(type(value-key) == array) + } + + if type(value-key) != array { + value-key = (value-key,) + } + + if error-key == none { + error-key = () + } else if type(error-key) != array { + error-key = (error-key,) + } + + if type(size) != array { + size = (size, auto) + } + if size.at(1) == auto { + size.at(1) = (data.len() + 1) + } + + let y-tic-list = data.enumerate().map(((i, t)) => { + (data.len() - i - 1, t.at(label-key)) + }) + + let x-unit = x-unit + if x-unit == auto { + x-unit = if mode == "stacked100" {[%]} else [] + } + + data = data.enumerate().map(((i, d)) => { + (data.len() - i - 1, value-key.map(k => d.at(k, default: 0)).flatten(), error-key.map(k => d.at(k, default: 0)).flatten()) + }) + + draw.group(ctx => { + let style = styles.resolve(ctx.style, merge: (:), + root: "barchart", base: barchart-default-style) + draw.set-style(..style) + + let y-inset = calc.max(style.y-inset, style.bar-width / 2) + plot.plot(size: size, + axis-style: "scientific-auto", + x-label: x-label, + x-grid: true, + y-label: y-label, + y-min: -y-inset, + y-max: data.len() + y-inset - 1, + y-tick-step: none, + y-ticks: y-tic-list, + plot-style: bar-style, + ..plot-args, + { + plot.add-bar(data, + x-key: 0, + y-key: 1, + error-key: if mode in ("basic", "clustered") { 2 }, + mode: mode, + labels: labels, + bar-width: -style.bar-width, + cluster-gap: style.cluster-gap, + axes: ("y", "x")) + }) + }) +} diff --git a/src/chart/barcol-common.typ b/src/chart/barcol-common.typ new file mode 100644 index 0000000..0c09a52 --- /dev/null +++ b/src/chart/barcol-common.typ @@ -0,0 +1,40 @@ +// Valid bar- and columnchart modes +#let barchart-modes = ( + "basic", "clustered", "stacked", "stacked100" +) + +// Functions for max value calculation +#let barchart-max-value-fn = ( + basic: (data, value-key) => { + calc.max(0, ..data.map(t => t.at(value-key))) + }, + clustered: (data, value-key) => { + calc.max(0, ..data.map(t => calc.max( + ..value-key.map(k => t.at(k))))) + }, + stacked: (data, value-key) => { + calc.max(0, ..data.map(t => + value-key.map(k => t.at(k)).sum())) + }, + stacked100: (..) => { + 100 + } +) + +// Functions for min value calculation +#let barchart-min-value-fn = ( + basic: (data, value-key) => { + calc.min(0, ..data.map(t => t.at(value-key))) + }, + clustered: (data, value-key) => { + calc.min(0, ..data.map(t => calc.max( + ..value-key.map(k => t.at(k))))) + }, + stacked: (data, value-key) => { + calc.min(0, ..data.map(t => + value-key.map(k => t.at(k)).sum())) + }, + stacked100: (..) => { + 0 + } +) diff --git a/src/chart/boxwhisker.typ b/src/chart/boxwhisker.typ new file mode 100644 index 0000000..1d643cf --- /dev/null +++ b/src/chart/boxwhisker.typ @@ -0,0 +1,97 @@ +#import "/src/cetz.typ": draw, styles, palette, util, vector, intersection + +#import "/src/plot.typ" + +#let boxwhisker-default-style = ( + axes: (tick: (length: 0), grid: (stroke: (dash: "dotted"))), + box-width: 0.75, + whisker-width: 0.5, + mark-size: 0.15, +) + +/// Add one or more box or whisker plots. +/// +/// #example(``` +/// cetz.chart.boxwhisker(size: (2,2), label-key: none, +/// y-min: 0, y-max: 70, y-tick-step: 20, +/// (x: 1, min: 15, max: 60, +/// q1: 25, q2: 35, q3: 50)) +/// ```) +/// +/// = Styling +/// *Root* `boxwhisker` +/// #show-parameter-block("box-width", "float", default: .75, [ +/// The width of the box. Since boxes are placed 1 unit next to each other, +/// a width of $1$ would make neighbouring boxes touch.]) +/// #show-parameter-block("whisker-width", "float", default: .5, [ +/// The width of the whisker, that is the horizontal bar on the top and bottom +/// of the box.]) +/// #show-parameter-block("mark-size", "float", default: .15, [ +/// The scaling of the mark for the boxes outlier values in canvas units.]) +/// You can use any `plot` or `axes` related style keys, too. +/// +/// - data (array, dictionary): Dictionary or array of dictionaries containing the +/// needed entries to plot box and whisker plot. +/// +/// See `plot.add-boxwhisker` for more details. +/// +/// *Examples:* +/// - ```typc +/// (x: 1 // Location on x-axis +/// outliers: (7, 65, 69), // Optional outliers +/// min: 15, max: 60 // Minimum and maximum +/// q1: 25, // Quartiles: Lower +/// q2: 35, // Median +/// q3: 50) // Upper +/// ``` +/// - size (array) : Size of chart. If the second entry is auto, it automatically scales to accommodate the number of entries plotted +/// - label-key (integer, string): Index in the array where labels of each entry is stored +/// - mark (string): Mark to use for plotting outliers. Set `none` to disable. Defaults to "x" +/// - ..plot-args (any): Additional arguments are passed to `plot.plot` +#let boxwhisker(data, + size: (1, auto), + label-key: 0, + mark: "*", + ..plot-args + ) = { + if type(data) == dictionary { data = (data,) } + + if type(size) != array { + size = (size, auto) + } + if size.at(1) == auto { + size.at(1) = (data.len() + 1) + } + + let x-tick-list = data.enumerate().map(((i, t)) => { + (i + 1, if label-key != none { t.at(label-key, default: i) } else { [] }) + }) + + draw.group(ctx => { + let style = styles.resolve(ctx.style, merge: (:), + root: "boxwhisker", base: boxwhisker-default-style) + draw.set-style(..style) + + plot.plot( + size: size, + axis-style: "scientific-auto", + x-tick-step: none, + x-ticks: x-tick-list, + y-grid: true, + x-label: none, + y-label: none, + ..plot-args, + { + for (i, row) in data.enumerate() { + plot.add-boxwhisker( + (x: i + 1, ..row), + box-width: style.box-width, + whisker-width: style.whisker-width, + style: (:), + mark: mark, + mark-size: style.mark-size + ) + } + }) + }) +} diff --git a/src/chart/columnchart.typ b/src/chart/columnchart.typ new file mode 100644 index 0000000..d05db24 --- /dev/null +++ b/src/chart/columnchart.typ @@ -0,0 +1,141 @@ +#import "/src/cetz.typ": draw, styles, palette, util, vector, intersection + +#import "/src/plot.typ" + +#let columnchart-default-style = ( + axes: (tick: (length: 0), grid: (stroke: (dash: "dotted"))), + bar-width: .8, + cluster-gap: 0, + error: ( + whisker-size: .25, + ), + x-inset: 1, +) + +/// Draw a column chart. A column chart is a chart that represents data with +/// rectangular bars that grow from bottom to top, proportional to the values +/// they represent. For examples see @columnchart-examples. +/// +/// = Styling +/// *Root*: `columnchart`. +/// #show-parameter-block("bar-width", "float", default: .8, [ +/// Width of a single bar (basic) or a cluster of bars (clustered) in the plot.]) +/// #show-parameter-block("x-inset", "float", default: 1, [ +/// Distance of the plot data to the plot's edges on the x-axis of the plot.]) +/// You can use any `plot` or `axes` related style keys, too. +/// +/// The `columnchart` function is a wrapper of the `plot` API. Arguments passed +/// to `..plot-args` are passed to the `plot.plot` function. +/// +/// - data (array): Array of data rows. A row can be of type array or +/// dictionary, with `label-key` and `value-key` being +/// the keys to access a rows label and value(s). +/// +/// *Example* +/// ```typc +/// (([A], 1), ([B], 2), ([C], 3),) +/// ``` +/// - label-key (int,string): Key to access the label of a data row. +/// This key is used as argument to the +/// rows `.at(..)` function. +/// - value-key (int,string): Key(s) to access value(s) of data row. +/// These keys are used as argument to the +/// rows `.at(..)` function. +/// - error-key (none,int,string): Key(s) to access error values of a data row. +/// These keys are used as argument to the +/// rows `.at(..)` function. +/// - mode (string): Chart mode: +/// / basic: Single bar per data row +/// / clustered: Group of bars per data row +/// / stacked: Stacked bars per data row +/// / stacked100: Stacked bars per data row relative +/// to the sum of the row +/// - size (array): Chart size as width and height tuple in canvas unist; +/// width can be set to `auto`. +/// - bar-style (style,function): Style or function (idx => style) to use for +/// each bar, accepts a palette function. +/// - y-unit (content,auto): Tick suffix added to each tick label +/// - y-label (content,none): Y axis label +/// - x-label (content,none): x axis label +/// - labels (none,content): Legend labels per y value group +/// - ..plot-args (any): Arguments to pass to `plot.plot` +#let columnchart(data, + label-key: 0, + value-key: 1, + error-key: none, + mode: "basic", + size: (auto, 1), + bar-style: palette.red, + x-label: none, + y-unit: auto, + y-label: none, + labels: none, + ..plot-args + ) = { + assert(type(label-key) in (int, str)) + if mode == "basic" { + assert(type(value-key) in (int, str)) + } + + if type(value-key) != array { + value-key = (value-key,) + } + + if error-key == none { + error-key = () + } else if type(error-key) != array { + error-key = (error-key,) + } + + if type(size) != array { + size = (auto, size) + } + if size.at(0) == auto { + size.at(0) = (data.len() + 1) + } + + let x-tic-list = data.enumerate().map(((i, t)) => { + (i, t.at(label-key)) + }) + + let y-unit = y-unit + if y-unit == auto { + y-unit = if mode == "stacked100" {[%]} else [] + } + + data = data.enumerate().map(((i, d)) => { + (i, value-key.map(k => d.at(k)).flatten(), error-key.map(k => d.at(k, default: 0)).flatten()) + }) + + draw.group(ctx => { + let style = styles.resolve(ctx.style, merge: (:), + root: "columnchart", base: columnchart-default-style) + draw.set-style(..style) + + let x-inset = calc.max(style.x-inset, style.bar-width / 2) + plot.plot(size: size, + axis-style: "scientific-auto", + y-grid: true, + y-label: y-label, + x-min: -x-inset, + x-max: data.len() + x-inset - 1, + x-tick-step: none, + x-ticks: x-tic-list, + x-label: x-label, + plot-style: bar-style, + ..plot-args, + { + plot.add-bar(data, + x-key: 0, + y-key: 1, + error-key: if mode in ("basic", "clustered") { 2 }, + mode: mode, + labels: labels, + bar-width: style.bar-width, + cluster-gap: style.cluster-gap, + error-style: style.error, + whisker-size: style.error.whisker-size, + axes: ("x", "y")) + }) + }) +} diff --git a/src/chart/piechart.typ b/src/chart/piechart.typ new file mode 100644 index 0000000..a1c1ebc --- /dev/null +++ b/src/chart/piechart.typ @@ -0,0 +1,431 @@ +#import "/src/cetz.typ": draw, styles, palette, util, vector, intersection +#import util: circle-arclen + +// Piechart Label Kind +#let label-kind = (value: "VALUE", percentage: "%", label: "LABEL") + +// Piechart Default Style +#let default-style = ( + stroke: auto, + fill: auto, + /// Outer chart radius + radius: 1, + /// Inner slice radius + inner-radius: 0, + /// Gap between items. This can be a canvas length or an angle + gap: 0.5deg, + /// Outset offset, absolute or relative to radius + outset-offset: 10%, + /// Pie outset mode: + /// - "OFFSET": Offset slice position by outset-offset + /// - "RADIUS": Offset slice radius by outset-offset (the slice gets scaled) + outset-mode: "OFFSET", + /// Pie start angle + start: 90deg, + /// Pie stop angle + stop: 360deg + 90deg, + /// Pie rotation direction (true = clockwise, false = anti-clockwise) + clockwise: true, + outer-label: ( + /// Label kind + /// If set to a function, that function gets called with (value, label) of each item + content: label-kind.label, + /// Absolute radius or percentage of radius + radius: 125%, + /// Absolute angle or auto to use secant of the slice as direction + angle: 0deg, + /// Label anchor + anchor: "center", + ), + inner-label: ( + /// Label kind + /// If set to a function, that function gets called with (value, label) of each item + content: none, + /// Absolute radius or percentage of the mid between radius and inner-radius + radius: 150%, + /// Absolute angle or auto to use secant of the slice as direction + angle: 0deg, + /// Label anchor + anchor: "center", + ), +) +#let piechart-default-style = default-style + +/// Draw a pie- or donut-chart +/// +/// #example(``` +/// import cetz.chart +/// let data = (24, 31, 18, 21, 23, 18, 27, 17, 26, 13) +/// let colors = gradient.linear(red, blue, green, yellow) +/// +/// chart.piechart( +/// data, +/// radius: 1.5, +/// slice-style: colors, +/// inner-radius: .5, +/// outer-label: (content: "%",)) +/// ```) +/// +/// = Styling +/// *Root* `piechart` \ +/// #show-parameter-block("radius", ("number"), [ +/// Outer radius of the chart.], default: 1) +/// #show-parameter-block("inner-radius", ("number"), [ +/// Inner radius of the chart slices. If greater than zero, the chart becomes +/// a "donut-chart".], default: 0) +/// #show-parameter-block("gap", ("number", "angle"), [ +/// Gap between chart slices to leave empty. This does not increase the charts +/// radius by pushing slices outwards, but instead shrinks the slice. Big +/// values can result in slices becoming invisible if no space is left.], default: 0.5deg) +/// #show-parameter-block("outset-offset", ("number", "ratio"), [ +/// Absolute, or radius relative distance to push slices marked for +/// "outsetting" outwards from the center of the chart.], default: 10%) +/// #show-parameter-block("outset-offset", ("string"), [ +/// The mode of how to perform "outsetting" of slices: +/// - "OFFSET": Offset slice position by `outset-offset`, increasing their gap to their siblings +/// - "RADIUS": Offset slice radius by `outset-offset`, which scales the slice and leaves the gap unchanged], default: "OFFSET") +/// #show-parameter-block("start", ("angle"), [ +/// The pie-charts start angle (ccw). You can use this to draw charts not forming a full circle.], default: 90deg) +/// #show-parameter-block("stop", ("angle"), [ +/// The pie-charts stop angle (ccw).], default: 360deg + 90deg) +/// #show-parameter-block("clockwise", ("bool"), [ +/// The pie-charts rotation direction.], default: true) +/// #show-parameter-block("outer-label.content", ("none","string","function"), [ +/// Content to display outsides the charts slices. +/// There are the following predefined values: +/// / LABEL: Display the slices label (see `label-key`) +/// / %: Display the percentage of the items value in relation to the sum of +/// all values, rounded to the next integer +/// / VALUE: Display the slices value +/// If passed a `` of the format `(value, label) => content`, +/// that function gets called with each slices value and label and must return +/// content, that gets displayed.], default: "LABEL") +/// #show-parameter-block("outer-label.radius", ("number","ratio"), [ +/// Absolute, or radius relative distance from the charts center to position +/// outer labels at.], default: 125%) +/// #show-parameter-block("outer-label.angle", ("angle","auto"), [ +/// The angle of the outer label. If passed `auto`, the label gets rotated, +/// so that the baseline is parallel to the slices secant. ], default: 0deg) +/// #show-parameter-block("outer-label.anchor", ("string"), [ +/// The anchor of the outer label to use for positioning.], default: "center") +/// #show-parameter-block("inner-label.content", ("none","string","function"), [ +/// Content to display insides the charts slices. +/// See `outer-label.content` for the possible values.], default: none) +/// #show-parameter-block("inner-label.radius", ("number","ratio"), [ +/// Distance of the inner label to the charts center. If passed a ``, +/// that ratio is relative to the mid between the inner and outer radius (`inner-radius` and `radius`) +/// of the chart], default: 150%) +/// #show-parameter-block("inner-label.angle", ("angle","auto"), [ +/// See `outer-label.angle`.], default: 0deg) +/// #show-parameter-block("inner-label.anchor", ("string"), [ +/// See `outer-label.anchor`.], default: "center") +/// +/// = Anchors +/// The chart places one anchor per item at the radius of it's slice that +/// gets named `"item-"` (outer radius) and `"item--inner"` (inner radius), +/// where index is the index of the sclice data in `data`. +/// +/// - data (array): Array of data items. A data item can be: +/// - A number: A number that is used as the fraction of the slice +/// - An array: An array which is read depending on value-key, label-key and outset-key +/// - A dictionary: A dictionary which is read depending on value-key, label-key and outset-key +/// - value-key (none,int,string): Key of the "value" of a data item. If for example +/// data items are passed as dictionaries, the value-key is the key of the dictionary to +/// access the items chart value. +/// - label-key (none,int,string): Same as the value-key but for getting an items label content. +/// - outset-key (none,int,string): Same as the value-key but for getting if an item should get outset (highlighted). The +/// outset can be a bool, float or ratio. If of type `bool`, the outset distance from the +/// style gets used. +/// - outset (none,int,array): A single or multiple indices of items that should get offset from the center to the outsides +/// of the chart. Only used if outset-key is none! +/// - slice-style (function,array,gradient): Slice style of the following types: +/// - function: A function of the form `index => style` that must return a style dictionary. +/// This can be a `palette` function. +/// - array: An array of style dictionaries or fill colors of at least one item. For each slice the style at the slices +/// index modulo the arrays length gets used. +/// - gradient: A gradient that gets sampled for each data item using the the slices +/// index divided by the number of slices as position on the gradient. +/// If one of stroke or fill is not in the style dictionary, it is taken from the charts style. +#let piechart(data, + value-key: none, + label-key: none, + outset-key: none, + outset: none, + slice-style: palette.red, + name: none, + ..style) = { + import draw: * + + // Prepare data by converting it to tuples of the format + // (value, label, outset) + data = data.enumerate().map(((i, item)) => ( + if value-key != none { + item.at(value-key) + } else { + item + }, + if label-key != none { + item.at(label-key) + } else { + none + }, + if outset-key != none { + item.at(outset-key, default: false) + } else if outset != none { + i == outset or (type(outset) == array and i in outset) + } else { + false + } + )) + + let sum = data.map(((value, ..)) => value).sum() + if sum == 0 { + sum = 1 + } + + group(name: name, ctx => { + anchor("default", (0,0)) + + let style = styles.resolve(ctx, + merge: style.named(), root: "piechart", base: default-style) + + let gap = style.gap + if type(gap) != angle { + gap = gap / (2 * calc.pi * style.radius) * 360deg + } + assert(gap < 360deg / data.len(), + message: "Gap angle is too big for " + str(data.len()) + "items. Maximum gap angle: " + repr(360deg / data.len())) + + let radius = style.radius + assert(radius > 0, + message: "Radius must be > 0.") + + let inner-radius = style.inner-radius + assert(inner-radius >= 0 and inner-radius <= radius, + message: "Radius must be >= 0 and <= radius.") + + assert(style.outset-mode in ("OFFSET", "RADIUS"), + message: "Outset mode must be 'OFFSET' or 'RADIUS', but is: " + str(style.outset-mode)) + + let style-at = if type(slice-style) == function { + slice-style + } else if type(slice-style) == array { + i => { + let s = slice-style.at(calc.rem(i, slice-style.len())) + if type(s) == color { + (fill: s) + } else { + s + } + } + } else if type(slice-style) == gradient { + i => (fill: slice-style.sample(i / data.len() * 100%)) + } + + let start-angle = style.start + let stop-angle = style.stop + let f = (stop-angle - start-angle) / sum + + let get-item-label(item, kind) = { + let (value, label, ..) = item + if kind == label-kind.value { + [#value] + } else if kind == label-kind.percentage { + [#{calc.round(value / sum * 100)}%] + } else if kind == label-kind.label { + label + } else if type(kind) == function { + (kind)(value, label) + } + } + + let start = start-angle + let enum-items = if style.clockwise { + data.enumerate().rev() + } else { + data.enumerate() + } + for (i, item) in enum-items { + let (value, label, outset) = item + if value == 0 { continue } + + let origin = (0,0) + let radius = radius + let inner-radius = inner-radius + + // Calculate item angles + let delta = f * value + let end = start + delta + + // Apply item outset + let outset-offset = if outset == true { + style.outset-offset + } else if outset == false { + 0 + } else if type(outset) in (float, ratio) { + outset + } else { + panic("Invalid type for outset. Expected bool, float or ratio, got: " + repr(outset)) + } + if type(outset-offset) == ratio { + outset-offset = outset-offset * radius / 100% + } + + if outset-offset != 0 { + if style.outset-mode == "OFFSET" { + let dir = (calc.cos((start + end) / 2), calc.sin((start + end) / 2)) + origin = vector.add(origin, vector.scale(dir, outset-offset)) + radius += outset-offset + } else { + radius += outset-offset + if inner-radius > 0 { + inner-radius += outset-offset + } + } + } + + // Calculate gap angles + let outer-gap = gap + let gap-dist = outer-gap / 360deg * 2 * calc.pi * radius + let inner-gap = if inner-radius > 0 { + gap-dist / (2 * calc.pi * inner-radius) * 360deg + } else { + 1 / calc.pi * 360deg + } + + // Calculate angle deltas + let outer-angle = end - start - outer-gap * 2 + let inner-angle = end - start - inner-gap * 2 + let mid-angle = (start + end) / 2 + + // Skip negative values + if outer-angle < 0deg { + // TODO: Add a warning as soon as Typst is ready! + continue + } + + // A sharp item is an item that should be round but is sharp due to the gap being big + let is-sharp = inner-radius == 0 or circle-arclen(inner-radius, angle: inner-angle) > circle-arclen(radius, angle: outer-angle) + + let inner-origin = vector.add(origin, if inner-radius == 0 { + if gap-dist >= 0 { + let outer-end = vector.scale((calc.cos(end - outer-gap), calc.sin(end - outer-gap)), radius) + let inner-end = vector.scale((calc.cos(end - inner-gap), calc.sin(end - inner-gap)), gap-dist) + let outer-start = vector.scale((calc.cos(start + outer-gap), calc.sin(start + outer-gap)), radius) + let inner-start = vector.scale((calc.cos(start + inner-gap), calc.sin(start + inner-gap)), gap-dist) + + intersection.line-line(outer-end, inner-end, outer-start, inner-start, ray: true) + } else { + (0,0) + } + } else if is-sharp { + let outer-end = vector.scale((calc.cos(end - outer-gap), calc.sin(end - outer-gap)), radius) + let inner-end = vector.scale((calc.cos(end - inner-gap), calc.sin(end - inner-gap)), inner-radius) + let outer-start = vector.scale((calc.cos(start + outer-gap), calc.sin(start + outer-gap)), radius) + let inner-start = vector.scale((calc.cos(start + inner-gap), calc.sin(start + inner-gap)), inner-radius) + + intersection.line-line(outer-end, inner-end, outer-start, inner-start, ray: true) + } else { + (0,0) + }) + + // Draw one segment + let stroke = style-at(i).at("stroke", default: style.stroke) + let fill = style-at(i).at("fill", default: style.fill) + if data.len() == 1 { + // If the chart has only one segment, we may have to fake a path + // with a hole in it by using a combination of multiple arcs. + if inner-radius > 0 { + // Split the circle/arc into two arcs + // and fill them + merge-path({ + arc(origin, start: start-angle, stop: mid-angle, radius: radius, anchor: "origin") + arc(origin, stop: start-angle, start: mid-angle, radius: inner-radius, anchor: "origin") + }, close: false, fill:fill, stroke: none) + merge-path({ + arc(origin, start: mid-angle, stop: stop-angle, radius: radius, anchor: "origin") + arc(origin, stop: mid-angle, start: stop-angle, radius: inner-radius, anchor: "origin") + }, close: false, fill:fill, stroke: none) + + // Create arcs for the inner and outer border and stroke them. + // If the chart is not a full circle, we have to merge two arc + // at their ends to create closing lines + if stroke != none { + if calc.abs(stop-angle - start-angle) != 360deg { + merge-path({ + arc(origin, start: start, stop: end, radius: inner-radius, anchor: "origin") + arc(origin, start: end, stop: start, radius: radius, anchor: "origin") + }, close: true, fill: none, stroke: stroke) + } else { + arc(origin, start: start, stop: end, radius: inner-radius, fill: none, stroke: stroke, anchor: "origin") + arc(origin, start: start, stop: end, radius: radius, fill: none, stroke: stroke, anchor: "origin") + } + } + } else { + arc(origin, start: start, stop: end, radius: radius, fill: fill, stroke: stroke, mode: "PIE", anchor: "origin") + } + } else { + // Draw a normal segment + if inner-origin != none { + merge-path({ + arc(origin, start: start + outer-gap, stop: end - outer-gap, anchor: "origin", + radius: radius) + if inner-radius > 0 and not is-sharp { + if inner-angle < 0deg { + arc(inner-origin, stop: end - inner-gap, delta: inner-angle, anchor: "origin", + radius: inner-radius) + } else { + arc(inner-origin, start: end - inner-gap, delta: -inner-angle, anchor: "origin", + radius: inner-radius) + } + } else { + line((rel: (end - outer-gap, radius), to: origin), + inner-origin, + (rel: (start + outer-gap, radius), to: origin)) + } + }, close: true, fill: fill, stroke: stroke) + } + } + + // Place outer label + let outer-label = get-item-label(item, style.outer-label.content) + if outer-label != none { + let r = style.outer-label.radius + if type(r) == ratio {r = r * radius / 100%} + + let dir = (r * calc.cos(mid-angle), r * calc.sin(mid-angle)) + let pt = vector.add(origin, dir) + + let angle = style.outer-label.angle + if angle == auto { + angle = vector.add(pt, (dir.at(1), -dir.at(0))) + } + + content(pt, outer-label, angle: angle, anchor: style.outer-label.anchor) + } + + // Place inner label + let inner-label = get-item-label(item, style.inner-label.content) + if inner-label != none { + let r = style.inner-label.radius + if type(r) == ratio {r = r * (radius + inner-radius) / 200%} + + let dir = (r * calc.cos(mid-angle), r * calc.sin(mid-angle)) + let pt = vector.add(origin, dir) + + let angle = style.inner-label.angle + if angle == auto { + angle = vector.add(pt, (dir.at(1), -dir.at(0))) + } + + content(pt, inner-label, angle: angle, anchor: style.inner-label.anchor) + } + + // Place item anchor + anchor("item-" + str(i), (rel: (mid-angle, radius), to: origin)) + anchor("item-" + str(i) + "-inner", (rel: (mid-angle, inner-radius), to: origin)) + + start = end + } + }) +} diff --git a/src/lib.typ b/src/lib.typ new file mode 100644 index 0000000..128ff08 --- /dev/null +++ b/src/lib.typ @@ -0,0 +1,5 @@ +#let version = version(0,1,0) + +#import "/src/axes.typ" +#import "/src/plot.typ" +#import "/src/chart.typ" diff --git a/src/plot.typ b/src/plot.typ new file mode 100644 index 0000000..6f0e28d --- /dev/null +++ b/src/plot.typ @@ -0,0 +1,513 @@ +#import "/src/cetz.typ": util, draw, matrix, vector, styles, palette +#import util: bezier + +#import "/src/axes.typ" +#import "/src/plot/sample.typ": sample-fn, sample-fn2 +#import "/src/plot/line.typ": add, add-hline, add-vline, add-fill-between +#import "/src/plot/contour.typ": add-contour +#import "/src/plot/boxwhisker.typ": add-boxwhisker +#import "/src/plot/util.typ" as plot-util +#import "/src/plot/legend.typ" as plot-legend +#import "/src/plot/annotation.typ": annotate, calc-annotation-domain +#import "/src/plot/bar.typ": add-bar +#import "/src/plot/errorbar.typ": add-errorbar +#import "/src/plot/mark.typ" + +#let default-colors = (blue, red, green, yellow, black) + +#let default-plot-style(i) = { + let color = default-colors.at(calc.rem(i, default-colors.len())) + return (stroke: color, + fill: color.lighten(75%)) +} + +#let default-mark-style(i) = { + return default-plot-style(i) +} + +/// Create a plot environment. Data to be plotted is given by passing it to the +/// `plot.add` or other plotting functions. The plot environment supports different +/// axis styles to draw, see its parameter `axis-style:`. +/// +/// #example(``` +/// import cetz.plot +/// plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// plot.add(((0,0), (1,1), (2,.5), (4,3))) +/// }) +/// ```) +/// +/// To draw elements insides a plot, using the plots coordinate system, use +/// the `plot.annotate(..)` function. +/// +/// = parameters +/// +/// = Options +/// +/// You can use the following options to customize each axis of the plot. You must pass them as named arguments prefixed by the axis name followed by a dash (`-`) they should target. Example: `x-min: 0`, `y-ticks: (..)` or `x2-label: [..]`. +/// +/// #show-parameter-block("label", ("none", "content"), default: "none", [ +/// The axis' label. If and where the label is drawn depends on the `axis-style`.]) +/// #show-parameter-block("min", ("auto", "float"), default: "auto", [ +/// Axis lower domain value. If this is set greater than than `max`, the axis' direction is swapped]) +/// #show-parameter-block("max", ("auto", "float"), default: "auto", [ +/// Axis upper domain value. If this is set to a lower value than `min`, the axis' direction is swapped]) +/// #show-parameter-block("equal", ("string"), default: "none", [ +/// Set the axis domain to keep a fixed aspect ratio by multiplying the other axis domain by the plots aspect ratio, +/// depending on the other axis orientation (see `horizontal`). +/// This can be useful to force one axis to grow or shrink with another one. +/// You can only "lock" two axes of different orientations. +/// #example(``` +/// cetz.plot.plot(size: (2,1), x-tick-step: 1, y-tick-step: 1, +/// x-equal: "y", +/// { +/// cetz.plot.add(domain: (0, 2 * calc.pi), +/// t => (calc.cos(t), calc.sin(t))) +/// }) +/// ```) +/// ]) +/// #show-parameter-block("horizontal", ("bool"), default: "axis name dependant", [ +/// If true, the axis is considered an axis that gets drawn horizontally, vertically otherwise. +/// The default value depends on the axis name on axis creation. Axes which name start with `x` have this +/// set to `true`, all others have it set to `false`. Each plot has to use one horizontal and one +/// vertical axis for plotting, a combination of two y-axes will panic: ("y", "y2"). +/// ]) +/// #show-parameter-block("tick-step", ("none", "auto", "float"), default: "auto", [ +/// The increment between tick marks on the axis. If set to `auto`, an +/// increment is determined. When set to `none`, incrementing tick marks are disabled.]) +/// #show-parameter-block("minor-tick-step", ("none", "float"), default: "none", [ +/// Like `tick-step`, but for minor tick marks. In contrast to ticks, minor ticks do not have labels.]) +/// #show-parameter-block("ticks", ("none", "array"), default: "none", [ +/// A List of custom tick marks to additionally draw along the axis. They can be passed as +/// an array of `` values or an array of `(, )` tuples for +/// setting custom tick mark labels per mark. +/// +/// #example(``` +/// cetz.plot.plot(x-tick-step: none, y-tick-step: none, +/// x-min: 0, x-max: 4, +/// x-ticks: (1, 2, 3), +/// y-min: 1, y-max: 2, +/// y-ticks: ((1, [One]), (2, [Two])), +/// { +/// cetz.plot.add(((0,0),)) +/// }) +/// ```) +/// +/// Examples: `(1, 2, 3)` or `((1, [One]), (2, [Two]), (3, [Three]))`]) +/// #show-parameter-block("format", ("none", "string", "function"), default: "float", [ +/// How to format the tick label: You can give a function that takes a `` and return +/// `` to use as the tick label. You can also give one of the predefined options: +/// / float: Floating point formatting rounded to two digits after the point (see `decimals`) +/// / sci: Scientific formatting with $times 10^n$ used as exponet syntax +/// +/// #example(``` +/// let formatter(v) = if v != 0 {$ #{v/calc.pi} pi $} else {$ 0 $} +/// cetz.plot.plot(x-tick-step: calc.pi, y-tick-step: none, +/// x-min: 0, x-max: 2 * calc.pi, +/// x-format: formatter, +/// { +/// cetz.plot.add(((0,0),)) +/// }) +/// ```) +/// ]) +/// #show-parameter-block("decimals", ("int"), default: "2", [ +/// Number of decimals digits to display for tick labels, if the format is set +/// to `"float"`. +/// ]) +/// #show-parameter-block("unit", ("none", "content"), default: "none", [ +/// Suffix to append to all tick labels. +/// ]) +/// #show-parameter-block("grid", ("bool", "string"), default: "false", [ +/// If `true` or `"major"`, show grid lines for all major ticks. If set +/// to `"minor"`, show grid lines for minor ticks only. +/// The value `"both"` enables grid lines for both, major- and minor ticks. +/// +/// #example(``` +/// cetz.plot.plot(x-tick-step: 1, y-tick-step: 1, +/// y-minor-tick-step: .2, +/// x-min: 0, x-max: 2, x-grid: true, +/// y-min: 0, y-max: 2, y-grid: "both", { +/// cetz.plot.add(((0,0),)) +/// }) +/// ```) +/// ]) +/// #show-parameter-block("break", ("bool"), default: "false", [ +/// If true, add a "sawtooth" at the start or end of the axis line, depending +/// on the axis bounds. If the axis min. value is > 0, a sawtooth is added +/// to the start of the axes, if the axis max. value is < 0, a sawtooth is added +/// to its end.]) +/// +/// - body (body): Calls of `plot.add` or `plot.add-*` commands. Note that normal drawing +/// commands like `line` or `rect` are not allowed inside the plots body, instead wrap +/// them in `plot.annotate`, which lets you select the axes used for drawing. +/// - size (array): Plot size tuple of `(, )` in canvas units. +/// This is the plots inner plotting size without axes and labels. +/// - axis-style (none, string): How the axes should be styled: +/// / scientific: Frames plot area using a rectangle and draw axes `x` (bottom), `y` (left), `x2` (top), and `y2` (right) around it. +/// If `x2` or `y2` are unset, they mirror their opposing axis. +/// / scientific-auto: Draw set (used) axes `x` (bottom), `y` (left), `x2` (top) and `y2` (right) around +/// the plotting area, forming a rect if all axes are in use or a L-shape if only `x` and `y` are in use. +/// / school-book: Draw axes `x` (horizontal) and `y` (vertical) as arrows pointing to the right/top with both crossing at $(0, 0)$ +/// / left: Draw axes `x` and `y` as arrows, while the y axis stays on the left (at `x.min`) +/// and the x axis at the bottom (at `y.min`) +/// / `none`: Draw no axes (and no ticks). +/// +/// #example(``` +/// let opts = (x-tick-step: none, y-tick-step: none, size: (2,1)) +/// let data = cetz.plot.add(((-1,-1), (1,1),), mark: "o") +/// +/// for name in (none, "school-book", "left", "scientific") { +/// cetz.plot.plot(axis-style: name, ..opts, data, name: "plot") +/// content(((0,-1), "-|", "plot.south"), repr(name)) +/// set-origin((3.5,0)) +/// } +/// ```, vertical: true) +/// - plot-style (style,function): Styling to use for drawing plot graphs. +/// This style gets inherited by all plots and supports `palette` functions. +/// The following style keys are supported: +/// #show-parameter-block("stroke", ("none", "stroke"), default: 1pt, [ +/// Stroke style to use for stroking the graph. +/// ]) +/// #show-parameter-block("fill", ("none", "paint"), default: none, [ +/// Paint to use for filled graphs. Note that not all graphs may support filling and +/// that you may have to enable filling per graph, see `plot.add(fill: ..)`. +/// ]) +/// - mark-style (style,function): Styling to use for drawing plot marks. +/// This style gets inherited by all plots and supports `palette` functions. +/// The following style keys are supported: +/// #show-parameter-block("stroke", ("none", "stroke"), default: 1pt, [ +/// Stroke style to use for stroking the mark. +/// ]) +/// #show-parameter-block("fill", ("none", "paint"), default: none, [ +/// Paint to use for filling marks. +/// ]) +/// - fill-below (bool): If true, the filled shape of plots is drawn _below_ axes. +/// - name (string): The plots element name to be used when referring to anchors +/// - legend (none, auto, coordinate): The position the legend will be drawn at. See @plot-legends for information about legends. If set to ``, the legend's "default-placement" styling will be used. If set to a ``, it will be taken as relative to the plot's origin. +/// - legend-anchor (auto, string): Anchor of the legend group to use as its origin. +/// If set to `auto` and `lengend` is one of the predefined legend anchors, the +/// opposite anchor to `legend` gets used. +/// - legend-style (style): Style key-value overwrites for the legend style with style root `legend`. +/// - ..options (any): Axis options, see _options_ below. +#let plot(body, + size: (1, 1), + axis-style: "scientific", + name: none, + plot-style: default-plot-style, + mark-style: default-mark-style, + fill-below: true, + legend: auto, + legend-anchor: auto, + legend-style: (:), + ..options + ) = draw.group(name: name, ctx => { + // Create plot context object + let make-ctx(x, y, size) = { + assert(x != none, message: "X axis does not exist") + assert(y != none, message: "Y axis does not exist") + assert(size.at(0) > 0 and size.at(1) > 0, message: "Plot size must be > 0") + + let x-scale = ((x.max - x.min) / size.at(0)) + let y-scale = ((y.max - y.min) / size.at(1)) + + if y.horizontal { + (x-scale, y-scale) = (y-scale, x-scale) + } + + return (x: x, y: y, size: size, x-scale: x-scale, y-scale: y-scale) + } + + // Setup data viewport + let data-viewport(data, x, y, size, body, name: none) = { + if body == none or body == () { return } + + assert.ne(x.horizontal, y.horizontal, + message: "Data must use one horizontal and one vertical axis!") + + // If y is the horizontal axis, swap x and y + // coordinates by swapping the transformation + // matrix columns. + if y.horizontal { + (x, y) = (y, x) + body = draw.set-ctx(ctx => { + ctx.transform = matrix.swap-cols(ctx.transform, 0, 1) + return ctx + }) + body + } + + // Setup the viewport + axes.axis-viewport(size, x, y, body, name: name) + } + + let data = () + let anchors = () + let annotations = () + let body = if body != none { body } else { () } + + for cmd in body { + assert(type(cmd) == dictionary and "type" in cmd, + message: "Expected plot sub-command in plot body") + if cmd.type == "anchor" { + anchors.push(cmd) + } else if cmd.type == "annotation" { + annotations.push(cmd) + } else { data.push(cmd) } + } + + assert(axis-style in (none, "scientific", "scientific-auto", "school-book", "left"), + message: "Invalid plot style") + + // Create axes for data & annotations + let axis-dict = (:) + for d in data + annotations { + for (i, name) in d.axes.enumerate() { + if not name in axis-dict { + axis-dict.insert(name, axes.axis( + min: none, max: none)) + } + + let axis = axis-dict.at(name) + let domain = if i == 0 { + d.at("x-domain", default: (0, 0)) + } else { + d.at("y-domain", default: (0, 0)) + } + if domain != (none, none) { + axis.min = util.min(axis.min, ..domain) + axis.max = util.max(axis.max, ..domain) + } + + axis-dict.at(name) = axis + } + } + + // Create axes for anchors + for a in anchors { + for (i, name) in a.axes.enumerate() { + if not name in axis-dict { + axis-dict.insert(name, axes.axis(min: none, max: none)) + } + } + } + + // Adjust axis bounds for annotations + for a in annotations { + let (x, y) = a.axes.map(name => axis-dict.at(name)) + (x, y) = calc-annotation-domain(ctx, x, y, a) + axis-dict.at(a.axes.at(0)) = x + axis-dict.at(a.axes.at(1)) = y + } + + // Set axis options + axis-dict = plot-util.setup-axes(ctx, axis-dict, options.named(), size) + + // Prepare styles + for i in range(data.len()) { + let style-base = plot-style + if type(style-base) == function { + style-base = (style-base)(i) + } + assert.eq(type(style-base), dictionary, + message: "plot-style must be of type dictionary") + + if type(data.at(i).style) == function { + data.at(i).style = (data.at(i).style)(i) + } + assert.eq(type(style-base), dictionary, + message: "data plot-style must be of type dictionary") + + data.at(i).style = util.merge-dictionary( + style-base, data.at(i).style) + + if "mark-style" in data.at(i) { + let mark-style-base = mark-style + if type(mark-style-base) == function { + mark-style-base = (mark-style-base)(i) + } + assert.eq(type(mark-style-base), dictionary, + message: "mark-style must be of type dictionary") + + if type(data.at(i).mark-style) == function { + data.at(i).mark-style = (data.at(i).mark-style)(i) + } + + if type(data.at(i).mark-style) == dictionary { + data.at(i).mark-style = util.merge-dictionary( + mark-style-base, + data.at(i).mark-style + ) + } + } + } + + draw.group(name: "plot", { + draw.anchor("origin", (0, 0)) + + // Prepare + for i in range(data.len()) { + let (x, y) = data.at(i).axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + if "plot-prepare" in data.at(i) { + data.at(i) = (data.at(i).plot-prepare)(data.at(i), plot-ctx) + assert(data.at(i) != none, + message: "Plot prepare(self, cxt) returned none!") + } + } + + // Background Annotations + for a in annotations.filter(a => a.background) { + let (x, y) = a.axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + data-viewport(a, x, y, size, { + draw.anchor("default", (0, 0)) + a.body + }) + } + + // Fill + if fill-below { + for d in data { + let (x, y) = d.axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + data-viewport(d, x, y, size, { + draw.anchor("default", (0, 0)) + draw.set-style(..d.style) + + if "plot-fill" in d { + (d.plot-fill)(d, plot-ctx) + } + }) + } + } + + if axis-style in ("scientific", "scientific-auto") { + let draw-unset = if axis-style == "scientific" { + true + } else { + false + } + + let mirror = if axis-style == "scientific" { + auto + } else { + none + } + + axes.scientific( + size: size, + draw-unset: draw-unset, + bottom: axis-dict.at("x", default: none), + top: axis-dict.at("x2", default: mirror), + left: axis-dict.at("y", default: none), + right: axis-dict.at("y2", default: mirror),) + } else if axis-style == "left" { + axes.school-book( + size: size, + axis-dict.x, + axis-dict.y, + x-position: axis-dict.y.min, + y-position: axis-dict.x.min) + } else if axis-style == "school-book" { + axes.school-book( + size: size, + axis-dict.x, + axis-dict.y,) + } + + // Stroke + Mark data + for d in data { + let (x, y) = d.axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + data-viewport(d, x, y, size, { + draw.anchor("default", (0, 0)) + draw.set-style(..d.style) + + if not fill-below and "plot-fill" in d { + (d.plot-fill)(d, plot-ctx) + } + if "plot-stroke" in d { + (d.plot-stroke)(d, plot-ctx) + } + if "mark" in d and d.mark != none { + draw.set-style(..d.style, ..d.mark-style) + mark.draw-mark(d.data, x, y, d.mark, d.mark-size, size) + } + }) + } + + // Foreground Annotations + for a in annotations.filter(a => not a.background) { + let (x, y) = a.axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + data-viewport(a, x, y, size, { + draw.anchor("default", (0, 0)) + a.body + }) + } + + // Place anchors + for a in anchors { + let (x, y) = a.axes.map(name => axis-dict.at(name)) + let plot-ctx = make-ctx(x, y, size) + + data-viewport(a, x, y, size, { + let (ax, ay) = a.position + if ax == "min" {ax = x.min} else if ax == "max" {ax = x.max} + if ay == "min" {ay = y.min} else if ay == "max" {ay = y.max} + draw.anchor("default", (0,0)) + draw.anchor(a.name, (ax, ay)) + }, name: "anchors") + draw.copy-anchors("anchors", filter: (a.name,)) + } + }) + + // Draw the legend + if legend != none { + let items = data.filter(d => "label" in d and d.label != none) + if items.len() > 0 { + plot-legend.draw-legend(ctx, legend-style, + items, size, "plot", legend, legend-anchor) + } + } + + draw.copy-anchors("plot") +}) + +/// Add an anchor to a plot environment +/// +/// This function is similar to `draw.anchor` but it takes an additional +/// axis tuple to specify which axis coordinate system to use. +/// +/// #example(``` +/// import cetz.plot +/// import cetz.draw: * +/// plot.plot(size: (2,2), name: "plot", +/// x-tick-step: none, y-tick-step: none, { +/// plot.add(((0,0), (1,1), (2,.5), (4,3))) +/// plot.add-anchor("pt", (1,1)) +/// }) +/// +/// line("plot.pt", ((), "|-", (0,1.5)), mark: (start: ">"), name: "line") +/// content("line.end", [Here], anchor: "south", padding: .1) +/// ```) +/// +/// - name (string): Anchor name +/// - position (tuple): Tuple of x and y values. +/// Both values can have the special values "min" and +/// "max", which resolve to the axis min/max value. +/// Position is in axis space defined by the axes passed to `axes`. +/// - axes (tuple): Name of the axes to use `("x", "y")` as coordinate +/// system for `position`. Note that both axes must be used, +/// as `add-anchors` does not create them on demand. +#let add-anchor(name, position, axes: ("x", "y")) = { + (( + type: "anchor", + name: name, + position: position, + axes: axes, + ),) +} diff --git a/src/plot/annotation.typ b/src/plot/annotation.typ new file mode 100644 index 0000000..a8584aa --- /dev/null +++ b/src/plot/annotation.typ @@ -0,0 +1,76 @@ +#import "/src/cetz.typ": draw, process, util, matrix + +#import "util.typ" +#import "sample.typ" + +/// Add an annotation to the plot +/// +/// An annotation is a sub-canvas that uses the plots coordinates specified +/// by its x and y axis. +/// +/// #example(``` +/// import cetz.plot +/// plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// plot.add(domain: (0, 2*calc.pi), calc.sin) +/// plot.annotate({ +/// rect((0, -1), (calc.pi, 1), fill: rgb(50,50,200,50)) +/// content((calc.pi, 0), [Here]) +/// }) +/// }) +/// ```) +/// +/// Bounds calculation is done naively, therefore fixed size content _can_ grow +/// out of the plot. You can adjust the padding manually to adjust for that. The +/// feature of solving the correct bounds for fixed size elements might be added +/// in the future. +/// +/// - body (drawable): Elements to draw +/// - axes (axes): X and Y axis names +/// - resize (bool): If true, the plots axes get adjusted to contain the annotation +/// - padding (none,number,dictionary): Annotation padding that is used for axis +/// adjustment +/// - background (bool): If true, the annotation is drawn behind all plots, in the background. +/// If false, the annotation is drawn above all plots. +#let annotate(body, axes: ("x", "y"), resize: true, padding: none, background: false) = { + (( + type: "annotation", + body: { + draw.set-style(mark: (transform-shape: false)) + body; + }, + axes: axes, + resize: resize, + background: background, + padding: util.as-padding-dict(padding), + ),) +} + +// Returns the adjusted axes for the annotation object +// +// -> array Tuple of x and y axis +#let calc-annotation-domain(ctx, x, y, annotation) = { + if not annotation.resize { + return (x, y) + } + + ctx.transform = matrix.ident() + let (ctx: ctx, bounds: bounds, drawables: _) = process.many(ctx, annotation.body) + if bounds == none { + return (x, y) + } + + let (x-min, y-min, ..) = bounds.low + let (x-max, y-max, ..) = bounds.high + + x-min -= annotation.padding.left + x-max += annotation.padding.right + y-min -= annotation.padding.bottom + y-max += annotation.padding.top + + x.min = calc.min(x.min, x-min) + x.max = calc.max(x.max, x-max) + y.min = calc.min(y.min, y-min) + y.max = calc.max(y.max, y-max) + + return (x, y) +} diff --git a/src/plot/bar.typ b/src/plot/bar.typ new file mode 100644 index 0000000..2c40233 --- /dev/null +++ b/src/plot/bar.typ @@ -0,0 +1,264 @@ +#import "/src/cetz.typ": draw, util + +#import "errorbar.typ": draw-errorbar + +#let _transform-row(row, x-key, y-key, error-key) = { + let x = row.at(x-key) + let y = if y-key == auto { + row.slice(1) + } else if type(y-key) == array { + y-key.map(k => row.at(k, default: 0)) + } else { + row.at(y-key, default: 0) + } + let err = if error-key == none { + 0 + } else if type(error-key) == array { + error-key.map(k => row.at(k, default: 0)) + } else { + row.at(error-key, default: 0) + } + + if type(y) != array { y = (y,) } + if type(err) != array { err = (err,) } + + (x, y.flatten(), err.flatten()) +} + +// Get a single items min and maximum y-value +#let _minmax-value(row) = { + let min = none + let max = none + + let y = row.at(1) + let e = row.at(2) + for i in range(0, y.len()) { + let i-min = y.at(i) - e.at(i, default: 0) + if min == none { min = i-min } + else { min = calc.min(min, i-min) } + + let i-max = y.at(i) + e.at(i, default: 0) + if max == none { max = i-max } + else { max = calc.max(max, i-max) } + } + + return (min: min, max: max) +} + +// Functions for max value calculation +#let _max-value-fn = ( + basic: (data, min: 0) => { + calc.max(min, ..data.map(t => _minmax-value(t).max)) + }, + clustered: (data, min: 0) => { + calc.max(min, ..data.map(t => _minmax-value(t).max)) + }, + stacked: (data, min: 0) => { + calc.max(min, ..data.map(t => t.at(1).sum())) + }, + stacked100: (.., min: 0) => {min + 100} +) + +// Functions for min value calculation +#let _min-value-fn = ( + basic: (data, min: 0) => { + calc.min(min, ..data.map(t => _minmax-value(t).min)) + }, + clustered: (data, min: 0) => { + calc.min(min, ..data.map(t => _minmax-value(t).min)) + }, + stacked: (data, min: 0) => { + calc.min(min, ..data.map(t => t.at(1).sum())) + }, + stacked100: (.., min: 0) => {min} +) + +#let _prepare(self, ctx) = { + return self +} + +#let _get-x-offset(position, width) = { + if position == "start" { 0 } + else if position == "end" { width } + else { width / 2 } +} + +#let _draw-rects(filling, self, ctx, ..args) = { + let x-axis = ctx.x + let y-axis = ctx.y + + let bars = () + let errors = () + + let w = self.bar-width + for d in self.data { + let (x, n, len, y-min, y-max, err) = d + + let w = self.bar-width + let gap = self.cluster-gap * if w > 0 { -1 } else { +1 } + w += gap * (len - 1) + + let x-offset = _get-x-offset(self.bar-position, self.bar-width) + x-offset += gap * n + + let left = x - x-offset + let right = left + w + let width = (right - left) / len + + if self.mode in ("basic", "clustered") { + left = left + width * n + right = left + width + } + + if (left <= x-axis.max and right >= x-axis.min and + y-min <= y-axis.max and y-max >= y-axis.min) { + left = calc.max(left, x-axis.min) + right = calc.min(right, x-axis.max) + y-min = calc.max(y-min, y-axis.min) + y-max = calc.min(y-max, y-axis.max) + + draw.rect((left, y-min), (right, y-max)) + + if not filling and err != 0 { + let y-whisker-size = self.whisker-size * ctx.x-scale + draw-errorbar(((left + right) / 2, y-max), + 0, err, 0, y-whisker-size / 2, self.style + self.error-style) + } + } + } +} + +#let _stroke(self, ctx) = { + _draw-rects(false, self, ctx, fill: none) +} + +#let _fill(self, ctx) = { + _draw-rects(true, self, ctx, stroke: none) +} + +/// Add a bar- or column-chart to the plot +/// +/// A bar- or column-chart is a chart where values are drawn as rectangular boxes. +/// +/// - data (array): Array of data items. An item is an array containing a x an one or more y values. +/// For example `(0, 1)` or `(0, 10, 5, 30)`. Depending on the `mode`, the data items +/// get drawn as either clustered or stacked rects. +/// - x-key: (int,string): Key to use for retreiving a bars x-value from a single data entry. +/// This value gets passed to the `.at(...)` function of a data item. +/// - y-key: (auto,int,string,array): Key to use for retreiving a bars y-value. For clustered/stacked +/// data, this must be set to a list of keys (e.g. `range(1, 4)`). If set to `auto`, att but the first +/// array-values of a data item are used as y-values. +/// - error-key: (none,int,string): Key to use for retreiving a bars y-error. +/// - mode (string): The mode on how to group data items into bars: +/// / basic: Add one bar per data value. If the data contains multiple values, +/// group those bars next to each other. +/// / clustered: Like "basic", but take into account the maximum number of values of all items +/// and group each cluster of bars together having the width of the widest cluster. +/// / stacked: Stack bars of subsequent item values onto the previous bar, generating bars +/// with the height of the sume of all an items values. +/// / stacked100: Like "stacked", but scale each bar to height $100$, making the different +/// bars percentages of the sum of an items values. +/// - labels (none,content,array): A single legend label for "basic" bar-charts, or a +/// a list of legend labels per bar category, if the mode is one of "clustered", "stacked" or "stacked100". +/// - bar-width (float): Width of one data item on the y axis +/// - bar-position (string): Positioning of data items relative to their x value. +/// - "start": The lower edge of the data item is on the x value (left aligned) +/// - "center": The data item is centered on the x value +/// - "end": The upper edge of the data item is on the x value (right aligned) +/// - cluster-gap (float): Spacing between bars insides a cluster. +/// - style (dictionary): Plot style +/// - axes (axes): Plot axes. To draw a horizontal growing bar chart, you can swap the x and y axes. +#let add-bar(data, + x-key: 0, + y-key: auto, + error-key: none, + mode: "basic", + labels: none, + bar-width: 1, + bar-position: "center", + cluster-gap: 0, + whisker-size: .25, + error-style: (:), + style: (:), + axes: ("x", "y")) = { + assert(mode in ("basic", "clustered", "stacked", "stacked100"), + message: "Mode must be basic, clustered, stacked or stacked100, but is " + mode) + assert(bar-position in ("start", "center", "end"), + message: "Invalid bar-position '" + bar-position + "'. Allowed values are: start, center, end") + assert(bar-width != 0, + message: "Option bar-width must be != 0, but is " + str(bar-width)) + if error-key != none { + assert(y-key != auto, + message: "Bar value-key must be set != auto if error-key is set") + assert(mode in ("basic", "clustered"), + message: "Error bars are supported for basic or clustered only, got " + mode) + } + + // Transform data to (x, y, error) triplets + let data = data.map(row => _transform-row(row, x-key, y-key, error-key)) + + let n = util.max(..data.map(d => d.at(1).len())) + let x-offset = _get-x-offset(bar-position, bar-width) + let x-domain = (util.min(..data.map(d => d.at(0))) - x-offset, + util.max(..data.map(d => d.at(0))) - x-offset + bar-width) + let y-domain = (_min-value-fn.at(mode)(data), + _max-value-fn.at(mode)(data)) + + // For stacked 100%, multiply each column/bar + if mode == "stacked100" { + data = data.map(((x, y, err)) => { + let f = 100 / y.sum() + return (x, y.map(v => v * f), err) + }) + } + + // Transform data from (x, ..y) to (x, n, len, y-min, y-max) per y + let stacked = mode in ("stacked", "stacked100") + let clustered = mode == "clustered" + let bar-data = if mode == "basic" { + range(0, data.len()).map(_ => ()) + } else { + range(0, n).map(_ => ()) + } + + let j = 0 + for (x, y, err) in data { + let len = if clustered { n } else { y.len() } + let sum = 0 + for (i, y) in y.enumerate() { + let err = err.at(i, default: 0) + if stacked { + bar-data.at(i).push((x, i, len, sum, sum + y, err)) + } else if clustered { + bar-data.at(i).push((x, i, len, 0, y, err)) + } else { + bar-data.at(j).push((x, i, len, 0, y, err)) + } + sum += y + } + j += 1 + } + + let labels = if type(labels) == array { labels } else { (labels,) } + range(0, bar-data.len()).map(i => ( + type: "bar", + label: labels.at(i, default: none), + axes: axes, + mode: mode, + data: bar-data.at(i), + x-domain: x-domain, + y-domain: y-domain, + style: style, + bar-width: bar-width, + bar-position: bar-position, + cluster-gap: cluster-gap, + whisker-size: whisker-size, + error-style: error-style, + plot-prepare: _prepare, + plot-stroke: _stroke, + plot-fill: _fill, + plot-legend-preview: self => { + draw.rect((0,0), (1,1), ..self.style) + } + )) +} diff --git a/src/plot/boxwhisker.typ b/src/plot/boxwhisker.typ new file mode 100644 index 0000000..9b34c5e --- /dev/null +++ b/src/plot/boxwhisker.typ @@ -0,0 +1,117 @@ +#import "/src/cetz.typ": draw, util + +/// Add one or more box or whisker plots +/// +/// #example(``` +/// cetz.plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// cetz.plot.add-boxwhisker((x: 1, // Location on x-axis +/// outliers: (7, 65, 69), // Optional outlier values +/// min: 15, max: 60, // Minimum and maximum +/// q1: 25, // Quartiles: Lower +/// q2: 35, // Median +/// q3: 50)) // Upper +/// }) +/// ```) +/// +/// - data (array, dictionary): dictionary or array of dictionaries containing the +/// needed entries to plot box and whisker plot. +/// +/// The following fields are supported: +/// - `x` (number) X-axis value +/// - `min` (number) Minimum value +/// - `max` (number) Maximum value +/// - `q1`, `q2`, `q3` (number) Quartiles from lower to to upper +/// - `outliers` (array of number) Optional outliers +/// +/// - axes (array): Name of the axes to use ("x", "y"), note that not all +/// plot styles are able to display a custom axis! +/// - style (style): Style to use, can be used with a palette function +/// - box-width (float): Width from edge-to-edge of the box of the box and whisker in plot units. Defaults to 0.75 +/// - whisker-width (float): Width from edge-to-edge of the whisker of the box and whisker in plot units. Defaults to 0.5 +/// - mark (string): Mark to use for plotting outliers. Set `none` to disable. Defaults to "x" +/// - mark-size (float): Size of marks for plotting outliers. Defaults to 0.15 +/// - label (none,content): Legend label to show for this plot. +#let add-boxwhisker(data, + label: none, + axes: ("x", "y"), + style: (:), + box-width: 0.75, + whisker-width: 0.5, + mark: "*", + mark-size: 0.15) = { + // Add multiple boxes as multiple calls to + // add-boxwhisker + if type(data) == array { + for it in data { + add-boxwhisker( + it, + axes:axes, + style: style, + box-width: box-width, + whisker-width: whisker-width, + mark: mark, + mark-size: mark-size) + } + return + } + + assert("x" in data, message: "Specify 'x', the x value at which to display the box and whisker") + assert("q1" in data, message: "Specify 'q1', the lower quartile") + assert("q2" in data, message: "Specify 'q2', the median") + assert("q3" in data, message: "Specify 'q3', the upper quartile") + assert("min" in data, message: "Specify 'min', the minimum excluding outliers") + assert("max" in data, message: "Specify 'max', the maximum excluding outliers") + assert(data.q1 <= data.q2 and data.q2 <= data.q3, + message: "The quartiles q1, q2 and q3 must follow q1 < q2 < q3") + assert(data.min <= data.q1 and data.max >= data.q2, + message: "The minimum and maximum must be <= q1 and >= q3") + + // Y domain + let max-value = util.max(data.max, ..data.at("outliers", default: ())) + let min-value = util.min(data.min, ..data.at("outliers", default: ())) + + let prepare(self, ctx) = { + return self + } + + let stroke(self, ctx) = { + let data = self.bw-data + + // Box + draw.rect((data.x - box-width / 2, data.q1), + (data.x + box-width / 2, data.q3), + ..self.style) + + // Mean + draw.line((data.x - box-width / 2, data.q2), + (data.x + box-width / 2, data.q2), + ..self.style) + + // whiskers + let whisker(x, start, end) = { + draw.line((x, start),(x, end),..self.style) + draw.line((x - whisker-width / 2, end),(x + whisker-width / 2, end), ..self.style) + } + whisker(data.x, data.q3, data.max) + whisker(data.x, data.q1, data.min) + } + + (( + type: "boxwhisker", + label: label, + axes: axes, + bw-data: data, + style: style, + plot-prepare: prepare, + plot-stroke: stroke, + x-domain: (data.x - calc.max(whisker-width, box-width), + data.x + calc.max(whisker-width, box-width)), + y-domain: (min-value, max-value), + ) + (if "outliers" in data { ( + type: "boxwhisker-outliers", + data: data.outliers.map(it => (data.x, it)), + mark: mark, + mark-size: mark-size, + mark-style: (:) + ) }),) +} diff --git a/src/plot/contour.typ b/src/plot/contour.typ new file mode 100644 index 0000000..db611c9 --- /dev/null +++ b/src/plot/contour.typ @@ -0,0 +1,350 @@ +#import "/src/cetz.typ": draw + +#import "util.typ" +#import "sample.typ" + +// Find contours of a 2D array by using marching squares algorithm +// +// - data (array): A 2D array of floats where the first index is the row and the second index is the column +// - offset (float): Z value threshold of a cell compare with `op` to, to count as true +// - op (auto,string,function): Z value comparison oparator: +// / `">", ">=", "<", "<=", "!=", "=="`: Use the passed operator to compare z. +// / `auto`: Use ">=" for positive z values, "<=" for negative z values. +// / ``: If set to a function, that function gets called +// with two arguments, the z value `z1` to compare against and +// the z value `z2` of the data and must return a boolean: `(z1, z2) => boolean`. +// - interpolate (bool): Enable cell interpolation for smoother lines +// - contour-limit (int): Contour limit after which the algorithm panics +// -> array: Array of contour point arrays +#let find-contours(data, offset, op: auto, interpolate: true, contour-limit: 50) = { + assert(data != none and type(data) == array, + message: "Data must be of type array") + assert(type(offset) in (int, float), + message: "Offset must be numeric") + + let n-rows = data.len() + let n-cols = data.at(0).len() + if n-rows < 2 or n-cols < 2 { + return () + } + + assert(op == auto or type(op) in (str, function), + message: "Operator must be of type auto, string or function") + if op == auto { + op = if offset < 0 { "<=" } else { ">=" } + } + if type(op) == str { + assert(op in ("<", "<=", ">", ">=", "==", "!="), + message: "Operator must be one of: <, <=, >, >=, != or ==") + } + + // Return if data is set + let is-set = if type(op) == function { + v => op(offset, v) + } else if op == "==" { + v => v == offset + } else if op == "!=" { + v => v != offset + } else if op == "<" { + v => v < offset + } else if op == "<=" { + v => v <= offset + } else if op == ">" { + v => v > offset + } else if op == ">=" { + v => v >= offset + } + + // Build a binary map that has 0 for unset and 1 for set cells + let bin-data = data.map(r => r.map(is-set)) + + // Get binary data at x, y + let get-bin(x, y) = { + if x >= 0 and x < n-cols and y >= 0 and y < n-rows { + return bin-data.at(y).at(x) + } + return false + } + + // Get data point for x, y coordinate + let get-data(x, y) = { + if x >= 0 and x < n-cols and y >= 0 and y < n-rows { + return float(data.at(y).at(x)) + } + return none + } + + // Get case (0 to 15) + let get-case(tl, tr, bl, br) = { + int(tl) * 8 + int(tr) * 4 + int(br) * 2 + int(bl) + } + + let lerp(a, b) = { + if a == b { return a } + else if a == none { return 1 } + else if b == none { return 0 } + return (offset - a) / (b - a) + } + + // List of all found contours + let contours = () + + let segments = () + for y in range(-1, n-rows) { + for x in range(-1, n-cols) { + let tl = get-bin(x, y) + let tr = get-bin(x+1, y) + let bl = get-bin(x, y+1) + let br = get-bin(x+1, y+1) + + // Corner data + // + // nw-----ne + // | | + // | | + // | | + // sw-----se + let nw = get-data(x, y) + let ne = get-data(x+1, y) + let se = get-data(x+1, y+1) + let sw = get-data(x, y+1) + + // Interpolated edge points + // + // +-- a --+ + // | | + // d b + // | | + // +-- c --+ + let a = (x + .5, y) + let b = (x + 1, y + .5) + let c = (x + .5, y + 1) + let d = (x, y + .5) + if interpolate { + a = (x + lerp(nw, ne), y) + b = (x + 1, y + lerp(ne, se)) + c = (x + lerp(sw, se), y + 1) + d = (x, y + lerp(nw, sw)) + } + + let case = get-case(tl, tr, bl, br) + if case in (1, 14) { + segments.push((d, c)) + } else if case in (2, 13) { + segments.push((b, c)) + } else if case in (3, 12) { + segments.push((d, b)) + } else if case in (4, 11) { + segments.push((a, b)) + } else if case == 5 { + segments.push((d, a)) + segments.push((c, b)) + } else if case in (6, 9) { + segments.push((c, a)) + } else if case in (7, 8) { + segments.push((d, a)) + } else if case == 10 { + segments.push((a, b)) + segments.push((c, d)) + } + } + } + + // Join lines to one or more contours + // This is done by searching for the next line + // that starts at the current contours head or tail + // point. If found, push the other coordinate to + // the contour. If no line could be found, push a + // new contour. + let contours = () + while segments.len() > 0 { + if contours.len() == 0 { + contours.push(segments.remove(0)) + } + + let found = false + + let i = 0 + while i < segments.len() { + let (a, b) = segments.at(i) + let (h, t) = (contours.last().first(), + contours.last().last()) + if a == t { + contours.last().push(b) + segments.remove(i) + found = true + } else if b == t { + contours.last().push(a) + segments.remove(i) + found = true + } else if a == h { + contours.last().insert(0, b) + segments.remove(i) + found = true + } else if b == h { + contours.last().insert(0, a) + segments.remove(i) + found = true + } else { + i += 1 + } + } + + // Insert the next contour + if not found { + contours.push(segments.remove(0)) + } + + // Check limit + assert(contours.len() <= contour-limit, + message: "Countour limit reached! Raise contour-limit if you " + + "think this is not an error") + } + + return contours +} + +// Prepare line data +#let _prepare(self, ctx) = { + let (x, y) = (ctx.x, ctx.y) + + self.contours = self.contours.map(c => { + c.stroke-paths = util.compute-stroke-paths(c.line-data, + (x.min, y.min), (x.max, y.max)) + + if self.fill { + c.fill-paths = util.compute-fill-paths(c.line-data, + (x.min, y.min), (x.max, y.max)) + } + return c + }) + + return self +} + +// Stroke line data +#let _stroke(self, ctx) = { + for c in self.contours { + for p in c.stroke-paths { + draw.line(..p, fill: none, close: p.first() == p.last()) + } + } +} + +// Fill line data +#let _fill(self, ctx) = { + if not self.fill { return } + for c in self.contours { + for p in c.fill-paths { + draw.line(..p, stroke: none, close: p.first() == p.last()) + } + } +} + +/// Add a contour plot of a sampled function or a matrix. +/// +/// #example(``` +/// cetz.plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// cetz.plot.add-contour(x-domain: (-3, 3), y-domain: (-3, 3), +/// style: (fill: rgb(50,50,250,50)), +/// fill: true, +/// op: "<", // Find contours where data < z +/// z: (2.5, 2, 1), // Z values to find contours for +/// (x, y) => calc.sqrt(x * x + y * y)) +/// }) +/// ```) +/// +/// - data (array, function): A function of the signature `(x, y) => z` +/// or an array of arrays of floats (a matrix) where the first +/// index is the row and the second index is the column. +/// - z (float, array): Z values to plot. Contours containing values +/// above z (z >= 0) or below z (z < 0) get plotted. +/// If you specify multiple z values, they get plotted in the order of specification. +/// - x-domain (domain): X axis domain used if `data` is a function, that is the +/// domain inside the function gets sampled. +/// - y-domain (domain): Y axis domain used if `data` is a function, see `x-domain`. +/// - x-samples (int): X axis domain samples (2 < n). Note that contour finding +/// can be quite slow. Using a big sample count can improve accuracy but can +/// also lead to bad compilation performance. +/// - y-samples (int): Y axis domain samples (2 < n) +/// - interpolate (bool): Use linear interpolation between sample values which can +/// improve the resulting plot, especially if the contours are curved. +/// - op (auto,string,function): Z value comparison oparator: +/// / `">", ">=", "<", "<=", "!=", "=="`: Use the operator for comparison of `z` to +/// the values from `data`. +/// / `auto`: Use ">=" for positive z values, "<=" for negative z values. +/// / ``: Call comparison function of the format `(plot-z, data-z) => boolean`, +/// where `plot-z` is the z-value from the plots `z` argument and `data-z` +/// is the z-value of the data getting plotted. The function must return true +/// if at the combinations of arguments a contour is detected. +/// - fill (bool): Fill each contour +/// - style (style): Style to use for plotting, can be used with a palette function. Note +/// that all z-levels use the same style! +/// - axes (axes): Name of the axes to use for plotting. +/// - limit (int): Limit of contours to create per z value before the function panics +/// - label (none,content): Plot legend label to show. The legend preview for +/// contour plots is a little rectangle drawn with the contours style. +#let add-contour(data, + label: none, + z: (1,), + x-domain: (0, 1), + y-domain: (0, 1), + x-samples: 25, + y-samples: 25, + interpolate: true, + op: auto, + axes: ("x", "y"), + style: (:), + fill: false, + limit: 50, + ) = { + // Sample a x/y function + if type(data) == function { + data = sample.sample-fn2(data, + x-domain, y-domain, + x-samples, y-samples) + } + + // Find matrix dimensions + assert(type(data) == array) + let (x-min, x-max) = x-domain + let dx = (x-max - x-min) / (data.at(0).len() - 1) + let (y-min, y-max) = y-domain + let dy = (y-max - y-min) / (data.len() - 1) + + let contours = () + let z = if type(z) == array { z } else { (z,) } + for z in z { + for contour in find-contours(data, z, op: op, interpolate: interpolate, contour-limit: limit) { + let line-data = contour.map(pt => { + (pt.at(0) * dx + x-min, + pt.at(1) * dy + y-min) + }) + + contours.push(( + z: z, + line-data: line-data, + )) + } + } + + return (( + type: "contour", + label: label, + contours: contours, + axes: axes, + x-domain: x-domain, + y-domain: y-domain, + style: style, + fill: fill, + mark: none, + mark-style: none, + plot-prepare: _prepare, + plot-stroke: _stroke, + plot-fill: _fill, + plot-legend-preview: self => { + if not self.fill { self.style.fill = none } + draw.rect((0,0), (1,1), ..self.style) + } + ),) +} diff --git a/src/plot/errorbar.typ b/src/plot/errorbar.typ new file mode 100644 index 0000000..e8ec68c --- /dev/null +++ b/src/plot/errorbar.typ @@ -0,0 +1,118 @@ +#import "/src/cetz.typ": draw, util, vector + +#let _draw-whisker(pt, dir, ..style) = { + let a = vector.add(pt, vector.scale(dir, -1)) + let b = vector.add(pt, vector.scale(dir, +1)) + + draw.line(a, b, ..style) +} + +#let draw-errorbar(pt, x, y, x-whisker-size, y-whisker-size, style) = { + if type(x) != array { x = (-x, x) } + if type(y) != array { y = (-y, y) } + + let (x-min, x-max) = x + let x-min-pt = vector.add(pt, (x-min, 0)) + let x-max-pt = vector.add(pt, (x-max, 0)) + if x-min != 0 or x-max != 0 { + draw.line(x-min-pt, x-max-pt, ..style) + if x-whisker-size > 0 { + if x-min != 0 { + _draw-whisker(x-min-pt, (0, x-whisker-size), ..style) + } + if x-max != 0 { + _draw-whisker(x-max-pt, (0, x-whisker-size), ..style) + } + } + } + + let (y-min, y-max) = y + let y-min-pt = vector.add(pt, (0, y-min)) + let y-max-pt = vector.add(pt, (0, y-max)) + if y-min != 0 or y-max != 0 { + draw.line(y-min-pt, y-max-pt, ..style) + if y-whisker-size > 0 { + if y-min != 0 { + _draw-whisker(y-min-pt, (y-whisker-size, 0), ..style) + } + if y-max != 0 { + _draw-whisker(y-max-pt, (y-whisker-size, 0), ..style) + } + } + } +} + +#let _prepare(self, ctx) = { + return self +} + +#let _stroke(self, ctx) = { + let x-whisker-size = self.whisker-size * ctx.y-scale + let y-whisker-size = self.whisker-size * ctx.x-scale + + draw-errorbar((self.x, self.y), + self.x-error, self.y-error, + x-whisker-size, y-whisker-size, + self.style) +} + +/// Add x- and/or y-error bars +/// +/// - pt (tuple): Error-bar center coordinate tuple: `(x, y)` +/// - x-error: (float,tuple): Single error or tuple of errors along the x-axis +/// - y-error: (float,tuple): Single error or tuple of errors along the y-axis +/// - mark: (none,string): Mark symbol to show at the error position (`pt`). +/// - mark-size: (number): Size of the mark symbol. +/// - mark-style: (style): Extra style to apply to the mark symbol. +/// - whisker-size (float): Width of the error bar whiskers in canvas units. +/// - style (dictionary): Style for the error bars +/// - label: (none,content): Label to tsh +/// - axes (axes): Plot axes. To draw a horizontal growing bar chart, you can swap the x and y axes. +#let add-errorbar(pt, + x-error: 0, + y-error: 0, + label: none, + mark: "o", + mark-size: .2, + mark-style: (:), + whisker-size: .5, + style: (:), + axes: ("x", "y")) = { + assert(x-error != 0 or y-error != 0, + message: "Either x-error or y-error must be set.") + + let (x, y) = pt + + if type(x-error) != array { + x-error = (x-error, x-error) + } + if type(y-error) != array { + y-error = (y-error, y-error) + } + + x-error.at(0) = calc.abs(x-error.at(0)) * -1 + y-error.at(0) = calc.abs(y-error.at(0)) * -1 + + let x-domain = x-error.map(v => v + x) + let y-domain = y-error.map(v => v + y) + + return (( + type: "errorbar", + label: label, + axes: axes, + data: ((x,y),), + x: x, + y: y, + x-error: x-error, + y-error: y-error, + x-domain: x-domain, + y-domain: y-domain, + mark: mark, + mark-size: mark-size, + mark-style: mark-style, + whisker-size: whisker-size, + style: style, + plot-prepare: _prepare, + plot-stroke: _stroke, + ),) +} diff --git a/src/plot/legend.typ b/src/plot/legend.typ new file mode 100644 index 0000000..a8963d3 --- /dev/null +++ b/src/plot/legend.typ @@ -0,0 +1,179 @@ +#import "/src/cetz.typ" +#import cetz: draw, styles + +#import "mark.typ": draw-mark-shape + +#let default-style = ( + orientation: ttb, + default-position: "legend.north-east", + layer: 1, // Legend layer + fill: rgb(255,255,255,200), // Legend background + stroke: black, // Legend border + padding: .1, // Legend border padding + offset: (0, 0), // Legend displacement + spacing: .1, // Spacing between anchor and legend + item: ( + radius: 0, + spacing: .05, // Spacing between items + preview: ( + width: .75, // Preview width + height: .3, // Preview height + margin: .1 // Distance between preview and label + ) + ), + radius: 0, +) + +// Map position to legend group anchor +#let auto-group-anchor = ( + inner-north-west: "north-west", + inner-north: "north", + inner-north-east: "north-east", + inner-south-west: "south-west", + inner-south: "south", + inner-south-east: "south-east", + inner-west: "west", + inner-east: "east", + north-west: "north-east", + north: "south", + north-east: "north-west", + south-west: "south-east", + south: "north", + south-east: "south-west", + east: "west", + west: "east", +) + +// Generate legend positioning anchors +#let add-legend-anchors(style, element, size) = { + import draw: * + let (w, h) = size + let (xo, yo) = { + let spacing = style.at("spacing", default: (0, 0)) + if type(spacing) == array { + spacing + } else { + (spacing, spacing) + } + } + + anchor("north", (rel: (w / 2, yo), to: (element + ".north", "-|", element + ".origin"))) + anchor("south", (rel: (w / 2, -yo), to: (element + ".south", "-|", element + ".origin"))) + anchor("east", (rel: (xo, h / 2), to: (element + ".east", "|-", element + ".origin"))) + anchor("west", (rel: (-xo, h / 2), to: (element + ".west", "|-", element + ".origin"))) + anchor("north-east", (rel: (xo, h), to: (element + ".north-east", "|-", element + ".origin"))) + anchor("north-west", (rel: (-xo, h), to: (element + ".north-west", "|-", element + ".origin"))) + anchor("south-east", (rel: (xo, 0), to: (element + ".south-east", "|-", element + ".origin"))) + anchor("south-west", (rel: (-xo, 0), to: (element + ".south-west", "|-", element + ".origin"))) + anchor("inner-north", (rel: (w / 2, h - yo), to: element + ".origin")) + anchor("inner-north-east", (rel: (w - xo, h - yo), to: element + ".origin")) + anchor("inner-north-west", (rel: (yo, h - yo), to: element + ".origin")) + anchor("inner-south", (rel: (w / 2, yo), to: element + ".origin")) + anchor("inner-south-east", (rel: (w - xo, yo), to: element + ".origin")) + anchor("inner-south-west", (rel: (xo, yo), to: element + ".origin")) + anchor("inner-east", (rel: (w - xo, h / 2), to: element + ".origin")) + anchor("inner-west", (rel: (xo, h / 2), to: element + ".origin")) +} + +// Draw a generic item preview +#let draw-generic-preview(item) = { + import draw: * + + if item.at("fill", default: false) { + rect((0,0), (1,1), ..item.style) + } else { + line((0,.5), (1,.5), ..item.style) + } +} + +// Draw a legend box at position relative to anchor of plot-element +#let draw-legend(ctx, style, items, size, plot, position, anchor) = { + let style = styles.resolve( + ctx.style, merge: style, base: default-style, root: "legend") + assert(style.orientation in (ttb, ltr), + message: "Unsupported legend orientation.") + + if position == auto { + position = style.default-position + } + + // Create legend anchors + draw.group(name: "legend", { + add-legend-anchors(style, plot, size) + }) + + // Try finding an optimal legend anchor + let anchor = if type(position) == str and anchor == auto { + auto-group-anchor.at(position.replace("legend.", ""), default: "north-west") + } else { + anchor + } + + // Apply offset + if style.offset not in (none, (0,0)) { + position = (rel: style.offset, to: position) + } + + draw.on-layer(style.layer, { + draw.group(name: "legend", padding: style.padding, ctx => { + import draw: * + + set-origin(position) + anchor("default", (0,0)) + + let pt = (0, 0) + for (i, item) in items.enumerate() { + if item.label == none { continue } + let label = if item.label == auto { + $ f_(#i) $ + } else { item.label } + + group({ + anchor("default", (0,0)) + + let row-height = style.item.preview.height + let preview-width = style.item.preview.width + let preview-a = (0, -row-height / 2) + let preview-b = (preview-width, +row-height / 2) + let label-west = (preview-width + style.item.preview.margin, 0) + + // Draw item preview + let draw-preview = item.at("plot-legend-preview", + default: draw-generic-preview) + group({ + set-viewport(preview-a, preview-b, bounds: (1, 1, 0)) + (draw-preview)(item) + }) + + // Draw mark preview + let mark = item.at("mark", default: none) + if mark != none { + draw-mark-shape((preview-a, 50%, preview-b), + calc.min(style.item.preview.width / 2, item.mark-size), + mark, + item.mark-style) + } + + // Draw label + content(label-west, + align(left + horizon, label), + name: "label", anchor: "west") + }, name: "item", anchor: if style.orientation == ltr { "west" } else { "north-west" }) + + if style.orientation == ttb { + set-origin((rel: (0, -style.item.spacing), + to: "item.south-west")) + } else if style.orientation == ltr { + set-origin((rel: (style.item.spacing, 0), + to: "item.east")) + } + } + }, anchor: anchor) + }) + + // Fill legend background + draw.on-layer(style.layer - .5, { + draw.rect("legend.south-west", + "legend.north-east", fill: style.fill, stroke: style.stroke, radius: style.radius) + }) +} diff --git a/src/plot/line.typ b/src/plot/line.typ new file mode 100644 index 0000000..12b5c6c --- /dev/null +++ b/src/plot/line.typ @@ -0,0 +1,508 @@ +#import "/src/cetz.typ": draw + +#import "util.typ" +#import "sample.typ" + +// Transform points +// +// - data (array): Data points +// - line (str,dictionary): Line line +#let transform-lines(data, line) = { + let hvh-data(t) = { + if type(t) == ratio { + t = t / 1% + } + t = calc.max(0, calc.min(t, 1)) + + let pts = () + + let len = data.len() + for i in range(0, len) { + pts.push(data.at(i)) + + if i < len - 1 { + let (a, b) = (data.at(i), data.at(i+1)) + if t == 0 { + pts.push((a.at(0), b.at(1))) + } else if t == 1 { + pts.push((b.at(0), a.at(1))) + } else { + let x = a.at(0) + (b.at(0) - a.at(0)) * t + pts.push((x, a.at(1))) + pts.push((x, b.at(1))) + } + } + } + return pts + } + + if type(line) == str { + line = (type: line) + } + + let line-type = line.at("type", default: "linear") + assert(line-type in ("raw", "linear", "spline", "vh", "hv", "hvh")) + + // Transform data into line-data + let line-data = if line-type == "linear" { + return util.linearized-data(data, line.at("epsilon", default: 0)) + } else if line-type == "spline" { + return util.sampled-spline-data(data, + line.at("tension", default: .5), + line.at("samples", default: 15)) + } else if line-type == "vh" { + return hvh-data(0) + } else if line-type == "hv" { + return hvh-data(1) + } else if line-type == "hvh" { + return hvh-data(line.at("mid", default: .5)) + } else { + return data + } +} + +// Fill a plot by generating a fill path to y value `to` +#let fill-segments-to(segments, to) = { + for s in segments { + let low = calc.min(..s.map(v => v.at(0))) + let high = calc.max(..s.map(v => v.at(0))) + + let origin = (low, to) + let target = (high, to) + + draw.line(origin, ..s, target, stroke: none) + } +} + +// Fill a shape by generating a fill path for each segment +#let fill-shape(paths) = { + for p in paths { + draw.line(..p, stroke: none) + } +} + +// Prepare line data +#let _prepare(self, ctx) = { + let (x, y) = (ctx.x, ctx.y) + + // Generate stroke paths + self.stroke-paths = util.compute-stroke-paths(self.line-data, + (x.min, y.min), (x.max, y.max)) + + // Compute fill paths if filling is requested + self.hypograph = self.at("hypograph", default: false) + self.epigraph = self.at("epigraph", default: false) + self.fill = self.at("fill", default: false) + if self.hypograph or self.epigraph or self.fill { + self.fill-paths = util.compute-fill-paths(self.line-data, + (x.min, y.min), (x.max, y.max)) + } + + return self +} + +// Stroke line data +#let _stroke(self, ctx) = { + let (x, y) = (ctx.x, ctx.y) + + for p in self.stroke-paths { + draw.line(..p, fill: none) + } +} + +// Fill line data +#let _fill(self, ctx) = { + let (x, y) = (ctx.x, ctx.y) + + if self.hypograph { + fill-segments-to(self.fill-paths, y.min) + } + if self.epigraph { + fill-segments-to(self.fill-paths, y.max) + } + if self.fill { + if self.at("fill-type", default: "axis") == "shape" { + fill-shape(self.fill-paths) + } else { + fill-segments-to(self.fill-paths, + calc.max(calc.min(y.max, 0), y.min)) + } + } +} + +/// Add data to a plot environment. +/// +/// Note: You can use this for scatter plots by setting +/// the stroke style to `none`: `add(..., style: (stroke: none))`. +/// +/// Must be called from the body of a `plot(..)` command. +/// +/// - domain (domain): Domain of `data`, if `data` is a function. Has no effect +/// if `data` is not a function. +/// - hypograph (bool): Fill hypograph; uses the `hypograph` style key for +/// drawing +/// - epigraph (bool): Fill epigraph; uses the `epigraph` style key for +/// drawing +/// - fill (bool): Fill the shape of the plot +/// - fill-type (string): Fill type: +/// / `"axis"`: Fill the shape to y = 0 +/// / `"shape"`: Fill the complete shape +/// - samples (int): Number of times the `data` function gets called for +/// sampling y-values. Only used if `data` is of type function. This parameter gets +/// passed onto `sample-fn`. +/// - sample-at (array): Array of x-values the function gets sampled at in addition +/// to the default sampling. This parameter gets passed to `sample-fn`. +/// - line (string, dictionary): Line type to use. The following types are +/// supported: +/// / `"linear"`: Draw linear lines between points +/// / `"spline"`: Calculate a Catmull-Rom through all points +/// / `"vh"`: Move vertical and then horizontal +/// / `"hv"`: Move horizontal and then vertical +/// / `"hvh"`: Add a vertical step in the middle +/// / `"raw"`: Like linear, but without linearization taking place. This is +/// meant as a "fallback" for either bad performance or bugs. +/// +/// If the value is a dictionary, the type must be +/// supplied via the `type` key. The following extra +/// attributes are supported: +/// / `"samples" `: Samples of splines +/// / `"tension" `: Tension of splines +/// / `"mid" `: Mid-Point of hvh lines (0 to 1) +/// / `"epsilon" `: Linearization slope epsilon for +/// use with `"linear"`, defaults to 0. +/// +/// #example(``` +/// import cetz.plot +/// let points(offset: 0) = ((0,0), (1,1), (2,0), (3,1), (4,0)).map(((x,y)) => { +/// (x,y + offset * 1.5) +/// }) +/// plot.plot(size: (12, 3), axis-style: none, { +/// plot.add(points(offset: 5), line: (type: "hvh", mid: .1)) +/// plot.add(points(offset: 4), line: "hvh") +/// plot.add(points(offset: 3), line: "hv") +/// plot.add(points(offset: 2), line: "vh") +/// plot.add(points(offset: 1), line: "spline") +/// plot.add(points(offset: 0), line: "linear") +/// }) +/// ```, vertical: true) +/// +/// - style (style): Style to use, can be used with a `palette` function +/// - axes (axes): Name of the axes to use for plotting. Reversing the axes +/// means rotating the plot by 90 degrees. +/// - mark (string): Mark symbol to place at each distinct value of the +/// graph. Uses the `mark` style key of `style` for drawing. +/// - mark-size (float): Mark size in cavas units +/// - data (array,function): Array of 2D data points (numeric) or a function +/// of the form `x => y`, where `x` is a value in `domain` +/// and `y` must be numeric or a 2D vector (for parametric functions). +/// #example(``` +/// import cetz.plot +/// plot.plot(size: (2, 2), axis-style: none, { +/// // Using an array of points: +/// plot.add(((0,0), (calc.pi/2,1), +/// (1.5*calc.pi,-1), (2*calc.pi,0))) +/// // Sampling a function: +/// plot.add(domain: (0, 2*calc.pi), calc.sin) +/// }) +/// ```) +/// - label (none,content): Legend label to show for this plot. +#let add(domain: auto, + hypograph: false, + epigraph: false, + fill: false, + fill-type: "axis", + style: (:), + mark: none, + mark-size: .2, + mark-style: (:), + samples: 50, + sample-at: (), + line: "linear", + axes: ("x", "y"), + label: none, + data + ) = { + // If data is of type function, sample it + if type(data) == function { + data = sample.sample-fn(data, domain, samples, sample-at: sample-at) + } + + // Transform data + let line-data = transform-lines(data, line) + + // Get x-domain + let x-domain = ( + calc.min(..line-data.map(t => t.at(0))), + calc.max(..line-data.map(t => t.at(0))) + ) + + // Get y-domain + let y-domain = if line-data != none {( + calc.min(..line-data.map(t => t.at(1))), + calc.max(..line-data.map(t => t.at(1))) + )} + + (( + type: "line", + label: label, + data: data, /* Raw data */ + line-data: line-data, /* Transformed data */ + axes: axes, + x-domain: x-domain, + y-domain: y-domain, + epigraph: epigraph, + hypograph: hypograph, + fill: fill, + fill-type: fill-type, + style: style, + mark: mark, + mark-size: mark-size, + mark-style: mark-style, + plot-prepare: _prepare, + plot-stroke: _stroke, + plot-fill: _fill, + plot-legend-preview: self => { + if self.fill or self.epigraph or self.hypograph { + draw.rect((0,0), (1,1), ..self.style) + } else { + draw.line((0,.5), (1,.5), ..self.style) + } + } + ),) +} + +/// Add horizontal lines at one or more y-values. Every lines start and end points +/// are at their axis bounds. +/// +/// #example(``` +/// cetz.plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// cetz.plot.add(domain: (0, 4*calc.pi), calc.sin) +/// // Add 3 horizontal lines +/// cetz.plot.add-hline(-.5, 0, .5) +/// }) +/// ```) +/// +/// - ..y (float): Y axis value(s) to add a line at +/// - min (auto,float): X axis minimum value or auto to take the axis minimum +/// - max (auto,float): X axis maximum value or auto to take the axis maximum +/// - axes (array): Name of the axes to use for plotting +/// - style (style): Style to use, can be used with a palette function +/// - label (none,content): Legend label to show for this plot. +#let add-hline(..y, + min: auto, + max: auto, + axes: ("x", "y"), + style: (:), + label: none, + ) = { + assert(y.pos().len() >= 1, + message: "Specify at least one y value") + assert(y.named().len() == 0) + + let prepare(self, ctx) = { + let (x-min, x-max) = (ctx.x.min, ctx.x.max) + let (y-min, y-max) = (ctx.y.min, ctx.y.max) + let x-min = if min == auto { x-min } else { min } + let x-max = if max == auto { x-max } else { max } + + self.lines = self.y.filter(y => y >= y-min and y <= y-max) + .map(y => ((x-min, y), (x-max, y))) + return self + } + + let stroke(self, ctx) = { + for (a, b) in self.lines { + draw.line(a, b, fill: none) + } + } + + let x-min = if min == auto { none } else { min } + let x-max = if max == auto { none } else { max } + + (( + type: "hline", + label: label, + y: y.pos(), + x-domain: (x-min, x-max), + y-domain: (calc.min(..y.pos()), calc.max(..y.pos())), + axes: axes, + style: style, + plot-prepare: prepare, + plot-stroke: stroke, + ),) +} + +/// Add vertical lines at one or more x-values. Every lines start and end points +/// are at their axis bounds. +/// +/// #example(``` +/// cetz.plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// cetz.plot.add(domain: (0, 2*calc.pi), calc.sin) +/// // Add 3 vertical lines +/// cetz.plot.add-vline(calc.pi/2, calc.pi, 3*calc.pi/2) +/// }) +/// ```) +/// +/// - ..x (float): X axis values to add a line at +/// - min (auto,float): Y axis minimum value or auto to take the axis minimum +/// - max (auto,float): Y axis maximum value or auto to take the axis maximum +/// - axes (array): Name of the axes to use for plotting, note that not all +/// plot styles are able to display a custom axis! +/// - style (style): Style to use, can be used with a palette function +/// - label (none,content): Legend label to show for this plot. +#let add-vline(..x, + min: auto, + max: auto, + axes: ("x", "y"), + style: (:), + label: none, + ) = { + assert(x.pos().len() >= 1, + message: "Specify at least one x value") + assert(x.named().len() == 0) + + let prepare(self, ctx) = { + let (x-min, x-max) = (ctx.x.min, ctx.x.max) + let (y-min, y-max) = (ctx.y.min, ctx.y.max) + let y-min = if min == auto { y-min } else { min } + let y-max = if max == auto { y-max } else { max } + + self.lines = self.x.filter(x => x >= x-min and x <= x-max) + .map(x => ((x, y-min), (x, y-max))) + return self + } + + let stroke(self, ctx) = { + for (a, b) in self.lines { + draw.line(a, b, fill: none) + } + } + + let y-min = if min == auto { none } else { min } + let y-max = if max == auto { none } else { max } + + (( + type: "vline", + label: label, + x: x.pos(), + x-domain: (calc.min(..x.pos()), calc.max(..x.pos())), + y-domain: (y-min, y-max), + axes: axes, + style: style, + plot-prepare: prepare, + plot-stroke: stroke + ),) +} + +/// Fill the area between two graphs. This behaves same as `add` but takes +/// a pair of data instead of a single data array/function. +/// The area between both function plots gets filled. For a more detailed +/// explanation of the arguments, see @@add(). +/// +/// This can be used to display an error-band of a function. +/// +/// #example(``` +/// cetz.plot.plot(size: (2,2), x-tick-step: none, y-tick-step: none, { +/// cetz.plot.add-fill-between(domain: (0, 2*calc.pi), +/// calc.sin, // First function/data +/// calc.cos) // Second function/data +/// }) +/// ```) +/// +/// - domain (domain): Domain of both `data-a` and `data-b`. The domain is used for +/// sampling functions only and has no effect on data arrays. +/// - samples (int): Number of times the `data-a` and `data-b` function gets called for +/// sampling y-values. Only used if `data-a` or `data-b` is of +/// type function. +/// - sample-at (array): Array of x-values the function(s) get sampled at in addition +/// to the default sampling. +/// - line (string, dictionary): Line type to use, see @@add(). +/// - style (style): Style to use, can be used with a palette function. +/// - label (none,content): Legend label to show for this plot. +/// - axes (array): Name of the axes to use for plotting. +/// - data-a (array,function): Data of the first plot, see @@add(). +/// - data-b (array,function): Data of the second plot, see @@add(). +#let add-fill-between(data-a, + data-b, + domain: auto, + samples: 50, + sample-at: (), + line: "linear", + axes: ("x", "y"), + label: none, + style: (:)) = { + // If data is of type function, sample it + if type(data-a) == function { + data-a = sample.sample-fn(data-a, domain, samples, sample-at: sample-at) + } + if type(data-b) == function { + data-b = sample.sample-fn(data-b, domain, samples, sample-at: sample-at) + } + + // Transform data + let line-a-data = transform-lines(data-a, line) + let line-b-data = transform-lines(data-b, line) + + // Get x-domain + let x-domain = ( + calc.min(..line-a-data.map(t => t.at(0)), + ..line-b-data.map(t => t.at(0))), + calc.max(..line-a-data.map(t => t.at(0)), + ..line-b-data.map(t => t.at(0))) + ) + + // Get y-domain + let y-domain = if line-a-data != none and line-b-data != none {( + calc.min(..line-a-data.map(t => t.at(1)), + ..line-b-data.map(t => t.at(1))), + calc.max(..line-a-data.map(t => t.at(1)), + ..line-b-data.map(t => t.at(1))) + )} + + let prepare(self, ctx) = { + let (x, y) = (ctx.x, ctx.y) + + // Generate stroke paths + self.stroke-paths = ( + a: util.compute-stroke-paths(self.line-data.a, + (x.min, y.min), (x.max, y.max)), + b: util.compute-stroke-paths(self.line-data.b, + (x.min, y.min), (x.max, y.max)) + ) + + // Generate fill paths + self.fill-paths = util.compute-fill-paths(self.line-data.a + self.line-data.b.rev(), + (x.min, y.min), (x.max, y.max)) + + return self + } + + let stroke(self, ctx) = { + for p in self.stroke-paths.a { + draw.line(..p, fill: none) + } + for p in self.stroke-paths.b { + draw.line(..p, fill: none) + } + } + + let fill(self, ctx) = { + fill-shape(self.fill-paths) + } + + (( + type: "fill-between", + label: label, + axes: axes, + line-data: (a: line-a-data, b: line-b-data), + x-domain: x-domain, + y-domain: y-domain, + style: style, + plot-prepare: prepare, + plot-stroke: stroke, + plot-fill: fill, + plot-legend-preview: self => { + draw.rect((0,0), (1,1), ..self.style) + } + ),) +} diff --git a/src/plot/mark.typ b/src/plot/mark.typ new file mode 100644 index 0000000..c617eec --- /dev/null +++ b/src/plot/mark.typ @@ -0,0 +1,51 @@ +#import "/src/cetz.typ": draw + +// Draw mark at point with size +#let draw-mark-shape(pt, size, mark, style) = { + let (sx, sy) = if type(size) != array { + (size, size) + } else { size } + + let bl(pt) = (rel: (-sx/2, -sy/2), to: pt) + let br(pt) = (rel: (sx/2, -sy/2), to: pt) + let tl(pt) = (rel: (-sx/2, sy/2), to: pt) + let tr(pt) = (rel: (sx/2, sy/2), to: pt) + let ll(pt) = (rel: (-sx/2, 0), to: pt) + let rr(pt) = (rel: (sx/2, 0), to: pt) + let tt(pt) = (rel: (0, sy/2), to: pt) + let bb(pt) = (rel: (0, -sy/2), to: pt) + + if mark == "o" { + draw.circle(pt, radius: (sx/2, sy/2), ..style) + } else if mark == "square" { + draw.rect(bl(pt), tr(pt), ..style) + } else if mark == "triangle" { + draw.line(bl(pt), br(pt), tt(pt), close: true, ..style) + } else if mark == "*" or mark == "x" { + draw.line(bl(pt), tr(pt), ..style) + draw.line(tl(pt), br(pt), ..style) + } else if mark == "+" { + draw.line(ll(pt), rr(pt), ..style); + draw.line(tt(pt), bb(pt), ..style) + } else if mark == "-" { + draw.line(ll(pt), rr(pt), ..style) + } else if mark == "|" { + draw.line(tt(pt), bb(pt), ..style) + } +} + +#let draw-mark(pts, x, y, mark, mark-size, plot-size) = { + // Scale marks back to canvas scaling + let (sx, sy) = plot-size + sx = (x.max - x.min) / sx + sy = (y.max - y.min) / sy + sx *= mark-size + sy *= mark-size + + for pt in pts { + let (px, py, ..) = pt + if px >= x.min and px <= x.max and py >= y.min and py <= y.max { + draw-mark-shape(pt, (sx, sy), mark, (:)) + } + } +} diff --git a/src/plot/sample.typ b/src/plot/sample.typ new file mode 100644 index 0000000..3ad881d --- /dev/null +++ b/src/plot/sample.typ @@ -0,0 +1,79 @@ +/// Sample the given single parameter function `samples` times, with values +/// evenly spaced within the range given by `domain` and return each +/// sampled `y` value in an array as `(x, y)` tuple. +/// +/// If the functions first return value is a tuple `(x, y)`, then all return values +/// must be a tuple. +/// +/// - fn (function): Function to sample of the form `(x) => y` or `(t) => (x, y)`, where +/// `x` or `t` are `float` values within the domain specified by `domain`. +/// - domain (domain): Domain of `fn` used as bounding interval for the sampling points. +/// - samples (int): Number of samples in domain. +/// - sample-at (array): List of x values the function gets sampled at in addition +/// to the `samples` number of samples. Values outsides the +/// specified domain are legal. +/// -> array: Array of (x, y) tuples +#let sample-fn(fn, domain, samples, sample-at: ()) = { + assert(samples + sample-at.len() >= 2, + message: "You must at least sample 2 values") + assert(type(domain) == array and domain.len() == 2, + message: "Domain must be a tuple") + + let (lo, hi) = domain + + let y0 = (fn)(lo) + let is-vector = type(y0) == array + if not is-vector { + y0 = ((lo, y0), ) + } else { + y0 = (y0, ) + } + + let pts = sample-at + range(0, samples).map(t => lo + t / (samples - 1) * (hi - lo)) + pts = pts.sorted() + + return pts.map(x => { + if is-vector { + (fn)(x) + } else { + (x, (fn)(x)) + } + }) +} + +/// Samples the given two parameter function with `x-samples` and +/// `y-samples` values evenly spaced within the range given by +/// `x-domain` and `y-domain` and returns each sampled output in +/// an array. +/// +/// - fn (function): Function of the form `(x, y) => z` with all values being numbers. +/// - x-domain (domain): Domain used as bounding interval for sampling point's x +/// values. +/// - y-domain (domain): Domain used as bounding interval for sampling point's y +/// values. +/// - x-samples (int): Number of samples in the x-domain. +/// - y-samples (int): Number of samples in the y-domain. +/// -> array: Array of z scalars +#let sample-fn2(fn, x-domain, y-domain, x-samples, y-samples) = { + assert(x-samples >= 2, + message: "You must at least sample 2 x-values") + assert(y-samples >= 2, + message: "You must at least sample 2 y-values") + assert(type(x-domain) == array and x-domain.len() == 2, + message: "X-Domain must be a tuple") + assert(type(y-domain) == array and y-domain.len() == 2, + message: "Y-Domain must be a tuple") + + let (x-min, x-max) = x-domain + let (y-min, y-max) = y-domain + let y-pts = range(0, y-samples) + let x-pts = range(0, x-samples) + + return y-pts.map(y => { + let y = y / (y-samples - 1) * (y-max - y-min) + y-min + return x-pts.map(x => { + let x = x / (x-samples - 1) * (x-max - x-min) + x-min + return float((fn)(x, y)) + }) + }) +} diff --git a/src/plot/util.typ b/src/plot/util.typ new file mode 100644 index 0000000..a06df26 --- /dev/null +++ b/src/plot/util.typ @@ -0,0 +1,350 @@ +#import "/src/cetz.typ" +#import cetz.util: bezier + +/// Clip line-strip in rect +/// +/// - points (array): Array of vectors representing a line-strip +/// - low (vector): Lower clip-window coordinate +/// - high (vector): Upper clip-window coordinate +/// -> array List of line-strips representing the paths insides the clip-window +#let clipped-paths(points, low, high, fill: false) = { + let (min-x, max-x) = (calc.min(low.at(0), high.at(0)), + calc.max(low.at(0), high.at(0))) + let (min-y, max-y) = (calc.min(low.at(1), high.at(1)), + calc.max(low.at(1), high.at(1))) + + let in-rect(pt) = { + return (pt.at(0) >= min-x and pt.at(0) <= max-x and + pt.at(1) >= min-y and pt.at(1) <= max-y) + } + + let interpolated-end(a, b) = { + if in-rect(a) and in-rect(b) { + return b + } + + let (x1, y1, ..) = a + let (x2, y2, ..) = b + + if x2 - x1 == 0 { + return (x2, calc.min(max-y, calc.max(y2, min-y))) + } + + if y2 - y1 == 0 { + return (calc.min(max-x, calc.max(x2, min-x)), y2) + } + + let m = (y2 - y1) / (x2 - x1) + let n = y2 - m * x2 + + let x = x2 + let y = y2 + + y = calc.min(max-y, calc.max(y, min-y)) + x = (y - n) / m + + x = calc.min(max-x, calc.max(x, min-x)) + y = m * x + n + + return (x, y) + } + + // Append path to paths and return paths + // + // If path starts or ends with a vector of another part, merge those + // paths instead appending path as a new path. + let append-path(paths, path) = { + if path.len() <= 1 { + return paths + } + + let cmp(a, b) = { + return a.map(calc.round.with(digits: 8)) == b.map(calc.round.with(digits: 8)) + } + + let added = false + for i in range(0, paths.len()) { + let p = paths.at(i) + if cmp(p.first(), path.last()) { + paths.at(i) = path + p + added = true + } else if cmp(p.first(), path.first()) { + paths.at(i) = path.rev() + p + added = true + } else if cmp(p.last(), path.first()) { + paths.at(i) = p + path + added = true + } else if cmp(p.last(), path.last()) { + paths.at(i) = p + path.rev() + added = true + } + if added { break } + } + + if not added { + paths.push(path) + } + return paths + } + + let clamped-pt(pt) = { + return (calc.max(min-x, calc.min(pt.at(0), max-x)), + calc.max(min-y, calc.min(pt.at(1), max-y))) + } + + let paths = () + + let path = () + let prev = points.at(0) + let was-inside = in-rect(prev) + if was-inside { + path.push(prev) + } else if fill { + path.push(clamped-pt(prev)) + } + + for i in range(1, points.len()) { + let pt = points.at(i) + let is-inside = in-rect(pt) + + if is-inside { + if was-inside { + path.push(pt) + } else { + path.push(interpolated-end(pt, prev)) + path.push(pt) + } + } else { + if was-inside { + path.push(interpolated-end(prev, pt)) + } else { + let (a, b) = (interpolated-end(pt, prev), + interpolated-end(prev, pt)) + if in-rect(a) and in-rect(b) { + path.push(a) + path.push(b) + } else if fill { + path.push((calc.max(min-x, calc.min(pt.at(0), max-x)), + calc.max(min-y, calc.min(pt.at(1), max-y)))) + } + } + + if path.len() > 0 and not fill { + paths = append-path(paths, path) + path = () + } + } + + prev = pt + was-inside = is-inside + } + + // Append clamped last point if filling + if fill and not in-rect(prev) { + path.push(clamped-pt(prev)) + } + + if path.len() > 1 { + paths = append-path(paths, path) + } + + return paths +} + +/// Compute clipped stroke paths +/// +/// - points (array): X/Y data points +/// - low (vector): Lower clip-window coordinate +/// - high (vector): Upper clip-window coordinate +/// -> array List of stroke paths +#let compute-stroke-paths(points, low, high) = { + clipped-paths(points, low, high, fill: false) +} + +/// Compute clipped fill path +/// +/// - points (array): X/Y data points +/// - low (vector): Lower clip-window coordinate +/// - high (vector): Upper clip-window coordinate +/// -> array List of fill paths +#let compute-fill-paths(points, low, high) = { + clipped-paths(points, low, high, fill: true) +} + +/// Return points of a sampled catmull-rom through the +/// input points. +/// +/// - points (array): Array of input vectors +/// - tension (float): Catmull-Rom tension +/// - samples (int): Number of samples +/// -> array Array of vectors +#let sampled-spline-data(points, tension, samples) = { + assert(samples >= 1 and samples <= 100, + message: "Must at least use 1 sample per curve") + + let curves = bezier.catmull-to-cubic(points, tension) + let pts = () + for c in curves { + for t in range(0, samples + 1) { + let t = t / samples + pts.push(bezier.cubic-point(..c, t)) + } + } + return pts +} + +/// Simplify linear data by "detecting" linear sections +/// and skipping points until the slope changes. +/// This can have a huge impact on the number of lines +/// getting rendered. +/// +/// - data (array): Data points +/// - epsilon (float): Curvature threshold to treat data as linear +#let linearized-data(data, epsilon) = { + let pts = () + // Current slope, set to none if infinite + let dx = none + // Previous point, last skipped point + let prev = none + let skipped = none + // Current direction + let dir = 0 + + let len = data.len() + for i in range(0, len) { + let pt = data.at(i) + if prev != none and i < len - 1 { + let new-dir = pt.at(0) - prev.at(0) + if new-dir == 0 { + // Infinite slope + if dx != none { + if skipped != none {pts.push(skipped); skipped = none} + pts.push(pt) + } else { + skipped = pt + } + dx = none + } else { + // Push the previous and the current point + // if slope or direction changed + let new-dx = ((pt.at(1) - prev.at(1)) / new-dir) + if dx == none or calc.abs(new-dx - dx) > epsilon or (new-dir * dir) < 0 { + if skipped != none {pts.push(skipped); skipped = none} + pts.push(pt) + + dx = new-dx + dir = new-dir + } else { + skipped = pt + } + } + } else { + if skipped != none {pts.push(skipped); skipped = none} + pts.push(pt) + } + + prev = pt + } + + return pts +} + +// Get the default axis orientation +// depending on the axis name +#let get-default-axis-horizontal(name) = { + return lower(name).starts-with("x") +} + +// Setup axes dictionary +// +// - axis-dict (dictionary): Existing axis dictionary +// - options (dictionary): Named arguments +// - plot-size (tuple): Plot width, height tuple +#let setup-axes(ctx, axis-dict, options, plot-size) = { + import "/src/axes.typ" + + // Get axis option for name + let get-axis-option(axis-name, name, default) = { + let v = options.at(axis-name + "-" + name, default: default) + if v == auto { default } else { v } + } + + for (name, axis) in axis-dict { + if not "ticks" in axis { axis.ticks = () } + axis.label = get-axis-option(name, "label", $#name$) + + // Configure axis bounds + axis.min = get-axis-option(name, "min", axis.min) + axis.max = get-axis-option(name, "max", axis.max) + + assert(axis.min not in (none, auto) and + axis.max not in (none, auto), + message: "Axis min and max must be set.") + if axis.min == axis.max { + axis.min -= 1; axis.max += 1 + } + + // Configure axis orientation + axis.horizontal = get-axis-option(name, "horizontal", + get-default-axis-horizontal(name)) + + // Configure ticks + axis.ticks.list = get-axis-option(name, "ticks", ()) + axis.ticks.step = get-axis-option(name, "tick-step", axis.ticks.step) + axis.ticks.minor-step = get-axis-option(name, "minor-tick-step", axis.ticks.minor-step) + axis.ticks.decimals = get-axis-option(name, "decimals", 2) + axis.ticks.unit = get-axis-option(name, "unit", []) + axis.ticks.format = get-axis-option(name, "format", axis.ticks.format) + + // Axis break + axis.show-break = get-axis-option(name, "break", false) + axis.inset = get-axis-option(name, "inset", (0, 0)) + + // Configure grid + axis.ticks.grid = get-axis-option(name, "grid", false) + + axis-dict.at(name) = axis + } + + // Set axis options round two, after setting + // axis bounds + for (name, axis) in axis-dict { + let changed = false + + // Configure axis aspect ratio + let equal-to = get-axis-option(name, "equal", none) + if equal-to != none { + assert.eq(type(equal-to), str, + message: "Expected axis name.") + assert(equal-to != name, + message: "Axis can not be equal to itself.") + + let other = axis-dict.at(equal-to, default: none) + assert(other != none, + message: "Other axis must exist.") + assert(other.horizontal != axis.horizontal, + message: "Equal axes must have opposing orientation.") + + let (w, h) = plot-size + let ratio = if other.horizontal { + h / w + } else { + w / h + } + axis.min = other.min * ratio + axis.max = other.max * ratio + + changed = true + } + + if changed { + axis-dict.at(name) = axis + } + } + + for (name, axis) in axis-dict { + axis-dict.at(name) = axes.prepare-axis(ctx, axis, name) + } + + return axis-dict +} diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..fe5a11a --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,3 @@ +**/out/* +**/diff/* +*.pdf diff --git a/tests/axes/ref/1.png b/tests/axes/ref/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf820d1eff243dd150c6ce0c584a35f46664d2e GIT binary patch literal 28029 zcmdqJc_5VS_dl*EN+w#QGAdF?_H1Kmr4VH;$-eLF*h#9f)F69EC4}sIwh%-15Mzz8 zB!kAj`(5{p?frb7&*%61eZK#FAM?1~*If5?o$H))o%1^9I(NSJGcRLp_D;c=k zx$L50lcF6Opzr>JhRwTOG;C6|Lj&~Pf6}mdw?hL&-+$1sdG~(}DGWvPQwKd6DXmu} z`Ir?WhA?d3M-Js>M?Bz;3^m^$d}!!(*;m^ZX&GrDHaY`aMbS#G{J5$J8KrR^@7(GvmaV_^FqKV^YYoh(LHkNp^l`hl3cy(KE#_g5Wi<(ik|dGPAqd zP58NYivYr}=%{Ap>bLra8koK`r6H)Rd5X~%zt^TB?Ws!H(f&m_w>r-wwK-`i-J|V7=1wo=hpE4~NG-Pzvz_uHp zmA=B05f>$e+?gLV=wvQ=pL!*gq|6as2c|fHB~+KLrQ{s1+QZn9`1gRo2ku|~i?lzl zJhpIjpzApqcB2AeiDk|#Y#fzQi953pips)1#M8w5Q3JVKMN~&Omhyw_HolCb4 zA3nU*LkBf9c^;pU@f=QSQ7y_?QLmhwn(~IXo91r3oGi`l>%T&e`Pu&PrRO?F-{1`{ z_s(VFsuEbm+3Phads&oIa$5l2=pk6)2>n=>)=t^2HHoht?&G2VxdIH6J0%LGFW zN5pqe7(NU$46}`%_&v%R5#KT1K+RQ`wP-rBPl(~rk@~0b3YZQhQX70w&)}VeLDX+! zfj1{K#2j?PC<5}o-hKLT5UT`3>N_7`YBw>wbM;ffS6zC1Uqbkt{fW{;6wvaLTWr%1b^>WmFeKX z#Ik_}U5N|wf}=yg;)p%G;GN*JMI|7V7Wtbdo8>Jfj<6`?>S&$JL%Z)@8`qCdu9vU6 z-ag&sd%Pwh@(#6UgvD2dvtrl9!t-mcN5qJTeLEl=|MS#e7d!HaWZNkQq2@3}(f7>q z<*);YjLJOH4^a+8Zfx?N#1KF{i3+d(6!m{?1pM4-#8WN*8RKqIH~Y%I&Sj3mN4V@s z{}Z9K`j`Q%Out))__H}A9yho$&d+VcU}dqK?LU>dNlE92I+obR^r=<}Z-@q>qM2t* z7$-kyLyO;ORHD@XyKQbXdi|*SRt{Vo#L>v!S=0BC*R2;2SoIBRURf-`hb3jSaf#(hZ z*L3d)zrd2uyMcr(c3F7D(Zqnj@XM1 zmx+mpBz27IKvPqI*;W_syW7|hU<#rt$A;k&eS3YPyu9}0s$ZTiC@vOYI7A>2ii(O3 zpRsC+c^wo)2rdc?q+Q}?X4ci$A9`en>g`2DPs3);IV<&z9*b(&kMIGsYIo7qm|(iP z-ZbmDyZ2_d{`{Gsn3R^Dz81}lulfGn&(BXrPVRG35*CXcKyk`}<&^`TW#FE_dGkiU zc%US^u#lbnWn|>Z4ZL-sMo%}y08$T{s&C(hMn;z1kOvX=qHu^)-c*3&opd}%Hb3SH zHg4{PK6}xatjL&{HD&}SeI2mreSJ*Cj@p#&M)(Z(fg%3s#YJIZc@a_3EcMj9CQAc@ zThH#Rs*YrHJG!2~cyUF9Rb2dWO1q$d!0g?JHob>fS#!}DB%%EPp z5c3Rexvi-9u}ieKx36LCD|0t9F}cH4TVMZd zM@!!}4%@PxKmV!Sbn0$4mh*+NrKQK@u}~RS?gttgvv|3?cWdPx9Ik9Kwj9<;Fu#2H zvW||9nwr|%7y`kD_gi)Ki_v4jwfdP4#JG*k%^4XPXCpmpSoeGHfh2YfS})!y4=gq$ zBxHTvqX{h)S6f#%6K!j2%gp8b>QzZmQSe<8XXnDw(!Mc!7p5C5{nxk(%gRtYRIVE2 zs{8x<&$+Di^hC=i*45V92s6G_vb3~3c<`X9nOO;UWJClTC+BLzV^h;))fAOu&$UkM z-&7}wrWZ6%mBhereM(A7skr-nK5B1m0Tjr{;1Luw6pT89blQ7a;oWoMM&X%QR80IU zM-O%~ARH{1xGkYg1eUS6V~HD|ct_I8?Jh(e-Bx30{}Z=5xDaqzxPVGekG0-)rz)C- z8ka?NO>$^RlGxlV&q!h=b0$}`rcV)PB<=$ivR2srD%^3Qo=bIWS6X-M#;(1xdy@Z3 z2hkEeeE~-ni5qvGi;XKUN0;@MqlIE@Jv?BWo47p3+k_Gf4oM1AhVL!+^}c%S$$-61 zT;aui#)tFX$2_R0hjmp*6d$~-*+<;+CWycWxSUEW$n5|)xXb5A zpFqxT_)M<6wU*h7kYP{FeHLIGJq^b%B4h!kc|-Q}nbKf?LC8}$a78E!($8)W^*>Nc z^lJbCZ2`iaiHX>AYhAnW!!D@111dmckA~ZZX1Bu&=a(X}kKF<`-L7+Z9H%yW} zcOnC@X`8Mc==$$q=iI*`p#L=r-sBJwNfG!@^p|xYV|1AG8jVi$>uvJ7C9dNKQ`3aU zARK}V0H&Vqye}hyW*Mjqwv+jFVPJ+n(Y^=yj3bS|Ua4Nv)$#9vrj7^zx+tG zVgY~W?9w#M?!jU?z7bbh(3pTbG=+4#`~1*%PZ>8Q+pD9%#H~i?Kw-&%C29&;&^@q) z#{b{c`2W9R3_I%ND?*AwD9els1v-baEy<8&hj_tu0Wn=RFFEyW-gI%D1_}m9suM)W z-O!#KU7yKdD#ZijzomtIMf3SWuG2o_^9_G>*%|SA&{xxXnBTvR;}zNKLu?D9n?iIm z;-Wd~Ll%D?)0P?OSZ~pBDmr!HqDyy6y|U9h1DNEwp|k~aPS{GiA_tR(VWe$UqMOUo z$o&~y)s;4vBWer6rPU|-4gQ)X(M`%f&y;ag0yInWVhN)uA%2veMRH511kN6lkdgV7 z^u<#~^&zXOb1uT7IXct`KgWEW!-k4Xm3JMdQrcpO(?z}a*usJr>I%3&OqdQ~y@W#^ zSLiG2l^KdgEKwPij)?v93y+of-n?#dL`3r{@hw?On~Aht@W7%q#W4_6@07}{1jJao zJDr*AAD_4$Joa|H<^6^}9kip50kaTd{~wdUW;Jv#el zLlnUvtEHjJH3i6`lFZEeFWJq^%*MyZm*m*@Bl_ZPBaSGj*Ay%!4DqmfytIqRdOaP* zSpi$xr>?+07orG$QRn;<$kHJYh;9IoVq?=g#$)6uw+&N`{`cD2+Qr4i+1c5?zP`yx z%Ut!;c2h{G#QlZ&l~~`{h<^DpIyM&7Ha0f)_pfy}_8ZCYd1N>)yfgWxLslL2GIH+$ zeQN#h5%ISjuf6oXQC@q^+QxdK{a!`s06w)SzI6hA@ONHIsaP|eDz0PPeE*>!03)C>OQ+J7fkDpAepo>tRLjmTnDHhgBuO*AGs`H!_Q1P@#;pLnQ^ z(aEfwTJY!j(mOd>0#8zwY1H@OK;}~qr_npqg2(h{`?1= zLARg9KJ_L7oyZ)$e)r|y?#WF7?0$O@ePoD_b1uD>`QvlT=7KoX6bK{$Qqj=&f?v4n zwFAtE3P417%~u#Q!RxJ87f=zx|sh(r$?zb{~i^)ChGq& z`_AOAE3Xx4PiNkv{XwPrsJQZJ%ws6y{JWgca?67v4ClAm$_iKxge@?57^{i zV2J(R*UI|Oz)(1XlfbDeNkmK|!3o+)=+oL5+d@3Dh+x+X9-2U|eq3-V8MF5T$lr@AjzE-$Jkbr^`BRMz)dBkA+d_em9FMnnd3%&z?7qx|H!ha92_Vkvymkyfkcz0?! z#0QS#6bVmsiksjLtWl8J%4rZi%QitVNt|JMNgKa)edo@&hr{7L?=Snea)5`ig+QIa^2vR<^xybPl{{5drequBM1>R5KQ!`ZyXE@)i z81gyR8E(}3Z|+ZEau+}3HL2gLLlZ7wHlq*7d`Lu0(5e(zU6_%^;$tHxpm>@X+?03i z1Qnz##CG~&+q@8m*&PaPK1+-?Na4#)7Xo$GjddpAwJ59Ercu(?xY+x9z2R>Xmb~sw zkLw;Ig@f5}rY;bzGcuZ+nx2BgOG--SgujCrcy)EPw>QQu%rjNhOj?@Al})pWLM0?5 z4B~J`Mn)j%-QC@-r>7TyM!%H4BP&Y{gQ?2gx_NU|C%vrf3>0&bVon}YJw2B5=k;xD z?mM=DxG^+z?(bjidRU9EF$*W>=TD!EO-y`qcWjy1`4g%iK74o^8|xr_>Cz<`cK<5f zdURr9;>wC^SV+azuzv-EYeRyAanqHdigR;wOxW@mPQW@+(x-T0aPT_2ilX8N1Z%jO zzLBM6nl!RT908Do?I9osqRZh&c6wN^tgK)#7%$%M<>g+Vmvh`5Q&Lj6@zz*w1a5Hf zkklP{`Lxv3)X$&I&CD)wa&oe$CpOd_hz{h%7%_b1&HPt@&8_X z$*kq)cEyYLAY`W{z2URLZz3Y@$<)5N7rvHNBOoT$^XuEomoEX>2yc4y=n;SvzP`TT zlwp5j+s2&Ly}Cv<3)_SJ_q8b@CCrAGwU}dOXLA&jK_w*jV@nBGbU+qwcey#yHGH0MGBQIrKL7q_OPTC;HOQ zMn**iD{*jeJm>~`_mjx7^4CAOFH-Y`C{|TfeNh5Qg)Dwa$&J+e`}glp1`Ofmc95R# zJS=i6t$3Fr~ zZaF_c{~<08$jU()#NBoK6pZpZcIl1-emFutgIw%Gk8D_&yc6jhNd(z`$qmn^QkH350brg}{5czyGh zu`m=)&%NDf2kHEq_XqtNE7G*2=EJqQt|j1UTtumn6YTw-C$!_VfXh zez>J${K~IunyK!Yj*{ns!fePeF<;~IzrIsyJ9m5U;TMS(MN~|pT?TPCI8tR%GEodA=Jd*FVLHk82|B93CV4j4&NdsD2%! znzM~z?C9FGu&zkO#N}^ypLIVfkdeq@x!d}8cnHTaaO=+N^NlL{lr=EyKu)Czsuh+9 z&mzZq;RE4WH;|wNfRcE@o}3 zYgMfm-CjbElSa8BJVB*m>`fi&1fL~?2N_bP#GJD5-Q0<_!79nDGG3> zaf>*qJR%zDB%9O<1C(3^Ezta^U4KCnf(9ayPqt{?B4o4gSp-ZrUa?REZJmM+gb(zE zC748~46z_8Qbh%>Nu<3_FmW;&1oJ`9%On2$&e1b9HPz86hnPT`7A=>in5qf@0H(TH z6oH_AUh(xSaW>M@A~g(*j1r5AT&=CG!8tZWCPb~+@&)xIW#-~DA2hh63re0B_*%On z)=JuXr4=2- zb1??#^xBS_(-S=XwW5^m%a<>jB2nOw8{gLrV)sc<0Z~y(n{0GcLJ_I$2#PLrj(X!s z&7k0+7t}52JnD275)nC>6_=l{w%I2*6pcpz1cx>W34!oeuU>(?{=~!tKt5UIMW6

Z6b$b598^nyCn_uUW4*xrwTTnR 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 Q0>*R9$oz1TfkWi~0Cmv59smFU literal 0 HcmV?d00001 diff --git a/tests/axes/test.typ b/tests/axes/test.typ new file mode 100644 index 0000000..e517c22 --- /dev/null +++ b/tests/axes/test.typ @@ -0,0 +1,59 @@ +#set page(width: auto, height: auto) +#import "/src/lib.typ": * +#import "/src/cetz.typ": * +#import "/tests/helper.typ": * + +// Schoolbook Axis Styling +#test-case({ + import draw: * + + set-style(axes: ( + stroke: blue, + padding: .25, + x: (stroke: red), + y: (stroke: green, tick: (stroke: blue, length: .3)) + )) + axes.school-book(size: (6, 6), + axes.axis(min: -1, max: 1, ticks: (step: 1, minor-step: auto, + grid: "both")), + axes.axis(min: -1, max: 1, ticks: (step: .5, minor-step: auto, + grid: "major"))) +}) + +// Scientific Axis Styling +#test-case({ + import draw: * + + set-style(axes: (stroke: blue)) + set-style(axes: (left: (tick: (stroke: green + 2pt)))) + set-style(axes: (bottom: (tick: (stroke: red, length: .5, + label: (angle: 90deg, + anchor: "east"))))) + set-style(axes: (right: (tick: (label: (offset: .2, + angle: -45deg, + anchor: "north-west"), length: -.1)))) + axes.scientific(size: (6, 6), + draw-unset: false, + top: none, + bottom: axes.axis(min: -1, max: 1, ticks: (step: 1, minor-step: auto, + grid: "both", unit: [ units])), + left: axes.axis(min: -1, max: 1, ticks: (step: .5, minor-step: auto, + grid: false)), + right: axes.axis(min: -10, max: 10, ticks: (step: auto, minor-step: auto, + grid: "major")),) +}) + +// Custom Tick Format +#test-case({ + import draw: * + + axes.scientific(size: (6, 1), + bottom: axes.axis(min: -2*calc.pi, max: 2*calc.pi, ticks: ( + step: calc.pi, minor-step: auto, format: v => { + let d = v / calc.pi + if d == 0 {return $0$} + {$#{d}pi$} + } + )), + left: axes.axis(min: -1, max: 1, ticks: (step: none, minor-step: none))) +}) diff --git a/tests/chart/boxwhisker/ref/1.png b/tests/chart/boxwhisker/ref/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5486bae079490ebe83f76eeb58794a9ba73224ae GIT binary patch literal 18989 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 JGBn6u{{cjG { + circle("c." + n, radius: .05) + }) +}) + +// Keys +#test-case({ + piechart(((value: 1, label: [One], o: false), + (value: 1, label: [Two], o: true)), slice-style: colors, + value-key: "value", label-key: "label", outer-label: (content: "LABEL", radius: 150%), outset-key: "o") +}) + +// Keys +#test-case({ + piechart(((value: 1, label: [One]), + (value: 1, label: [Two], o: 2%), + (value: 1, label: [Three], o: 4%), + (value: 1, label: [Four], o: 6%), + (value: 1, label: [Five], o: 8%), + (value: 1, label: [Six], o: 10%), + (value: 1, label: [Seven], o: 12%), + (value: 1, label: [Eight], o: 14%),), + slice-style: colors, + value-key: "value", label-key: "label", outer-label: (content: "LABEL", radius: 150%), outset-key: "o") +}) + +// Clockwise rotation +#test-case({ + import draw: * + piechart(range(1,4), clockwise: true, slice-style: (green, yellow, red)) +}) + +// Counter clockwise rotation +#test-case({ + import draw: * + piechart(range(1,4), clockwise: false, slice-style: (green, yellow, red)) +}) diff --git a/tests/chart/ref/1.png b/tests/chart/ref/1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c093dbd9ca5b6fd082f2e654ea724004773eb7d GIT binary patch literal 244400 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 z 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�Gw76 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 z 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