8 votes

Comment puis-je générer une carte thermique à partir des résultats d'AnyDice ?

Je veux montrer certains effets de la modification des jets de dés sur un carte de chaleur où, sur un axe, j'ai la difficulté de la tâche (niveau d'un sort, qualité de la serrure à crocheter, etc.), et sur un autre axe le niveau du personnage / le bonus de compétence. La couleur devrait représenter les chances de réussite.

En général, les graphiques d'AnyDice ne sont guère utiles à regarder et à comprendre facilement ; ils génèrent de nombreuses lignes ou barres, alors que je veux tout avoir sur une seule carte.

Voici un exemple de programme : https://anydice.com/program/1451d - cinquante lignes de probabilités ; ce n'est pas très agréable à regarder, et ce n'est pas utile de poster des réponses ici.

Comment puis-je générer une carte thermique à partir des résultats d'AnyDice ?

Je veux quelque chose comme ce qui est décrit ici sur un site frère : Qu'est-ce qu'une carte thermique de probabilité ? Je préférerais une option dans AnyDice, s'ils la mettaient en œuvre, mais je ne la vois pas. Un outil qui peut prendre une exportation à partir d'AnyDice et générer une carte de chaleur serait également formidable.

À l'aide d'un tableur et d'un formatage conditionnel, j'ai réussi à obtenir à peu près ce que je voulais, mais c'était un processus long et ennuyeux : Example

14voto

trjh Points 11

Le site Format d'exportation d'AnyDice est assez facile à analyser : il s'agit simplement de CSV texte. En fait, vous pourriez l'importer directement dans un tableur, mais il vous faudrait alors réorganiser les données dans une grille.

Pour éviter cette corvée, j'ai écrit un rapide script Python pour lire les données exportées à partir de votre code AnyDice (plus précisément, la première section de la section Exportation du résumé d'AnyDice d'après le "mean" y "output",# jusqu'à la ligne blanche suivante), extraire les numéros de ligne et de colonne du nom de sortie avec une regexp et imprimer le résultat sous forme de grille :

import csv, sys, re

csvreader = csv.reader(sys.stdin)

table = {}
columns = []
for name, value in csvreader:
    row, col = re.findall(r'-?\d+', name)
    if row not in table: table[row] = {}
    if col not in columns: columns.append(col)
    table[row][col] = value

csvwriter = csv.writer(sys.stdout)
csvwriter.writerow([''] + columns)

for row in table:
    csvwriter.writerow([row] + [table[row][col] for col in columns])

(Le regexp -?\d+ correspond à un ou plusieurs chiffres précédés d'un signe moins facultatif c'est-à-dire un nombre entier. S'il n'y a pas exactement deux nombres de ce type dans le nom de chaque sortie AnyDice, le script se plantera avec un message d'erreur ValueError . Tout autre élément dans le nom de la sortie est ignoré, ainsi le nom "0 foo 2" est aussi bon que "Spell Level 0, proficiency bonus 2" dans la mesure où le script est concerné).

L'exécution du script sur vos données ( essayez-le en ligne ! ), il imprime la grille suivante, également au format CSV :

,2,3,4,5,6
0,0.6,0.65,0.7,0.75,0.8
1,0.55,0.6,0.65,0.7,0.75
2,0.5,0.55,0.6,0.65,0.7
3,0.45,0.5,0.55,0.6,0.65
4,0.4,0.45,0.5,0.55,0.6
5,0.35,0.4,0.45,0.5,0.55
6,0.3,0.35,0.4,0.45,0.5
7,0.25,0.3,0.35,0.4,0.45
8,0.2,0.25,0.3,0.35,0.4
9,0.15,0.2,0.25,0.3,0.35

Nous pouvons ensuite l'importer dans n'importe quel logiciel de feuille de calcul, comme Microsoft Excel ou Open/LibreOffice Calc. Pour faire tout ça en ligne, j'ai décidé d'utiliser Google Sheets .

Après avoir importé le fichier CSV, j'ai sélectionné la zone de données (à l'exclusion de la ligne et de la colonne d'en-tête), puis sélectionné FormatFormatage conditionnel... dans le menu, et choisissez l'onglet "Échelle de couleurs" dans la barre latérale qui s'ouvre. L'échelle de couleurs par défaut ("vert vers blanc") me semblait un peu moche et peu contrastée, alors je l'ai changée en "rouge vers blanc vers vert", et j'ai obtenu ceci :

Screenshot of heat map in Google Sheets using conditional formatting

Pas mal pour un premier essai, à mon avis. Voici la feuille de calcul actuelle si vous voulez le voir "en direct". Bien sûr, il y a beaucoup de choses que nous pourrions faire pour améliorer le formatage, comme ajuster la largeur des colonnes et l'alignement horizontal des chiffres et ajouter des étiquettes pour les en-têtes, mais cela devrait au moins démontrer le flux de travail de base.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X