Вы можете использовать ggplot
boxplot.stats
(та же функция используется базой boxplot
), чтобы установить Y-значения для билетных и баков и недопустимых. Например:
# Function to use boxplot.stats to set the box-and-whisker locations
mybxp = function(x) {
bxp = boxplot.stats(x)[["stats"]]
names(bxp) = c("ymin","lower", "middle","upper","ymax")
return(bxp)
}
# Function to use boxplot.stats for the outliers
myout = function(x) {
data.frame(y=boxplot.stats(x)[["out"]])
}
Теперь мы используем эти функции в stat_summary
обратить boxplot, как в примере ниже:
ggplot(my.df.long, aes(x=variable, y=vals)) +
stat_summary(fun.data=mybxp, geom="boxplot") +
stat_summary(fun.data=myout, geom="point") +
theme_bw() + coord_flip()
Теперь вопрос трансформации журнала: Графики ниже показывают, соответственно, нет преобразование координат, scale_y_log10
и coord_trans(y="log10")
. Кроме того, я использовал geom_hline
, чтобы добавить пунктирные линии в каждом из значений box-and-whisker, и я добавил текст, чтобы показать фактические значения. Чтобы уменьшить беспорядок, я удалил точки выброса, и я немного потупил ящики, чтобы другие компоненты отображались лучше.
# Set up common plot elements
p = ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_hline(yintercept=mybxp(my.df$a), colour="red", lty="11", size=0.3) +
geom_hline(yintercept=mybxp(my.df$b), colour="blue", lty="11", size=0.3) +
stat_summary(fun.data=mybxp, geom="boxplot", colour="#000000A0", fatten=0.5) +
#stat_summary(fun.data=myout, geom="point") +
theme_bw() + coord_flip()
br = c(5,10,20,50,100,200,500,1000)
## Create plots
# Without log transformation
p1 = p + scale_y_continuous(breaks=br, limits=c(5,1000)) +
stat_summary(fun.y=mybxp, aes(label=round(..y..)), geom="text", size=3, colour="red") +
ggtitle("No Transformation")
# With scale_y_log10
p2 = p + scale_y_log10(breaks=br, limits=c(5,1000)) + ggtitle("scale_y_log10") +
stat_summary(fun.y=mybxp, aes(label=round(..y..,2)), geom="text", size=3, colour="red") +
stat_summary(fun.y=mybxp, aes(label=round(10^(..y..))), geom="text", size=3,
colour="blue", position=position_nudge(x=0.3))
# With coord_trans
p3 = p + scale_y_continuous(breaks=br, limits=c(5,1000)) +
stat_summary(fun.y=mybxp, aes(label=round(..y..)), geom="text", size=3, colour="red") +
coord_trans(y="log10") + ggtitle("coord_trans(y='log 10')")
Три участка показаны ниже.Обратите внимание, что последний график, используя coord_trans
, не перевернулся, потому что coord_trans
переопределяет coord_flip
. Вероятно, вы можете использовать что-то вроде кода в this SO answer, чтобы перевернуть сюжет, но я этого не делал.
Первый участок без преобразований показывает правильные значения.
Третий участок, используя coord_trans
, также имеет все в правильных местах. Обратите внимание, что coord_trans
фактически меняет систему координат y-графика графика без изменения значений нанесенных точек. Это пространство само по себе «искажено» в масштабе журнала.
Теперь обратите внимание, что на втором участке, используя scale_y_log10
, коробки находятся в правильных местах, но концы усов находятся в неправильных местах. С другой стороны, сравнение с двумя другими графиками показывает, что местоположение всех geom_hline
s является правильным. Также обратите внимание, что, в отличие от coord_trans
, scale_y_log10
берет журнал самих точек и просто переносит разрывы оси y с незакрепленными значениями, оставляя «пространство», в котором точки отображаются без изменений. Вы можете увидеть это, посмотрев на значения в красном тексте. Значения в синем тексте - это значения, не содержащие пробелов.
См. @dww's answer для объяснения причин, почему scale_y_log10
приводит к неправильному преобразованию концов нитевидных кристаллов, а значения полей отображаются в нужном месте.
Посмотрите на '? Geom_boxplot'. 'ggplot' и' boxplot' используют разные методы расчета «шарниров» –
@MikeyMike Спасибо - это хорошо знать. Но даже в этом случае 2 версии ggplot - с осью журнала и без нее - помещают петли в разных положениях. – dww
Может ли это быть трансформированием шкал против трансформации системы координат? Использование 'scale_x_log10' такое же, как использование' log (vals) 'как переменной y. – aosmith