Пакет « ggpp » предоставляет набор строительных блоков, расширяющих графическую грамматику, реализованную в пакете «ggplot2» (>= 3.5.0). Расширения улучшают поддержку меток данных и аннотаций на графиках. Функции положения реализуют новые подходы к смещению, которые можно использовать с любой геометрией, но они особенно полезны вместе с geom_text_s()
и geom_label_s()
из этого пакета, а также geom_text_repel()
и geom_label_repel()
из пакета 'ggrepel' (>= 0.9.2). См.: (https://ggrepel.slowkow.com) инструкции по установке и новости о выпусках.
Нормализованные родительские координаты (NPC) изначально поддерживаются 'ggplot2' >= 3.5.0 посредством идентификационной функции R I()
. Этот новый подход не требует специальной геометрии, поскольку он должен работать практически со всеми существующими геометриями. Однако в настоящее время это работает только тогда, когда непрерывные переменные сопоставлены с эстетикой x и/или y . Если в будущем этот механизм будет расширен для поддержки факторов и других дискретных переменных, вся геометрия _npc
из «ggpp» может стать избыточной. Между тем, эти специальные геометрии из «ggpp» по-прежнему заполняют пробел, хотя и меньший, в поддержке NPC «ggplot2».
Разница между наблюдениями или данными, сопоставленными с эстетикой x и y , и метками данных заключается в том, что метки данных связаны с координатами данных, но их собственное местоположение обычно находится рядом, но не в точности с местоположением данных. Другими словами, расположение метки данных в координатах x и y является гибким, если можно определить связь с наблюдением данных. В случае аннотаций расположение на области построения является произвольным, что продиктовано имеющимися соображениями графического дизайна и требованием не перекрывать наблюдения за данными. В таблице ниже мы перечисляем геометрии, определенные в пакете «ggpp»: 1) предназначены ли они для меток данных, аннотаций или данных, 2) эстетика и псевдоэстетика, которым они подчиняются, и 3) могут ли они соединить оригинал положение данных в смещенное положение. Рисование соединительных сегментов или стрелок между смещенным и исходным положениями, позициями наблюдения и смещенной меткой требует также изменения данных, возвращаемых функциями положения (см. следующий раздел).
Геометрия | Основное использование | Эстетика | Сегмент |
---|---|---|---|
geom_text_s() | метки данных | X, Y, метка, размер, Семья, Лицо шрифта, цвет, альфа, группа, угол, Vjust, Hjust | да |
geom_label_s() | метки данных | X, Y, метка, размер, Семья, Лицо шрифта, цвет, Заполнять, альфа, ширина линии, тип линии, группа, Vjust, Hjust | да |
geom_text_pairwise() | метки данных | x, xmin, xmax, y, метка, размер, семейство, шрифт, цвет, альфа, группа, угол, vjust, hjust | гориз. |
geom_label_pairwise() | метки данных | x, xmin, xmax, y, метка, размер, семейство, начертание шрифта, цвет, заливка, альфа, ширина линии, тип линии, группа, vjust, hjust | гориз. |
geom_point_s() | метки данных | x, y, размер, цвет, заливка, альфа, форма, обводка, группа | да |
geom_table() 1 | метки данных | X, Y, метка, размер, Семья, Лицо шрифта, цвет, альфа, группа, угол, Vjust, Hjust | да |
geom_plot() 1 , geom_grob() 1 | метки данных | x, y, метка, группа, угол, vjust, hjust | да |
geom_margin_arrow() | метки данных, метки масштаба, данные | xintercept, yintercept, метка, размер, семейство, шрифт, цвет, альфа, группа, vjust, hjust | нет |
geom_margin_point() | метки данных, метки масштаба, данные | xintercept, yintercept, метка, размер, семейство, шрифт, цвет, альфа, группа, vjust, hjust | нет |
geom_margin_grob() | метки данных, метки масштаба, данные | xintercept, yintercept, метка, размер, семейство, шрифт, цвет, альфа, группа, vjust, hjust | нет |
geom_quadrant_lines() , geom_vhlines() | метки данных, метки масштаба, данные | xintercept, yintercept, метка, размер, семейство, шрифт, цвет, альфа, группа, vjust, hjust | нет |
Геометрии, определенные в пакете «ggpp». 1 Существуют версии NPC для этих геометрий, а также для geom_text()
и geom_label()
, используемых в основном для аннотаций к графику.
В отличие от функций положения из «ggplot2», все функции положения из пакета «ggpp» могут сохранять исходные координаты x и y под другим именем в объекте data
при перемещении их в новую позицию. Это делает их совместимыми с geom_text_s()
, geom_label_s()
, geom_point_s()
, geom_table()
, geom_plot()
и geom_grob()
из этого пакета. Все эти геометрические фигуры могут рисовать сегменты или стрелки, соединяющие исходные позиции со смещенными. Они остаются обратно совместимыми и могут использоваться во всех геометриях, имеющих формальный параметр position
. Это похоже на подход, используемый в пакете «ggrepel» (<= 0.9.1), но использует другое соглашение об именах, которое позволяет новым функциям положения оставаться обратно совместимыми с «ggplot2». Начиная с версии 0.9.2 геометрии geom_text_repel()
и geom_label_repel()
из пакета ggrepel полностью совместимы с этим новым соглашением об именах.
Функции позиции position_nudge_keep()
, position_nudge_to()
, position_nudge_center()
и position_nudge_line()
реализуют различные варианты подталкивания. Последние две функции позволяют применять смещение, которое автоматически меняется в зависимости от относительного положения точек данных по отношению к произвольным точкам или линиям или по отношению к полиному или сглаживающему сплайну, подстраиваемому «на лету» к наблюдениям.
Функции позиции position_stacknudge()
, position_fillnudge()
, position_jitternudge()
, position_dodgenudge()
и position_dodge2nudge()
объединяют в себе роли двух функций позиции . Они позволяют легко перемещать метки в слоях графика, использующих наложение, уклонение или дрожание. Функции position_jitter_keep()
, position_stack_keep()
, position_fill_keep()
, position_dodge_keep()
, position_dosge2_keep()
ведут себя как позиции из 'ggplot2', но сохраняют в объекте data
исходные координаты.
Позиция | Основное использование | Смещение | Чаще всего используется с |
---|---|---|---|
position_nudge_keep() | подталкивать | x, y (фиксированное расстояние) | метки данных |
position_jitter_keep() | дрожание | x, y (случайный) | точечные графики |
position_stack_keep() | куча | вертикальный (абсолютный) | столбчатые и гистограммы |
position_stack_minmax() | куча | вертикальный (абсолютный) | планка ошибок |
position_fill_keep() | наполнять | вертикальный (относительный, дробный) | столбчатые графики |
position_dodge_keep() | уклоняться | вбок (абсолютный) | столбчатые и гистограммы |
position_dosge2_keep() | уклонение2 | вбок (абсолютный) | коробчатые сюжеты |
position_nudge_to() | подталкивать | x, y (фиксированное положение) | метки данных |
position_nudge_center() | подталкивать | x, y (в сторону или к цели) | метки данных |
position_nudge_line() | подталкивать | x, y (в сторону или к цели) | метки данных |
position_stacknudge() | складывать + подталкивать | в сочетании, см. выше | метки данных на столбчатых диаграммах |
position_fillnudge() | заполнить + сдвинуть | в сочетании, см. выше | метки данных на столбчатых диаграммах |
position_jitternudge() | дрожание + толчок | в сочетании, см. выше | метки данных на точечных графиках |
position_dodgenudge() | уклонение + подталкивание | в сочетании, см. выше | метки данных на столбчатых диаграммах |
position_dodge2nudge() | уклонение2 + подталкивание | в сочетании, см. выше | метки данных на коробчатых диаграммах |
Функции позиции, определенные в пакете «ggpp».
Статистика stat_fmt_tb()
помогает форматировать таблицы, которые будут отображаться с помощью geom_table()
.
Четыре статистики, stat_dens2d_filter()
, stat_dens2d_label()
, stat_dens1d_filter()
и stat_dens1d_label()
, реализуют маркировку или выборочную маркировку наблюдений на основе локальной 2D-плотности наблюдений на панели. Еще две статистики, stat_dens1d_filter_g()
и stat_dens1d_filter_g()
вычисляют плотность по группе, а не по панели графика. Эти шесть статистических данных предназначены для совместной работы с geom_text_repel()
и geom_label_repel()
из пакета ggrepel (>= 0.8.0).
Статистика stat_apply_panel()
и stat_apply_group()
полезна для применения произвольных функций, возвращающих числовые векторы, таких как cumsum()
, cummax()
и diff()
. Статистика stat_centroid()
и stat_summary_xy()
позволяет вычислять сводные данные по x и y и передавать их в geom.
Статистика stat_quadrant_counts()
и stat_panel_counts()
позволяет легко комментировать графики количеством наблюдений.
Статистика | Основное использование | Обычная геометрия | Чаще всего используется с | Вычислительная функция |
---|---|---|---|---|
stat_fmt_tb() | форматирование и выбор | geom_table() | таблицы как метки данных | группа |
stat_fmt_tb() | форматирование и выбор | geom_table_npc() | таблицы как аннотации | группа |
stat_dens2d_filter() | локальная 2D-фильтрация плотности | geom_text_s() , geom_label_s() , geom_text() , geom_label() | текст как метки данных | панель |
stat_dens2d_label() | локальная 2D-фильтрация плотности | geom_text_repel() , geom_label_repel() | текст как метки данных | панель |
stat_dens1d_filter() | локальная одномерная фильтрация плотности | geom_text_s() , geom_label_s() , geom_text() , geom_label() | текст как метки данных | панель |
stat_dens1d_label() | локальная одномерная фильтрация плотности | geom_text_repel() , geom_label_repel() | текст как метки данных | панель |
stat_dens2d_filter_g() | локальная 2D-фильтрация плотности | geom_text_s() , geom_label_s() , geom_text() , geom_label() | текст как метки данных | группа |
stat_dens2d_label_g() | локальная 2D-фильтрация плотности | geom_text_repel() , geom_label_repel() | текст как метки данных | группа |
stat_dens1d_filter_g() | локальная одномерная фильтрация плотности | geom_text_s() , geom_label_s() , geom_text() , geom_label() | текст как метки данных | группа |
stat_dens1d_label_g() | локальная одномерная фильтрация плотности | geom_text_repel() , geom_label_repel() | метки данных | группа |
stat_panel_counts() | количество наблюдений | geom_text() , geom_label() | текст как аннотация | панель |
stat_group_counts() | количество наблюдений | geom_text() , geom_label() | текст как аннотация | панель |
stat_quadrant_counts() | количество наблюдений | geom_text() , geom_label() | текст как аннотация | панель |
stat_apply_panel() | совокупные сводки | geom_point() , geom_line() и т. д. | точечные и линейные графики | панель |
stat_apply_group() | совокупные сводки | geom_point() , geom_line() и т. д. | точечные и линейные графики | группа |
stat_centroid() | совместные сводки x и y | geom_point() , geom_rug() , geom_margin_arrow() и т. д. | сводка данных | группа |
stat_summary_xy() | совместные сводки x и y | geom_point() , geom_rug() , geom_margin_arrow() и т. д. | сводка данных | группа |
stat_functions() | вычислить y из диапазона x | geom_line() , geom_point() и т. д. | рисовать функциональные кривые | группа |
Статистика определяется в пакете «ggpp».
Выравнивания "outward_mean"
, "inward_mean"
, "outward_median"
и "inward_median"
реализуют внешнее и внутреннее выравнивание относительно центроида данных, а не центра "position"
реализует выравнивание по краю, ближайшему к исходному положению. Это работает только вместе с функциями позиционирования, которые сохраняют исходное местоположение, используя соглашение об именах, реализованное в «ggpp», в противном случае выравнивание по умолчанию возвращается к "center"
/ "middle"
.
Этот пакет является «побочным продуктом» пакета «ggpmisc», содержащим расширения грамматики, изначально написанной для использования с «ggpmisc». Поскольку «ggpmisc» увеличился в размерах, разделение его на два пакета было необходимо для облегчения разработки и обслуживания, а также для облегчения импорта в другие пакеты. На данный момент пакет «ggpmisc» импортирует и реэкспортирует все видимые определения из «ggpp».
Графики ниже иллюстрируют некоторые вещи, которые «ggpp» делает возможным или упрощает кодирование по сравнению с «ggplot», используемым отдельно. Дополнительные примеры, в том числе несколько комбинаций «ggpp» и «ggrepel», приведены в описании пакета.
library( ggpp )
library( ggrepel )
library( dplyr )
График со вставленной таблицей.
mtcars % > %
group_by( cyl ) % > %
summarize( wt = mean( wt ), mpg = mean( mpg )) % > %
ungroup() % > %
mutate( wt = sprintf( " %.2f " , wt ),
mpg = sprintf( " %.1f " , mpg )) - > tb
df <- tibble( x = 5.45 , y = 34 , tb = list ( tb ))
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
geom_table( data = df , aes( x = x , y = y , label = tb ))
Сюжет со врезным сюжетом.
Врезной график расположен с использованием собственных координат графика (npc) с использованием числовых значений в диапазоне 0..1 вместе с I()
.
p <- ggplot( mtcars , aes( factor ( cyl ), mpg , colour = factor ( cyl ))) +
stat_boxplot() +
labs( y = NULL , x = " Engine cylinders (number) " ) +
theme_bw( 9 ) + theme( legend.position = " none " )
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point( show.legend = FALSE ) +
annotate( " plot " , x = I( 0.05 ), y = I( 0.05 ), label = p ,
hjust = " inward " , vjust = " inward " ) +
expand_limits( y = 0 , x = 0 )
Средние значения вычисляются «на лету» и отображаются звездочками.
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( shape = " asterisk " , size = 6 )
Медианы, рассчитанные «на лету», показаны маргинальными стрелками. Метки с количеством наблюдений на группу.
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( geom = " y_margin_arrow " , .fun = median ,
aes( yintercept = after_stat( y )), arrow.length = 0.05 ) +
stat_group_counts( vstep = 0 , hstep = 0.09 )
df <- data.frame ( x1 = c( 1 , 2 , 1 , 3 , - 1 ),
x2 = c( " a " , " a " , " b " , " b " , " b " ),
grp = c( " some long name " , " other name " , " some name " ,
" another name " , " a name " ))
# Add labels to a horizontal column plot (stacked by default)
ggplot( data = df , aes( x2 , x1 , group = grp )) +
geom_col(aes( fill = grp ), width = 0.5 ) +
geom_hline( yintercept = 0 ) +
geom_text(
aes( label = grp ),
position = position_stacknudge( vjust = 1 , y = - 0.2 )) +
theme( legend.position = " none " )
Установка самой последней стабильной версии из CRAN (исходники, двоичные файлы Mac и Win):
install.packages( " ggpp " )
Установка текущей нестабильной версии из R-Universe CRAN-подобного репозитория (бинарные файлы для Mac, Win, Webassembly и Linux, а также доступны исходники):
install.packages( ' ggpp ' ,
repos = c( ' https://aphalo.r-universe.dev ' ,
' https://cloud.r-project.org ' ))
Установка текущей нестабильной версии с GitHub (из исходников):
# install.packages("devtools")
devtools :: install_github( " aphalo/ggpp " )
Документация в формате HTML для пакета, включая страницы справки и руководство пользователя , доступна по адресу (https://docs.r4photobiology.info/ggpp/).
Новости об обновлениях размещаются по адресу (https://www.r4photobiology.info/).
Глава 7 в Aphalo (2020) и глава 9 в Aphalo (2024) объясняют основные концепции грамматики графики, реализованные в «ggplot2», а также расширения этой грамматики, включая некоторые из тех, которые доступны в пакетах «ggpp» и «ggpmisc». '. Информация о книге доступна по адресу https://www.learnr-book.info/.
Сообщайте об ошибках и запрашивайте новые функции по адресу (https://github.com/aphalo/ggpp/issues). Запросы на включение приветствуются по адресу (https://github.com/aphalo/ggpp).
Если вы используете этот пакет для создания научных или коммерческих публикаций, цитируйте в соответствии с:
citation( " ggpp " )
# > To cite package 'ggpp' in publications use:
# >
# > Aphalo P (2024). _ggpp: Grammar Extensions to 'ggplot2'_. R package
# > version 0.5.8-1, <https://CRAN.R-project.org/package=ggpp>.
# >
# > A BibTeX entry for LaTeX users is
# >
# > @Manual{,
# > title = {ggpp: Grammar Extensions to 'ggplot2'},
# > author = {Pedro J. Aphalo},
# > year = {2024},
# > note = {R package version 0.5.8-1},
# > url = {https://CRAN.R-project.org/package=ggpp},
# > }
Являясь расширением пакета «ggplot2», часть кода в пакете «ggpp» была создана с использованием в качестве шаблона функций слоя и масштабирования в «ggplot2». Пользовательский интерфейс «ggpp» стремится быть максимально совместимым с «ggplot2» и многоуровневой грамматикой графики (Wickham 2010). Новые функции, добавленные в «ggplot2», добавляются, когда они имеют отношение к «ggpp», например, поддержка orientation
для переворачивания слоев. Следовательно, этот пакет косвенно включает в себя значительный вклад нескольких авторов и сопровождающих «ggplot2», перечисленных по адресу (https://ggplot2.tidyverse.org/).
Координация разработки посредством дружеского обмена идеями и взаимного вклада Камила Словиковского в «ggpp» и моего в «ggrepel» сделала эти два пакета полностью совместимыми.
Афало, Педро Дж. (2024) Изучите R: как язык. 2 изд. Серия Р. Бока-Ратон и Лондон: Чепмен и Холл/CRC Press. ISBN: 9781032516998. 466 стр.
Афало, Педро Дж. (2020) Изучите R: как язык. 1-е изд. Серия Р. Бока-Ратон и Лондон: Чепмен и Холл/CRC Press. ISBN: 9780367182533. 350 стр.
Уикхем, Хэдли. 2010. «Многослойная грамматика графики». Журнал вычислительной и графической статистики 19 (1): 3–28. https://doi.org/10.1198/jcgs.2009.07098.
© 2016–2024 Педро Дж. Афало ([email protected]). Выпущено под лицензией GPL версии 2 или выше. Данное программное обеспечение не несет никаких гарантий.