R: построение графика верхней и нижней границ с помощью ggplot2

У меня есть набор данных с тремя переменными. Одна непрерывная независимая переменная, одна непрерывная зависимая переменная и бинарная переменная, которая категоризирует, как проводились измерения. Используя ggplot, я знаю, что могу построить диаграмму рассеяния с точками, окрашенными в категорию:

g <- ggplot(dataset, aes(independent, dependent))
g + geom_point(aes(color=catagory))

Однако я хочу знать, есть ли способ построить график, на котором вертикальная линия соединяется с точками категории 0, а вертикальная линия идет вниз от точек категории 1. Это будет выглядеть примерно так:

-   |        |    |
|   |        |    |
|   |        |    |
|   |        |    |
-   |        |  o |
|   |        |  | |
|   |    o   |  | |
|   | o  |   |  | |
-   | |  |   o  | o
|   | |  |      |
|   o |  |      |
|     |  |      |
+----|-----|-----|-----|-----|

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

-   |        |    |
|   |        |    |
|   |        |    |
|   |        |    |
-   |        |  o |   _____
|   |        |  |_|__/
|   |    o   |_/| |
|   | o  |__/|  | |
-   | | /|   o  | o
|  _|_|/ |      |
| / o |  |      |
|/    |  |      |
+----|-----|-----|-----|-----|

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


person Wilduck    schedule 18.01.2011    source источник


Ответы (1)


Следующее может сработать для вас, надеюсь, я хорошо понял проблему.

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

dataset <- data.frame (
    independent = runif(100),
    dependent = runif(100),
    catagory = floor(runif(100)*2))

Затем найдите верхнюю или нижнюю часть графика (= мин. / Макс. Значений) на основе "категории" для каждого случая:

dataset$end[which(dataset$catagory == 0)] <- max(dataset$dependent)
dataset$end[which(dataset$catagory == 1)] <- min(dataset$dependent)

Теперь мы можем построить данные с помощью geom_segment ().

g <- ggplot(dataset, aes(independent, dependent, min, max))
g + geom_segment(aes(x=independent, y=dependent, xend=independent, yend=end, color=catagory)) 

alt text

Обратите внимание, что я также добавил к графику + theme_bw() + opts(legend.position = "none") параметров, так как он выглядел очень странно со случайными данными.

person daroczig    schedule 19.01.2011
comment
Выглядит великолепно. Вы прекрасно поняли проблему, и я ценю ответ. Большое спасибо. - person Wilduck; 19.01.2011