Mathematica Downvalue Lhs

Вы можете добавить текст и графику с помощью grobs . Прежде всего, вам нужно немного свободного места с правой стороны. Это возможно, когда вы тратите наценку в своих темах. Команда здесь: theme(plot.margin = unit(c(1,5,1,1),"cm")), после чего вы должны объявить, что вы хотите вставить.

График с увеличенным запасом (хорошо, так как фон белый, на самом деле невозможно увидеть увеличенный запас ... но он есть):

increased margin

В вашем случае я вставил таблицу, так как это проще. Вы можете вставить текст, таблицы или фигуры с помощью grobs. Давайте сначала определим таблицу:

mytable<-cbind(c("variable_1","variable_2","variable_3"),c(0.5,1.5,3.5))

с annotion_costum() ggplot позволяет вставлять объекты в виде графики на графиках. Поскольку наша маржа достаточно высока, вы можете добавить таблицу за пределы графика.

Участок с добавленной таблицей:

with table

В качестве последнего шага я нарисовал прямоугольник вокруг стола. Полный код:

library(gridExtra)
library(grid)
A <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
B <- c(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
C <- data.frame(A, B)

mytable<-cbind(c("variable_1","variable_2","variable_3"),c(0.5,1.5,3.5))
ggplot(data = C) + geom_point(mapping = aes(x = A, y = B)) + 
  labs(title = "Plot") + theme(plot.title = element_text(hjust = 0.5))+
  theme(plot.margin = unit(c(1,5,1,1),"cm"))+
  annotation_custom(tableGrob(mytable, rows=NULL), 
                    xmin=unit(11.5,"npc"),xmax = unit(14,"npc"),  ymin=3.7, ymax=7)
  grid.rect(x=unit(0.83,"npc"),y=unit(0.5,"npc") ,width = unit(0.22,"npc"), height = unit(0.16,"npc"), gp = gpar(lwd = 3, col="black", fill = NA))

Окончательное изображение:

final plot

10
задан Mr.Wizard 28 December 2011 в 09:49
поделиться

2 ответа

Это, кажется, работает; не уверенный, насколько полезный это, хотя:

a[1] = 2
a[2] = 3
a[3] = 5
a[6] = 8
Part[DownValues[a], All, 1, 1, 1]
9
ответ дан 3 December 2019 в 14:54
поделиться

Это похоже keys() в Perl и Python и других языках, которые создали в поддержке хешей (иначе словари). Поскольку Ваш пример иллюстрирует, хеши поддержек Mathematica без любого специального синтаксиса. Просто скажите a[1] = 2 и у Вас есть хеш. [1] Для получения ключей хеша я рекомендую добавить это к init.m или персональной библиотеке утилит:

keys[f_] := DownValues[f][[All,1,1,1]]  (* Keys of a hash/dictionary. *)

(Или следующая чистая функциональная версия, предположительно, немного быстрее:

keys = DownValues[#][[All,1,1,1]]&;     (* Keys of a hash/dictionary. *)

)

Так или иначе, keys[a] теперь возвраты, что Вы хотите. (Можно получить значения хеша с a /@ keys[a].), Если Вы хотите допускать более высокие хеши арности, как a[1,2]=5; a[3,4]=6 затем можно использовать это:

SetAttributes[removeHead, {HoldAll}];
removeHead[h_[args___]] := {args}
keys[f_] := removeHead @@@ DownValues[f][[All,1]]

Который возвращается {{1,2}, {3,4}}. (В этом случае можно получить значения хэш-функции с a @@@ keys[a].)

Отметьте это DownValues сортировками по умолчанию ключи, который является, вероятно, не хорошей идеей с тех пор в лучшем случае, требуется дополнительное время. Если Вы хотите ключи, отсортировал Вас, может просто сделать Sort@keys[f]. Таким образом, я на самом деле рекомендовал бы эту версию:

keys = DownValues[#,Sort->False][[All,1,1,1]]&;

Интересно, нет никакого упоминания о Sort опция в DownValues documention. Я узнал об этом из старого сообщения от Daniel Lichtblau Исследования Вольфрама. (Я подтвердил, что это все еще работает в текущей версии (7.0) из Mathematica.)


Сноски:

[1] То, что действительно удобно, - то, что можно смешать и соответствовать этому функциональным определениям. Как:

fib[0] = 1;
fib[1] = 1;
fib[n_] := fib[n-1] + fib[n-2]

Можно затем добавить memoization путем изменения той последней строки на

fib[n_] := fib[n] = fib[n-1] + fib[n-2]

который говорит для кэширования ответа для всех последующих вызовов.

22
ответ дан 3 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: