Я отфильтровал фрейм данных алмаза на основе переменной цены, чтобы получить цены ниже или равных 10000, и назвал новый фрейм данных df.
Затем я добавил новый квантиль столбца, в котором есть квантили столбца цены. Самая высокая цена находится в 1-м квантиле (верхние 20%), а самая низкая цена — в 5-м квантиле.
Q1 определяет значения, которые будут использоваться при построении вертикальных линий между различными квантилями.
library(ggplot2)
library(dplyr)
df <- diamonds %>% filter(price <= 10000)
df <- within(df, quantile <- 6 - as.integer(cut(price, quantile(price, probs=0:5/5), include.lowest=TRUE)))
df$quantile<-factor(df$quantile, levels=c("1", "2", "3", "4", "5","6", "7", "8", "9","10"))
Q1 <- quantile(df$price, 1:4/5)
ggplot(df, aes(x=price, y= carat, color=quantile))+
geom_point(alpha=0.4, size=1)+
geom_vline(xintercept=Q1, alpha=0.5, linetype="longdash")+
geom_text(aes(x=5000, y=2,
label="80th %ile"), hjust=1, vjust= 1, angle =90, colour="blue") +
geom_text(aes(x=2850, y=2,
label="60th %ile"),
hjust=1, vjust= 1, angle =90, colour="blue")+
geom_text(aes(x=820, y=2,
label="20th %ile"),
hjust=1, vjust= 1, angle =90, colour="blue")+
facet_wrap(~cut, ncol=2, scales="free_y")+
theme_bw()+
labs(x="Price ($)", y="Carat")
Метки вертикальных линий не выровнены вместе из-за масштабов в facet_wrap. Кроме того, метки перекрываются с точками, как показано ниже
Я исправил это, удалив scales="free_y" в facet_wrap и изменив y на 3 в geom_text.
На предыдущем графике все работало нормально, потому что значения y не сильно различаются между уровнями огранки бриллианта.
Однако если у меня есть фрейм данных с совершенно другими значениями y, я не могу исправить значение y в geom_text.
Есть ли способ выровнять метки вертикальных линий, когда у меня разные значения y в facet_wrap, не удаляя scales="free_y"?