Изменение цвета фона одного элемента в сетке


7

Рассмотрим следующий код:

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

Это подчеркивает колонка 4:

enter image description here

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

Это подчеркивает строка 4:

enter image description here

Как вы выделяете отдельную ячейку, скажем, строку 3, колонку 5?

+3

Центр документации : 'Grid [Таблица [x, {4}, {7}], Фон -> {Нет, Нет, {{1, 1} -> Розовый, {3, 3} -> Красный}}]' (раздел: 'Background') 26 авг. 132013-08-26 17:15:07

9

Как Pinguin Dirk комментарии есть пример именно это в the documentation:

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

enter image description here

Те, кто ценит лаконичность, возможно, пожелает отметить, что неявное Null может использоваться вместо None:

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

Вы также можете использовать Item и MapAt:

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

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

enter image description here

Вы можете также использовать Style, но это не будет заполнять ячейки (можно отладили с помощью Pane хотя):

{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 - Я обычно очень хорошо разбираюсь в его документации. Я просто пропустил этот один пример, когда я просматривал его. Спасибо за добавление альтернативного пути с помощью Item и MapAt. 26 авг. 132013-08-26 17:38:23

  0

Надеюсь, вы не возражаете! Низший вообще, но полезный иногда. 26 авг. 132013-08-26 20:06:06

  0

@ István Нет, я не против. Это хорошая нота, но, как вы говорите, обычно не идеальна. 26 авг. 132013-08-26 20:15:26

  0

Вы можете добавить пример с помощью 'MapAt', используя' Span', что является большим приключением такого подхода. (не совсем подходит для вопроса, поскольку речь идет об одном элементе, но все еще хорошо знать) 26 авг. 132013-08-26 20:33:14

  0

@Kuba Подождите, так как когда 'MapAt' работает с' Span' ?! Я должен был [реализовать что-то сам] (http://mathematica.stackexchange.com/q/6114/121) для этой проблемы. 26 авг. 132013-08-26 20:37:04

  0

@ Mr.Wizard Я не знаю с тех пор, когда: http://mathematica.stackexchange.com/a/30340/5478 26 авг. 132013-08-26 20:38:01

+3

@Kuba О, этот ответ? Я, наверное, просто предположил, что вы курили трещины. ; ^) Серьезно, если это работает сейчас, вы должны опубликовать новый ответ на вопрос, который я только что связал в комментарии выше. 26 авг. 132013-08-26 20:39:57

  0

@Kuba У них, похоже, нет никаких примеров в документации v9. Sneaky. Как производительность сравнивается с использованием, например, 'Range' с' MapAt'? Это быстрее? 26 авг. 132013-08-26 20:42:47

  0

Я работаю над ответом на ссылку, которую вы дали. Нет «Последнее изменение в 9», снова! :/(дайте мне тест, и я сделаю это для вас *) 26 авг. 132013-08-26 20:45:11

  0

@ Kuba попробуйте следующее: 'big = Range [1 *^5];' then 'First @ Timing @ MapAt [#^2 &, big, Список/@ Диапазон [30000, 40000]] 'против' First @ Timing @ MapAt [#^2 &, big, 30000 ;; 40000] ' 26 авг. 132013-08-26 20:49:10

  0

Oh my, 10.2sec vs ждут его ... 0.015s. 26 авг. 132013-08-26 20:57:09

+2

@Kuba Почему бы вам не добавить упоминание об этом в свой ответ?Плохая вычислительная сложность «MapAt» - это [давно известная проблема] (http://www.verbeia.com/mathematica/tips/HTMLLinks/Tricks_Misc_11.html). Это усовершенствование значительно расширит практические применения «MapAt». 26 авг. 132013-08-26 21:21:14