ggplot2 - Axis Aesthetics - PullRequest
       3

ggplot2 - Axis Aesthetics

5 голосов
/ 21 апреля 2011

В ggplot2 можно нарисовать эту вторую метку "оси", соотносящую процент значений от X и Y.

enter image description here

Edit:

У меня есть data.frame с двумя переменными, как связанными, так и в процентах. Я хочу показать эволюцию V1, связанную с V2; например, сколько процентов V2 мне нужно, чтобы получить 20% V1 (и наоборот).

V1   V2
0    0
0.03 0.0005
0.10 0.0015
0.13 0.0020
....
1    1

Теперь моя проблема в том, как я могу сделать эту внутреннюю ось по X и Y, показывая соотношение между процентами X и Y. Кроме того, как я могу установить ggplot для использования (0,0) в качестве точки пересечения осей X и Y?

1 Ответ

8 голосов
/ 23 апреля 2011

Вы можете легко построить этот график от слоя к слою (с помощью geom_rect и geom_text ) легко с помощью ggplot2.Не блестящее решение, но вы можете получить картинку:

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

df <- data.frame(A=sort(runif(20)), B=sort(runif(20)))
df <- rbind(df, c(1,1))

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

df_rect <- data.frame(xmin=c(0, median(df$A), -0.01, -0.01), xmax=c(median(df$A), 1, 0, 0), ymin=c(-0.01, -0.01, 0, median(df$B)), ymax=c(0, 0, median(df$B), 1), color=grey(c(0.7, 0.2)), alpha=c(0.8, 0.4, 0.8, 0.4))

Создайте что-то подобное для построенного текста:

df_text <- data.frame(x=c(median(df$A)/2, median(df$A) + (1-median(df$A))/2, 0.05, 0.05), y=c(0.02, 0.02, median(df$B)/2, median(df$B) + (1-median(df$B))/2), label=rep('50%', 4))

И, наконец, выведите все:

ggplot(df, aes(A, B)) + geom_point() +
    geom_line() +
    geom_rect(data=df_rect, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax, fill=color, alpha=alpha), inherit.aes = FALSE) + scale_fill_grey() +
    geom_text(data=df_text, aes(x=x, y=y, label=label), inherit.aes = FALSE) + 
    theme_bw() + scale_y_continuous(limits=c(-0.01, 1), formatter='percent') + scale_x_continuous(limits=c(-0.01, 1), formatter='percent') + opts(legend.position="none")

Где geom_point указывает на заданные значения, а geom_line соединяет все (как я видел на вашем примере изображения).geom_rect со всеми параметрами рисует серую «внутреннюю ось», а geom_text делает текстовую часть.Вам нужно будет поиграть с сгенерированными (входными) фреймами данных (в приведенном выше примере: df_rext и df_text), чтобы получить нужные данные для них.theme_bw обозначает черно-белую тему, а две опции scale_continous означают установку пределов от 0 до 1, а также установку процентов formatter.

, что приводит к: sample plot

Надеюсь, вы сможете настроить и обновить этот маленький пример под свои нужды!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...