Как совместить сюжеты из ggplot2 и boxplotdou?
Я попытаюсь объяснить мою проблему, используя модифицированный код отсюда: https://stats.stackexchange.com/questions/22805/how-to-draw-neat-polygons-around-scatterplot-regions-in-ggplot2
В моем примере я использую набор данных Iris.
Мои попытки привели к этому до сих пор:
Моя цель состоит в том, чтобы нанести Double Box Plot (boxplotdou) на диаграмму рассеянного корпуса с одинаковыми размерами. Текущий код:
library(ggplot2)
library(boxplotdbl)
df <- iris
find_hull <- function(df) df[chull(df$Sepal.Length, df$Sepal.Width), ]
hulls <- ddply(df, "Species", find_hull)
plot <- ggplot(data = df, aes(x = Sepal.Length, y = Sepal.Width, colour=Species, fill = Species)) +
geom_point() +
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Sepal.Length", y = "Sepal.Width")
plot
par(new = TRUE)
# This is quite close what I'm trying to achieve, without axes. But it is in wrong position
#boxplotdou(Sepal.Length~Species, iris, Sepal.Width~Species, iris, factor.labels=FALSE, draw.legend=FALSE, name.on.axis=FALSE, ann = FALSE, axes = FALSE)
# This shows the axes, which do not match the underlying plot
boxplotdou(Sepal.Length~Species, iris, Sepal.Width~Species, iris, factor.labels=FALSE, draw.legend=FALSE, name.on.axis=FALSE, ann = FALSE)
Я попытался вставить boxplotdou(... в ggplot(), но получил ошибку: "Не знаю, как добавить o к графику").
Любая помощь будет оценена.
-Kari
1 ответ
par(mar=c(2.850, 3.20, 1.30, 7.40))
После этого после вашего номинала (new = TRUE) я получил хороший оверлей. Эти магины могут зависеть от графического окружения. Я считаю, что координаты несовместимы между ggplot2 и базовыми графиками в R. Таким образом, вы должны настроить это вручную, если вы хотите использовать оба в одном и том же изображении. И пакет boxplotdbl предназначен для базовых графиков, а не для ggplot2.