Можно ли использовать ggplot с пакетом единиц в R? - PullRequest
1 голос
/ 14 апреля 2020

Библиотека единиц упрощает работу с единицами. Насколько я знаю, прокладка с юнитами работает нормально с базовым графиком, но не с ggplot. Есть предложения?

library(units)

# Take cars data frame: stopping dist (ft) vs speed (mph)
plot(cars)

# units + base plot
Distance = set_units(cars$dist, ft)
Speed = set_units(cars$speed, mph)
plot(x=Speed, y=Distance) #Clean

# units + ggplot
library(ggplot2)
df = cars
df$Disance = set_units(df$dist, ft)
df$Speed = set_units(df$speed, mph)

qplot(x=Speed, y=Distance, data=df)
# Error in Ops.units(x, range[1]) : 
#   both operands of the expression should be "units" objects

1 Ответ

3 голосов
/ 14 апреля 2020

Вы можете использовать ggforce, который решает эту проблему.
Более конкретно, см. scale_unit.

# install.packages("ggforce")
library(ggplot2)
library(ggforce)

df = cars
df$Distance = set_units(df$dist, ft)
df$Speed = set_units(df$speed, mph)

qplot(x=Speed, y=Distance, data=df)

Resulting plot

Вы получаете такой же результат, как этот, чтобы избежать преобразования данных.

qplot(x=speed, y=dist, data=cars) +
    scale_x_unit(unit = 'mph') +
    scale_y_unit(unit = 'ft')

Примечания

  • Этот ответ дает мне идея написать запись на эту топи c для игры с юнитами и графиками.
  • В настоящее время существует проблема с последней версией ggplot, которая выпадает значения осей. В ожидании выхода новой версии можно переключиться на версию для разработчиков: devtools::install_github("thomasp85/ggforce").
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...