Modification de la couleur d'arrière-plan d'un élément dans une grille


7

Considérons le code suivant:

Grid[Table[x, {4}, {7}], Background -> {4 -> LightRed}] 

Cela met en évidence la colonne 4:

enter image description here

Grid[Table[x, {4}, {7}], Background -> {None, {4 -> LightRed}}] 

Cela met en évidence la ligne 4:

enter image description here

Comment mettre en évidence une cellule individuelle, par exemple la ligne 3, colonne 5?

+3

Centre de documentation : 'Grille [Table [x, {4}, {7}], Arrière-plan -> {Aucun, Aucun, {{1, 1} -> Rose, {3, 3} -> Rouge}}]' (section: 'Background') 26 août. 132013-08-26 17:15:07

9

Comme Pinguin Dirk commentaires il y a un exemple exactement cela dans the documentation:

Grid[Table[x, {4}, {7}], 
    Background -> {None, None, {{1, 1} -> Pink, {3, 3} -> Red}}] 

enter image description here

Ceux qui apprécient la brièveté souhaiteront peut-être noter que Null implicite peut être utilisé à la place de None:

Background -> {, , {{1, 1} -> Pink, {3, 3} -> Red}} 

Vous pouvez également utiliser Item et MapAt:

tbl = Table[x, {4}, {7}]; 

MapAt[Item[#, Background -> Pink] &, tbl, {{3, 3}, {2, 6}}] // Grid 

enter image description here

Vous pouvez également utiliser Style mais qui ne rempliront pas la cellule (peut être réglé finement en utilisant Pane bien):

{Grid[{{1, 2}, {3, Style[4, Background -> Pink]}}, Frame -> All], 
Grid[{{1, 2}, {3, Item[4, Background -> Pink]}}, Frame -> All]} 

enter image description here

  0

Bleh - Je suis normalement très bon pour le trouver dans la documentation. J'ai juste manqué cet exemple quand je le regardais. Merci d'ajouter l'alternative en utilisant Item et MapAt. 26 août. 132013-08-26 17:38:23

  0

J'espère que cela ne vous dérange pas! Inférieur en général, mais utile parfois. 26 août. 132013-08-26 20:06:06

  0

@ István Non, ça ne me dérange pas. C'est une bonne note, mais comme vous le dites habituellement pas idéal. 26 août. 132013-08-26 20:15:26

  0

Vous pouvez ajouter un exemple avec 'MapAt' en utilisant' Span', ce qui est un gros avantage de cette approche. (pas exactement adapté à la question puisqu'il s'agit d'un élément, mais toujours bon à savoir) 26 août. 132013-08-26 20:33:14

  0

@Kuba Attends, depuis quand 'MapAt' fonctionne avec' Span'? J'ai dû [implémenter quelque chose moi-même] (http://mathematica.stackexchange.com/q/6114/121) pour ce problème. 26 août. 132013-08-26 20:37:04

  0

@ Mr.Wizard Je ne sais pas depuis quand: p http://mathematica.stackexchange.com/a/30340/5478 26 août. 132013-08-26 20:38:01

+3

@Kuba Oh, cette réponse? J'ai probablement supposé que tu fumais du crack. ; ^) Sérieusement si cela fonctionne maintenant vous devriez poster une nouvelle réponse à la question que j'ai juste liée dans le commentaire ci-dessus. 26 août. 132013-08-26 20:39:57

  0

@Kuba Ils ne semblent pas avoir d'exemples dans la documentation v9. Sournois. Comment la performance se compare-t-elle à l'utilisation, par ex. 'Range' avec' MapAt'? Est-ce plus rapide? 26 août. 132013-08-26 20:42:47

  0

Je travaille sur une réponse au lien que vous avez donné. Il n'y a pas de "Dernière modification en 9", encore une fois! :/(* donnez-moi le test et je le ferai pour vous *) 26 août. 132013-08-26 20:45:11

  0

@Kuba essayez ceci: 'big = Range [1 *^5];' then 'First @ Timing @ MapAt [#^2 &, grand, List/@ Range [30000, 40000]] 'contre' First @ Timing @ MapAt [#^2 &, grand, 30000 ;; 40000] ' 26 août. 132013-08-26 20:49:10

  0

Oh mon, 10.2sec vs attendez-le ... 0.015s. 26 août. 132013-08-26 20:57:09

+2

@Kuba Pourquoi ne pas ajouter cette mention à votre réponse?La pauvre complexité de calcul de 'MapAt' est un [problème de longue date] (http://www.verbeia.com/mathematica/tips/HTMLLinks/Tricks_Misc_11.html). Cette amélioration va considérablement étendre les applications pratiques de 'MapAt'. 26 août. 132013-08-26 21:21:14