У меня есть график плотности и столбец (geom_col
), который я хочу выровнять в соответствии со значениями оси x.
График geom_col:
#creating the data
col_plotting <- as.data.frame(matrix(ncol = 2, nrow = 20))
col_plotting[, 1] <- seq(0.1, 1, 0.1)
col_plotting[, 2] <- c(4.914910e-03, 2.485699e-17, 7.776309e-03, 1.177328e-01,
9.445104e-04, 7.739012e-02, 1.529308e-01, 4.829482e-01,
2.902169e+00, 7.992388e+00)
#The figure
p.col_plotting <- ggplot(col_plotting, aes(x = V1, y = V2)) +
geom_col() +
xlab("Scores") +
ylab("Incidence") +
ggtitle(label="Proportion of Incidences For Each Score") +
theme(plot.title = element_text(size = 20),
legend.title = element_text(face = "bold")) +
scale_x_continuous(breaks = c(seq(0.1, 1, 0.1)),
minor_breaks = NULL,
labels = c(seq(0.1, 1, 0.1)),
limits = NULL,
position = "bottom") #setting the x axis labels
График плотности:
#the data
plotting <- as.data.frame(matrix(ncol = 2, nrow = length(sample(seq(0, 1, 0.001)))))
plotting[, 1] <- sample(seq(0, 1, 0.001))
plotting[, 2] <- c(rep("Yes", 500), rep("No", nrow(plotting)-500))
#The plot
P.plotting <- ggplot(plotting, aes(V1, colour = V2, fill = V2))+
xlab("Scores") +
ggtitle(label = "Density plot for Desicions") +
theme(plot.title = element_text(size = 20),
legend.title = element_text(face = "bold"))+
geom_density(alpha = 0.60, size = 0.9) +
scale_colour_manual(values = cbPalette, name = "Desicion") +
scale_fill_manual(values = cbPalette, name = "Desicion")
Выравнивание их вместе при использовании cowplot
plot_grid(p.col_plotting, P.plotting,
labels = c("A", "B"),
nrow = 2, align = "v", axis = "lr")
Создает эту фигуру:
Числа не идеально выровнены друг с другом.
Я прочитал эту ветку , которая утверждает, что проблема заключается в определении пределов х.
Но проблемазаключается в том, что когда я определяю пределы x для geom_col
от 0 до 1 (как в кадре данных):
p.col_plotting <- ggplot(col_plotting, aes(x = V1, y = V2))+
geom_col() +
xlab("Scores") +
ylab("Incidence") +
ggtitle(label = "Proportion of Incidences For Each Score") +
theme(plot.title = element_text(size = 20),
legend.title = element_text(face = "bold")) +
scale_x_continuous(breaks = c(seq(0.1, 1, 0.1)),
minor_breaks = NULL,
labels = c(seq(0.1, 1, 0.1)),
limits = NULL,
position = "bottom") +
xlim(0, 1)
я получаю предупреждение:
Предупреждающее сообщение: удалены 2 строки, содержащие пропущенные значения (geom_col).
И график получается так:
Я подумал, что было бы лучше просто определить пределы x как для графика col, так и для графика плотности, равного (0, 1.1)
, но хотя график geom_col
выглядит хорошо, плотностьВ зависимости от значения графика на оси x между значениями по оси х от 1 до 1,1, даже если эти значения не существуют в исходных данных графика:
Кроме того, выравнивание все еще не является идеальным, после того, как я установил предельные значения x.
Далее я также попробовал два других решения:
Этот код выдал ошибку при попытке использовать rbind
для 2 переменных с неодинаковыми размерами
g2 <- ggplotGrob(p.col_plotting )
g3 <- ggplotGrob(P.plotting)
g <- rbind(g2, g3, size = "first")
g$widths <- grid::unit.pmax(g2$widths, g3$widths)
grid::grid.newpage()
grid::grid.draw(g)
Этот код создает ту же невыровненную сетку
g1 <- ggplotGrob(p.col_plotting)
g2 <- ggplotGrob(P.plotting)
colnames(g1) <- paste0(seq_len(ncol(g1)))
colnames(g2) <- paste0(seq_len(ncol(g2)))
x11()
grid::grid.draw(gridExtra::gtable_combine(g2, g1, along=2))
Что еще я могу сделать?Спасибо!