【发布时间】:2017-02-01 07:23:35
【问题描述】:
考虑以下代码:
library(ggplot2)
ggplot(diamonds, aes("", price)) + geom_boxplot() + coord_flip()
翻转箱线图后,如何将价格(即新的 x 轴)放大到c(0,7000)?
我觉得它与coord_cartesian(ylim=c(0, 7000)) 有一些关系,但这似乎与 coord_flip() 不兼容。
【问题讨论】:
考虑以下代码:
library(ggplot2)
ggplot(diamonds, aes("", price)) + geom_boxplot() + coord_flip()
翻转箱线图后,如何将价格(即新的 x 轴)放大到c(0,7000)?
我觉得它与coord_cartesian(ylim=c(0, 7000)) 有一些关系,但这似乎与 coord_flip() 不兼容。
【问题讨论】:
你可以使用scale_y_continuous():
library(ggplot2)
ggplot(diamonds, aes("", price)) +
geom_boxplot() +
coord_flip() +
scale_y_continuous(limits = c(0, 7000))
记住 coord_flip() 只是旋转绘图,因此您在 y 轴上调用 scale_,这是您指定的 price 。出于这个原因,我通常喜欢将其称为最后一个:以帮助减少对哪个轴是哪个轴的混淆!
【讨论】:
scale_* 不会放大绘图,只有 coord_* 的 ylim 或 xlim 参数会放大。有关更多信息,请参阅此post。
我认为您需要手动计算箱线图统计数据并绘制这些数据。
# Compute summary statistics with max (y100) set to cutoff (7000)
df <- data.frame(x = 1,
y0 = min(diamonds$price),
y25 = quantile(diamonds$price, 0.25),
y50 = median(diamonds$price),
y75 = quantile(diamonds$price, 0.75),
y100 = 7000
)
ggplot(df, aes(x)) +
geom_boxplot(aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
stat = "identity") +
coord_flip()
【讨论】:
boxplot.stats() 来计算统计数据和异常值。