Вы можете добавить текст и графику с помощью grobs . Прежде всего, вам нужно немного свободного места с правой стороны. Это возможно, когда вы тратите наценку в своих темах. Команда здесь: theme(plot.margin = unit(c(1,5,1,1),"cm"))
, после чего вы должны объявить, что вы хотите вставить.
График с увеличенным запасом (хорошо, так как фон белый, на самом деле невозможно увидеть увеличенный запас ... но он есть):
В вашем случае я вставил таблицу, так как это проще. Вы можете вставить текст, таблицы или фигуры с помощью grobs
. Давайте сначала определим таблицу:
mytable<-cbind(c("variable_1","variable_2","variable_3"),c(0.5,1.5,3.5))
с annotion_costum()
ggplot позволяет вставлять объекты в виде графики на графиках. Поскольку наша маржа достаточно высока, вы можете добавить таблицу за пределы графика.
Участок с добавленной таблицей:
В качестве последнего шага я нарисовал прямоугольник вокруг стола. Полный код:
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))
Окончательное изображение:
Это, кажется, работает; не уверенный, насколько полезный это, хотя:
a[1] = 2
a[2] = 3
a[3] = 5
a[6] = 8
Part[DownValues[a], All, 1, 1, 1]
Это похоже 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]
который говорит для кэширования ответа для всех последующих вызовов.