Поиск…


замечания

ggplot2 имеет свой собственный идеальный справочный сайт http://ggplot2.tidyverse.org/ .

В большинстве случаев удобнее адаптировать структуру или содержимое построенных данных (например, data.frame ), чем затем корректировать объекты внутри графика.

RStudio публикует очень полезную «Визуализацию данных с помощью ggplot2», которую можно найти здесь .

Границы рассеяния

Мы строим простой график рассеяния, используя набор встроенных диафрагм:

library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) + 
  geom_point()

Это дает: Пример диаграммы рассеяния с использованием набора диафрагмы

Отображение нескольких графиков

Отображение нескольких графиков в одном изображении с различными функциями facet . Преимущество этого метода заключается в том, что все оси имеют один и тот же масштаб в диаграммах, что упрощает их сравнение с первого взгляда. Мы будем использовать набор данных mpg включенный в ggplot2 .

Обтекание диаграмм по строкам (попытки создать квадратную компоновку):

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_wrap(~class)

Отображать несколько диаграмм в одной строке, несколько столбцов:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(.~class)

Отображение нескольких диаграмм на один столбец, несколько строк:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(class~.)

Отображение нескольких диаграмм в сетке по двум переменным:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  facet_grid(trans~class) #"row" parameter, then "column" parameter

Подготовьте свои данные для печати

ggplot2 лучше всего работает с длинным фреймом данных. Следующие образцы данных, которые представляют цены на сладости в 20 разных дней, в формате, который описывается как широкий, поскольку каждая категория имеет столбец.

set.seed(47)
sweetsWide <- data.frame(date      = 1:20,
                         chocolate = runif(20, min = 2, max = 4),
                         iceCream  = runif(20, min = 0.5, max = 1),
                         candy     = runif(20, min = 1, max = 3))

head(sweetsWide)
##   date chocolate  iceCream    candy
## 1    1  3.953924 0.5890727 1.117311
## 2    2  2.747832 0.7783982 1.740851
## 3    3  3.523004 0.7578975 2.196754
## 4    4  3.644983 0.5667152 2.875028
## 5    5  3.147089 0.8446417 1.733543
## 6    6  3.382825 0.6900125 1.405674

Чтобы преобразовать sweetsWide в длинный формат для использования с ggplot2 , можно использовать несколько полезных функций из базы R и пакеты reshape2 , data.table и tidyr (в хронологическом порядке):

# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long', 
                      varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])

# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')

# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')

# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)

Все дают аналогичный результат:

head(sweetsLong)
##   date     sweet    price
## 1    1 chocolate 3.953924
## 2    2 chocolate 2.747832
## 3    3 chocolate 3.523004
## 4    4 chocolate 3.644983
## 5    5 chocolate 3.147089
## 6    6 chocolate 3.382825

См. Также Пересмотр данных между длинными и широкими формами для получения подробной информации о преобразовании данных между длинным и широким форматом.

В результате sweetsLong имеет один столбец цен и один столбец, описывающий тип сладкого. Теперь заговор намного проще:

library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()

линейный график данных о сладостях

Добавить горизонтальные и вертикальные линии в график

Добавьте одну общую горизонтальную линию для всех категориальных переменных

# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))

p1 <- ggplot(df, aes(x=x, y=y)) 
        + geom_bar(position = "dodge", stat = 'identity') 
        + theme_bw()

p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")

Plot1

Добавьте одну горизонтальную линию для каждой категориальной переменной

# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))

# add horizontal levels for drawing lines
df$hval <- df$y + 2

p1 <- ggplot(df, aes(x=x, y=y)) 
        + geom_bar(position = "dodge", stat = 'identity') 
        + theme_bw()

p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)

Plot2

Добавить горизонтальную линию по сгруппированным барам

# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2), 
             group = rep(c('G1', 'G2'), each=2), 
             y = c(3, 4, 5, 6), 
             hval = c(5, 6, 7, 8))

p1 <- ggplot(df, aes(x=x, y=y, fill=group)) 
        + geom_bar(position="dodge", stat="identity")

p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), 
               colour="#990000", 
               position = "dodge", 
               linetype = "dashed")

plot3

Добавить вертикальную линию

# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20), 
                 x = rnorm(40, 5, 2), 
                 y = rnorm(40, 10, 2))

p1 <-  ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()

p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")

введите описание изображения здесь

Вертикальная и горизонтальная диаграмма

ggplot(data = diamonds, aes(x = cut, fill =color)) +
  geom_bar(stat = "count", position = "dodge")

введите описание изображения здесь

можно получить горизонтальную гистограмму, просто добавив в объект ggplot функцию ord_flip ():

  ggplot(data = diamonds, aes(x = cut, fill =color)) +
  geom_bar(stat = "count", position = "dodge")+
  coord_flip()

введите описание изображения здесь

Скрипка

Графики скрипок - это оценки плотности ядра, отраженные в вертикальной плоскости. Они могут использоваться для визуализации нескольких дистрибутивов бок о бок, при этом зеркалирование помогает выявить любые различия.

ggplot(diamonds, aes(cut, price)) +
  geom_violin()

основной скрипичный сюжет

Скрипичные названия называются по своему сходству с музыкальным инструментом, это особенно заметно, когда они связаны с наложенным квадратом. Затем эта визуализация описывает лежащие в основе распределения как в терминах 5-тичислений Туки (как ящики), так и при полной непрерывной оценке плотности (скрипки).

ggplot(diamonds, aes(cut, price)) +
  geom_violin() +
  geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
  stat_summary(fun.y = "median", geom = "point", col = "white")

скрипичный сюжет с коробкой

Произведите базовые сюжеты с qplot

qplot должен быть похож на функцию base r plot() , пытаясь всегда выводить ваши данные, не требуя слишком больших спецификаций.

базовый qplot

qplot(x = disp, y = mpg, data = mtcars)

введите описание изображения здесь

добавление цветов

qplot(x = disp, y = mpg, colour = cyl,data = mtcars)

введите описание изображения здесь

добавление более плавного

qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow