Graph Paper

Guide des tracés

Un programme qui veut donner un tracé à une personne commence par Pour les agents : le moyen le plus rapide est d'envoyer un document de tracé avec POST https://graph-paper.io/plot-link, ou avec GET https://graph-paper.io/plot-link?doc=<JSON encodé en pourcentage> depuis un outil qui peut seulement lire une adresse.
Astuces et conseils couvre les raccourcis du quotidien. Cette page va plus loin : comment Graph Paper décide de ce que signifie une ligne, la notation des listes et des points sur laquelle reposent les tracés complexes et — si vous arrivez de Desmos — quelles habitudes se transposent telles quelles et lesquelles demandent une petite retouche.

Sommaire

Comment Graph Paper lit une ligne

Chaque ligne d'un document est lue comme l'une de trois choses seulement. Savoir laquelle vous avez écrite explique la plupart des surprises.
La ligne estQuand elle ressemble àCe que vous voyez
Une définitionf(x) = \sin(x), a = 3Rien n'est tracé ; le nom devient disponible pour toutes les autres lignes
Des donnéesL = [1, 2, 3]Les valeurs sont affichées ; rien n'est tracé
Un tracéx^2, y = x^2, (\cos t, \sin t)Une série sur le graphique
Deux autres sortes de lignes changent des valeurs au lieu de les tracer : une action (a \to a + 1) change des variables quand elle s'exécute, et un ajustement (Y \sim aX + b) trouve des valeurs de paramètres à partir de données. Les deux sont décrits dans Astuces et conseils.
Une définition n'est pas tracée même si elle contient une formule — c'est tout l'intérêt de la nommer. Pour la voir, ajoutez une seconde ligne qui utilise le nom :
f(x) \coloneq \sin(x)2f(x) + 1
= et \coloneq définissent tous deux une fonction. Utilisez \coloneq pour indiquer explicitement que la ligne est une définition plutôt qu'une équation à résoudre ; le comportement est identique. Les noms peuvent être une seule lettre, une lettre avec un indice (f_1), ou un mot entier.
Une liste seule est une donnée, pas un tracé. L = [1, 2, 3] affiche les valeurs et ne trace rien — associez-la à quelque chose qui indique où tracer, comme (L, L^2).

Travailler avec les listes et les intervalles

Les listes sont la charpente des tracés complexes. Écrivez-en une directement, ou engendrez-la :
Vous voulezTapezVous obtenez
Une liste littérale[1, 2, 3][1, 2, 3]
Un intervalle[1...10]les entiers de 1 à 10
Un intervalle avec un pas[1, 3...11][1, 3, 5, 7, 9, 11]
Une liste transformée[1...5]^2[1, 4, 9, 16, 25]
Une compréhension[k^2 \text{ for } k=[1...5]][1, 4, 9, 16, 25]
Triée\operatorname{sort}(L)les valeurs dans l'ordre
Sans doublons\operatorname{unique}(L)chaque valeur une fois
L'arithmétique s'applique à chaque élément — [1...5]^2 et la compréhension ci-dessus sont deux écritures de la même chose. La forme avec puissance est plus courte ; la compréhension est plus claire dès que l'expression grandit ou utilise l'indice plusieurs fois.
Les listes se combinent aux paramètres pour tracer toute une famille d'un coup. Donnez à k un ensemble de valeurs et tracez \sin(kx) — vous obtenez une courbe par valeur :
k = [1, 3, 5, 7, 9]\sin(k x)

Indexer, découper et filtrer

L'indexation commence à 1, et chacune des formes ci-dessous renvoie une liste lorsque vous lui donnez une liste de positions.
Vous voulezTapezNotes
Un élémentL[2]Le deuxième élément.
Compter depuis la finL[-1]Le dernier élément.
Une trancheL[[2...4]]Les éléments 2 à 4, sous forme de liste.
Seulement certains élémentsL[L>2]Garde les éléments où le test est vrai.
La même chose, détaillée\operatorname{Filter}(L, x \mapsto x>2)Utile quand le test ne porte pas sur l'élément lui-même.
Transformer chacun\operatorname{Map}(x \mapsto x^2, L)La forme longue de L^2.
Demander un élément qui n'existe pas donne une valeur indéfinie plutôt qu'une erreur, et les points construits à partir d'elle sont ignorés au tracé. C'est délibéré : un mauvais indice ne vide pas tout le tracé.

Construire des points et des polygones

Un couple entre parenthèses est un point, et un point dont les coordonnées sont des listes est une liste de points. C'est ainsi que se construisent les nuages de points et les polygones :
Vous voulezTapez
Un point(1, 2)
Une liste de points(L, L^2)
La distance entre deux points\operatorname{Distance}((0,0), (3,4))
Le milieu\operatorname{midpoint}((0,0), (3,4))
Les points acceptent aussi l'arithmétique ordinaire, si bien que le milieu peut s'écrire \frac{(0,0) + (3,4)}{2} si vous préférez : additionner deux points additionne leurs coordonnées, et diviser les met à l'échelle.

Relire les coordonnées

Ajoutez .x, .y ou .z à n'importe quel point pour en extraire une coordonnée :
Vous avezTapezVous obtenez
A = (3, 4)A.x3
A = (3, 4)A.y4
V = (1, 2, 3)V.z3
Un point directement(3,4).x3
L'accesseur s'applique à ce qui a produit le point, il s'enchaîne donc avec l'indexation : S[2].x est le x du deuxième point d'une liste S.
Sur une liste de points, il donne la colonne entière. Si S = [(0,1), (2,3), (4,5)], alors S.x vaut [0, 2, 4] et S.y vaut [1, 3, 5] — sans boucle ni compréhension. C'est donc la façon naturelle de décomposer un jeu de données selon un axe puis de le recomposer autrement :
(S.y, S.x)
trace les mêmes points avec les axes échangés. Les coordonnées lues ainsi sont des nombres ordinaires ; elles se combinent librement avec tout le reste : A.x + A.y vaut 7.
.x, .y et .z sont les seuls accesseurs. Tout ce que vous faites à une liste s'écrit sous forme d'appel de fonction et non de propriété : \operatorname{count}(L) et non L.\mathrm{length} ; \operatorname{total}(L) et non L.\mathrm{total}.
Pour une forme fermée, rassemblez les sommets dans une liste et passez-la à \operatorname{polygon} :
P = [(0,0), (1,0), (0,1)]\operatorname{polygon}(P)
Si un sommet de la liste est indéfini, le polygone se coupe à cet endroit au lieu de combler le trou — un seul sommet indéfini scinde donc un polygone en deux morceaux plutôt que de tracer une arête erronée en travers.

Restreindre ce qui est tracé

Il y a deux façons de limiter un tracé, et elles répondent à des questions différentes.
Les accolades restreignent là où la formule est vraie. Placez une condition entre accolades après n'importe quelle ligne et elle s'applique à toute la ligne :
y = x^2 \left\{ x > 0 \right\}
Enchaînez-les pour plusieurs conditions, et utilisez une forme encadrée quand elle se lit mieux :
y = x^2 \left\{ 0 < x < 3 \right\}
Les accolades fonctionnent sur toutes les sortes de lignes — fonctions explicites, courbes implicites, régions et courbes paramétriques :
x^2 + y^2 = 1 \left\{ y > 0 \right\}
Une clause where fixe l'intervalle d'un paramètre. Pour les courbes paramétriques et polaires, c'est elle qui contrôle quelle portion du chemin est parcourue :
(\cos(t), \sin(t)) \text{ where } 0 \le t \le \pi
La même clause introduit des variables auxiliaires locales, ce qui garde une longue formule lisible sans créer de curseurs :
(r\cos(u), r\sin(u), u) \text{ where } r \coloneq 2 + \sin(u)
Prenez les accolades quand vous masquez une région du plan, et where quand vous bornez le paramètre qui trace la courbe.

Écrire des formules par morceaux

Deux écritures fonctionnent, et elles ont le même sens. L'environnement cases est la notation mathématique conventionnelle :
\begin{cases} x^2 & x < 0 \\ x & x \ge 0 \end{cases}
La forme compacte entre accolades met la condition et la valeur sur une seule ligne, séparées par un deux-points, avec une valeur de repli finale sans condition :
\left\{ x < 0 : x^2, x \right\}
Utilisez celle que vous lisez le plus facilement. Quand des branches répètent une expression, extrayez-la dans une fonction auxiliaire nommée au-dessus pour que les branches restent courtes.

Définir les couleurs

Les canaux de couleur sont sur une échelle de 0 à 1 :
Vous voulezTapez
Rouge\operatorname{rgb}(1, 0, 0)
Orange\operatorname{rgb}(1, 0.5, 0)
Gris moyen\operatorname{rgb}(0.5, 0.5, 0.5)
Par teinte\operatorname{hsv}(120, 1, 1)
\operatorname{hsv} prend une teinte en degrés avec une saturation et une valeur de 0 à 1, si bien que les couleurs définies par teinte ne demandent aucune conversion.
Si vos valeurs de canal sont sur l'échelle habituelle de 0 à 255, utilisez \operatorname{rgb}_{255} plutôt que de convertir à la main :
C \coloneq \operatorname{rgb}_{255}(100, 150, 200)
Affectez ainsi une couleur à un nom et réutilisez-la dans plusieurs lignes. Notez que \operatorname{rgb} écrête les valeurs supérieures à 1 : passer des nombres de 0 à 255 à la mauvaise des deux échoue donc en silence — voir Venir de Desmos.

Résumer des données

Ces fonctions lisent une liste et renvoient un seul nombre :
Vous voulezTapez
Le total\operatorname{total}(L) ou \sum L
La moyenne\operatorname{mean}(L)
La médiane\operatorname{median}(L)
Le plus petit, le plus grand\operatorname{min}(L), \operatorname{max}(L)
La variance\operatorname{var}(L)
L'écart type\operatorname{stdev}(L)
Le nombre d'éléments\operatorname{count}(L)
Pour les distributions, \operatorname{histogram}(L) répartit les valeurs avec une largeur de classe par défaut de 1, et \operatorname{histogram}(L, 2) fixe la largeur explicitement. Les boîtes à moustaches se construisent à partir des données d'un tableau et non d'une formule — choisissez-les dans le contrôle de type de tracé du tableau.
Une ligne qui réduit une liste à un seul nombre se trace comme une droite horizontale à cette valeur, ce qui est un moyen rapide de faire apparaître une moyenne ou un seuil au travers d'un nuage de points.

Venir de Desmos

L'essentiel de ce que vous savez se transpose tel quel. Tout ceci fonctionne exactement comme dans Desmos — les accolades de restriction, les intervalles [1...10], les compréhensions de listes, le filtrage L[L>2], les accesseurs .x, l'arithmétique des points, \operatorname{polygon}, \operatorname{histogram}, la définition de fonctions avec =, les noms d'une lettre avec indice, ainsi que les noms de listes et de statistiques \operatorname{total}, \operatorname{sort}, \operatorname{unique}, \operatorname{stdev}, \operatorname{mean}, \operatorname{median}, \operatorname{nPr} et \operatorname{nCr}. Les fonctions interactives aussi : les actions écrites avec \to, le ticker, les actions au clic avec \mathrm{index}, les points déplaçables, les régressions écrites avec \sim, et les gabarits ${a} dans les étiquettes — voyez Astuces et conseils pour la mise en place de chacune ici.
Quelques choses diffèrent :
Dans DesmosDans Graph PaperPourquoi
\operatorname{rgb}(255, 0, 0)\operatorname{rgb}_{255}(255, 0, 0)\operatorname{rgb} prend de 0 à 1.
a \operatorname{with} b=2a \text{ where } b=2where est la forme générale.
L.\mathrm{total}\operatorname{total}(L)Les opérations de liste sont des fonctions.
\operatorname{boxplot}(L)un type de tracé de tableauLes boîtes viennent des données tabulées.
le panneau du ticker▶ sur une cellule d'actionL'intervalle est une ligne à part entière.
clickableInfo sur une ligneAu clic… dans le menu ⋯ de la celluleMême syntaxe \to, même index.
Les propriétés de liste de Desmos — L.\mathrm{total}, L.\mathrm{length}, L.\mathrm{min}, L.\mathrm{sort} et les autres — s'écrivent toutes ici sous forme d'appel de fonction. Seuls les points prennent un point : et uniquement pour .x, .y et .z.
Celle des couleurs mérite un second regard, car elle échoue en silence. Les valeurs de canal supérieures à 1 sont écrêtées : une couleur totalement saturée paraît donc encore correcte, et tout le reste dérive vers le blanc.
Vous tapezVous obtenez
\operatorname{rgb}(255, 0, 0)rougecorrect — par coïncidence
\operatorname{rgb}(255, 128, 0)jaunevous vouliez orange
\operatorname{rgb}(100, 150, 200)blancvous vouliez bleu acier
\operatorname{rgb}(34, 34, 34)blancvous vouliez presque noir
Prenez \operatorname{rgb}_{255} dès que vos nombres sont sur l'échelle de 0 à 255, et la conversion est faite pour vous.
Une autre différence à connaître : \operatorname{gcd} et \operatorname{lcm} travaillent dans Graph Paper sur les nombres que vous leur donnez, alors que Desmos arrondit d'abord ses arguments à des entiers. Si vous comptez sur cet arrondi, écrivez-le — \operatorname{gcd}(\operatorname{round}(a), \operatorname{round}(b)).
L'import s'occupe de tout cela. Ouvrez un graphique Desmos par l'import et ces conversions sont appliquées pour vous ; le tableau ci-dessus concerne les formules que vous saisissez vous-même.

Quand une ligne ne trace rien

Parcourez cette liste avant de réécrire la formule.
SymptômeCause probable
La ligne affiche des valeurs au lieu d'un tracéC'est une liste ou une définition, pas un tracé. Ajoutez une ligne qui l'utilise.
Un nom de fonction se comporte comme une multiplicationGraph Paper ne connaît pas ce nom et le lit comme un produit. Vérifiez l'orthographe dans les tableaux ci-dessus.
Une couleur est ressortie blancheLes canaux supérieurs à 1 sont écrêtés. Utilisez \operatorname{rgb}_{255}.
Une partie de la courbe manqueUne condition entre accolades ou un intervalle where est plus étroit que voulu.
Un polygone a un trouL'un de ses sommets est indéfini, ce qui le scinde en deux.
Rien n'apparaît du toutLa fenêtre est peut-être ailleurs — vérifiez les intervalles des axes avant la formule.
Quelques noms sont réservés aux fonctions intégrées : une ligne comme \operatorname{mean}(x) = x^2 ne définit donc pas votre propre fonction — renommez-la si vous avez besoin de l'un de ces noms.
Pour tout le reste, voyez Astuces et conseils ou Assistance.