Использование шкалы логарифмических осей в ggplot из Rpy2

Я пытаюсь отформатировать свои оси в масштабе журнала от Rpy2, используя ggplot. В обычном R это можно сделать:

qplot(data=data, x=x, y=y) + geom_point() + scale_y_log2()

Чтобы получить ось log2. Когда я пытаюсь использовать ggplot2.scale_y_log2 в Rpy2 жалуется, что не нашел, хотя ggplot2.scale_x_log10 (лог *10*) работает отлично. Как я могу получить оси log2 в Rpy2?

Смежный вопрос: если мои данные уже зарегистрированы (например, они находятся в кадре данных Pandas, где я применил log2 к строкам), как я могу получить ggplot в Rpy2, чтобы просто отформатировать ось как ось журнала (т. Е. Отметки типа 2^1, 2^2, 2^4, ...) без регистрации снова данных? Просто переформатирование меток, поскольку данные уже находятся в лог-значениях. Благодарю.

2 ответа

Решение

Поскольку это вопрос Python / rpy2, код на Python:

from rpy2.robjects.lib import ggplot2
from rpy2.robjects import r
from rpy2.robjects.packages import importr

scales = importr('scales')

iris = r('iris')

p = ggplot2.ggplot(iris) + \
    ggplot2.geom_point(ggplot2.aes_string(x="Sepal.Length", y="Sepal.Width")) + \
    ggplot2.scale_x_continuous(trans = scales.log2_trans())

p.plot()

Чтобы ответить на вашу первую часть вопроса, вы не можете сделать это в R:

qplot(data=data, x=x, y=y) + geom_point() + scale_y_log2()

Вы получаете эту ошибку:

   Error: could not find function "scale_y_log2"

Итак, вы должны определить это раньше:

library(scales)
scale_y_log2 <- function (...) 
{
  scale_y_continuous(..., trans = log2_trans())
}
dat <- data.frame(x=1:10,y=1:10)
qplot(data=dat, x=x, y=y) + geom_point() + scale_y_log2()
Другие вопросы по тегам