R: построение графиков верхней и нижней границ с помощью ggplot2 - PullRequest
1 голос
/ 19 января 2011

У меня есть набор данных с тремя переменными. Одна непрерывная независимая переменная, одна непрерывная зависимая переменная и двоичная переменная, которая разделяет порядок проведения измерений. Используя 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, я бы хотел узнать, как это сделать. Однако, если это невозможно, я буду открыт для других способов представления этих данных. Простое разграничение категорий на основе цвета недостаточно для того, чтобы подчеркнуть верхнюю / нижнюю границу природы категорий для моих целей.

1 Ответ

2 голосов
/ 19 января 2011

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

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

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

Далее найдите верхнюю или нижнюю часть графика (= min / max значений) на основе "catagory "для каждого случая:

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") параметров к графику, поскольку это выглядело очень странно со случайными данными.

...