大多數aesthetics是從數據中找到的變量映射的。然而,有時您希望將映射延遲到渲染過程的後期。 ggplot2 具有三個階段的數據,您可以從中映射美學,以及三個函數來控製在哪個階段評估美學。
after_stat()
替換了使用 stat()
的舊方法,例如stat(density)
,或用 ..
包圍變量名稱,例如..density..
。
用法
# These functions can be used inside the `aes()` function
# used as the `mapping` argument in layers, for example:
# geom_density(mapping = aes(y = after_stat(scaled)))
after_stat(x)
after_scale(x)
stage(start = NULL, after_stat = NULL, after_scale = NULL)
參數
- x
-
<
data-masking
> 使用由統計 (after_stat()
) 或圖層美學 (after_scale()
) 計算的變量的美學表達。 - start
-
<
data-masking
> 使用圖層數據變量的美學表達。 - after_stat
-
<
data-masking
> 使用統計數據計算的變量的美學表達。 - after_scale
-
<
data-masking
> 使用圖層美學的美學表達。
分期
下麵概述了評估的三個階段以及如何控製美學評估。
第一階段:直接輸入
默認是在開始時使用用戶提供的圖層數據進行映射。如果你想直接從圖層數據映射,你不應該做任何特殊的事情。這是可以訪問原始圖層數據的唯一階段。
# 'x' and 'y' are mapped directly
ggplot(mtcars) + geom_point(aes(x = mpg, y = disp))
第2階段:統計轉換後
第二階段是數據經過圖層統計轉換後。從 stat 轉換數據映射的最常見示例是 geom_histogram()
中的條形高度:高度並非來自基礎數據中的變量,而是映射到由 stat_bin()
計算的 count
。為了從 stat 轉換數據進行映射,您應該使用 after_stat()
函數來標記美學映射的評估應推遲到 stat 轉換之後。統計轉換後的評估將訪問統計計算的變量,而不是原始映射值。每個統計數據中的 'computed variables' 部分列出了可訪問的變量。
# The 'y' values for the histogram are computed by the stat
ggplot(faithful, aes(x = waiting)) +
geom_histogram()
# Choosing a different computed variable to display, matching up the
# histogram with the density plot
ggplot(faithful, aes(x = waiting)) +
geom_histogram(aes(y = after_stat(density))) +
geom_density()
第三階段:規模轉型後
第三個也是最後一個階段是在數據經過繪圖比例轉換和映射之後。從縮放數據進行映射的一個示例可以是使用描邊顏色的去飽和版本進行填充。您應該使用 after_scale()
來標記數據縮放後的映射評估。縮放後的評估隻能訪問該圖層的最終美觀效果(包括非映射的默認美觀效果)。
# The exact colour is known after scale transformation
ggplot(mpg, aes(cty, colour = factor(cyl))) +
geom_density()
# We re-use colour properties for the fill without a separate fill scale
ggplot(mpg, aes(cty, colour = factor(cyl))) +
geom_density(aes(fill = after_scale(alpha(colour, 0.3))))
複雜的分期
如果您想多次映射相同的美學,例如將 x
映射到 stat 的數據列,但將其重新映射到 geom,您可以使用 stage()
函數來收集多個映射。
# Use stage to modify the scaled fill
ggplot(mpg, aes(class, hwy)) +
geom_boxplot(aes(fill = stage(class, after_scale = alpha(fill, 0.4))))
# Using data for computing summary, but placing label elsewhere.
# Also, we're making our own computed variable to use for the label.
ggplot(mpg, aes(class, displ)) +
geom_violin() +
stat_summary(
aes(
y = stage(displ, after_stat = 8),
label = after_stat(paste(mean, "±", sd))
),
geom = "text",
fun.data = ~ round(data.frame(mean = mean(.x), sd = sd(.x)), 2)
)
例子
# Default histogram display
ggplot(mpg, aes(displ)) +
geom_histogram(aes(y = after_stat(count)))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Scale tallest bin to 1
ggplot(mpg, aes(displ)) +
geom_histogram(aes(y = after_stat(count / max(count))))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Use a transparent version of colour for fill
ggplot(mpg, aes(class, hwy)) +
geom_boxplot(aes(colour = class, fill = after_scale(alpha(colour, 0.4))))
# Use stage to modify the scaled fill
ggplot(mpg, aes(class, hwy)) +
geom_boxplot(aes(fill = stage(class, after_scale = alpha(fill, 0.4))))
# Making a proportional stacked density plot
ggplot(mpg, aes(cty)) +
geom_density(
aes(
colour = factor(cyl),
fill = after_scale(alpha(colour, 0.3)),
y = after_stat(count / sum(n[!duplicated(group)]))
),
position = "stack", bw = 1
) +
geom_density(bw = 1)
# Imitating a ridgeline plot
ggplot(mpg, aes(cty, colour = factor(cyl))) +
geom_ribbon(
stat = "density", outline.type = "upper",
aes(
fill = after_scale(alpha(colour, 0.3)),
ymin = after_stat(group),
ymax = after_stat(group + ndensity)
)
)
# Labelling a bar plot
ggplot(mpg, aes(class)) +
geom_bar() +
geom_text(
aes(
y = after_stat(count + 2),
label = after_stat(count)
),
stat = "count"
)
# Labelling the upper hinge of a boxplot,
# inspired by June Choe
ggplot(mpg, aes(displ, class)) +
geom_boxplot(outlier.shape = NA) +
geom_text(
aes(
label = after_stat(xmax),
x = stage(displ, after_stat = xmax)
),
stat = "boxplot", hjust = -0.5
)
相關用法
- R ggplot2 aes 構建美學映射
- R ggplot2 annotation_logticks 注釋:記錄刻度線
- R ggplot2 annotation_custom 注釋:自定義grob
- R ggplot2 annotate 創建注釋層
- R ggplot2 annotation_map 注釋:Map
- R ggplot2 annotation_raster 注釋:高性能矩形平鋪
- R ggplot2 as_labeller 強製貼標機函數
- R ggplot2 vars 引用分麵變量
- R ggplot2 position_stack 將重疊的對象堆疊在一起
- R ggplot2 geom_qq 分位數-分位數圖
- R ggplot2 geom_spoke 由位置、方向和距離參數化的線段
- R ggplot2 geom_quantile 分位數回歸
- R ggplot2 geom_text 文本
- R ggplot2 get_alt_text 從繪圖中提取替代文本
- R ggplot2 geom_ribbon 函數區和麵積圖
- R ggplot2 stat_ellipse 計算法行數據橢圓
- R ggplot2 resolution 計算數值向量的“分辨率”
- R ggplot2 geom_boxplot 盒須圖(Tukey 風格)
- R ggplot2 lims 設置規模限製
- R ggplot2 geom_hex 二維箱計數的六邊形熱圖
- R ggplot2 scale_gradient 漸變色階
- R ggplot2 scale_shape 形狀比例,又稱字形
- R ggplot2 geom_bar 條形圖
- R ggplot2 draw_key 圖例的關鍵字形
- R ggplot2 label_bquote 帶有數學表達式的標簽
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Control aesthetic evaluation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。