使用 MASS::kde2d()
執行 2D 核密度估計並用輪廓顯示結果。這對於處理過度繪圖很有用。這是 geom_density()
的 2D 版本。 geom_density_2d()
繪製等高線,geom_density_2d_filled()
繪製填充等高線帶。
用法
geom_density_2d(
mapping = NULL,
data = NULL,
stat = "density_2d",
position = "identity",
...,
contour_var = "density",
lineend = "butt",
linejoin = "round",
linemitre = 10,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
geom_density_2d_filled(
mapping = NULL,
data = NULL,
stat = "density_2d_filled",
position = "identity",
...,
contour_var = "density",
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
stat_density_2d(
mapping = NULL,
data = NULL,
geom = "density_2d",
position = "identity",
...,
contour = TRUE,
contour_var = "density",
n = 100,
h = NULL,
adjust = c(1, 1),
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
stat_density_2d_filled(
mapping = NULL,
data = NULL,
geom = "density_2d_filled",
position = "identity",
...,
contour = TRUE,
contour_var = "density",
n = 100,
h = NULL,
adjust = c(1, 1),
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
參數
- mapping
-
由
aes()
創建的一組美學映射。如果指定且inherit.aes = TRUE
(默認),它將與繪圖頂層的默認映射組合。如果沒有繪圖映射,則必須提供mapping
。 - data
-
該層要顯示的數據。有以下三種選擇:
如果默認為
NULL
,則數據繼承自ggplot()
調用中指定的繪圖數據。data.frame
或其他對象將覆蓋繪圖數據。所有對象都將被強化以生成 DataFrame 。請參閱fortify()
將為其創建變量。將使用單個參數(繪圖數據)調用
function
。返回值必須是data.frame
,並將用作圖層數據。可以從formula
創建function
(例如~ head(.x, 10)
)。 - position
-
位置調整,可以是命名調整的字符串(例如
"jitter"
使用position_jitter
),也可以是調用位置調整函數的結果。如果需要更改調整設置,請使用後者。 - ...
-
參數傳遞給
geom_contour
binwidth
-
輪廓箱的寬度。被
bins
覆蓋。 bins
-
輪廓箱的數量。被
breaks
覆蓋。 breaks
-
之一:
-
用於設置輪廓中斷的數值向量
-
該函數將數據範圍和 binwidth 作為輸入,並返回中斷作為輸出。可以根據公式創建函數(例如 ~ fullseq(.x, .y))。
覆蓋
binwidth
和bins
。默認情況下,這是一個長度為 10 且帶有pretty()
中斷的向量。 -
- contour_var
-
標識輪廓變量的字符串。可以是
"density"
、"ndensity"
或"count"
之一。有關詳細信息,請參閱有關計算變量的部分。 - lineend
-
線端樣式(圓形、對接、方形)。
- linejoin
-
線連接樣式(圓形、斜接、斜角)。
- linemitre
-
線斜接限製(數量大於 1)。
- na.rm
-
如果
FALSE
,則默認缺失值將被刪除並帶有警告。如果TRUE
,缺失值將被靜默刪除。 - show.legend
-
合乎邏輯的。該層是否應該包含在圖例中?
NA
(默認值)包括是否映射了任何美學。FALSE
從不包含,而TRUE
始終包含。它也可以是一個命名的邏輯向量,以精細地選擇要顯示的美學。 - inherit.aes
-
如果
FALSE
,則覆蓋默認美學,而不是與它們組合。這對於定義數據和美觀的輔助函數最有用,並且不應繼承默認繪圖規範的行為,例如borders()
。 - geom, stat
-
用於覆蓋
geom_density_2d()
和stat_density_2d()
之間的默認連接。 - contour
-
如果
TRUE
,繪製二維密度估計結果的輪廓。 - n
-
每個方向上的網格點數。
- h
-
帶寬(長度為二的向量)。如果
NULL
,則使用MASS::bandwidth.nrd()
估計。 - adjust
-
如果'h' 是'NULL',則使用乘法帶寬調整。這使得在仍然使用帶寬估計器的同時調整帶寬成為可能。例如
adjust = 1/2
表示使用默認帶寬的一半。
美學
geom_density_2d()
理解以下美學(所需的美學以粗體顯示):
-
x
-
y
-
alpha
-
colour
-
group
-
linetype
-
linewidth
在 vignette("ggplot2-specs")
中了解有關設置這些美學的更多信息。
geom_density_2d_filled()
理解以下美學(所需的美學以粗體顯示):
-
x
-
y
-
alpha
-
colour
-
fill
-
group
-
linetype
-
linewidth
-
subgroup
在 vignette("ggplot2-specs")
中了解有關設置這些美學的更多信息。
計算變量
這些是由層的 'stat' 部分計算的,可以使用 delayed evaluation 訪問。 stat_density_2d()
和 stat_density_2d_filled()
根據輪廓繪製是否打開或關閉來計算不同的變量。當輪廓關閉(contour = FALSE
)時,兩個統計數據的行為相同,並且提供以下變量:
-
after_stat(density)
密度估計。 -
after_stat(ndensity)
密度估計,縮放至最大值 1。 -
after_stat(count)
密度估計 * 組中的觀察數。 -
after_stat(n)
每組中的觀察數。
啟用輪廓繪製 ( contour = TRUE
) 後,在獲得密度估計值後運行 stat_contour()
或 stat_contour_filled()
(分別針對輪廓線或輪廓帶),並且計算的變量由這些統計數據確定。針對輪廓繪製之前獲得的三種類型的密度估計值之一( density
、 ndensity
和 count
)計算輪廓。應使用其中哪一個由contour_var
參數確定。
也可以看看
geom_contour()
、 geom_contour_filled()
了解如何繪製輪廓的信息; geom_bin2d()
另一種處理過度繪製的方法。
例子
m <- ggplot(faithful, aes(x = eruptions, y = waiting)) +
geom_point() +
xlim(0.5, 6) +
ylim(40, 110)
# contour lines
m + geom_density_2d()
# \donttest{
# contour bands
m + geom_density_2d_filled(alpha = 0.5)
# contour bands and contour lines
m + geom_density_2d_filled(alpha = 0.5) +
geom_density_2d(linewidth = 0.25, colour = "black")
set.seed(4393)
dsmall <- diamonds[sample(nrow(diamonds), 1000), ]
d <- ggplot(dsmall, aes(x, y))
# If you map an aesthetic to a categorical variable, you will get a
# set of contours for each value of that variable
d + geom_density_2d(aes(colour = cut))
# If you draw filled contours across multiple facets, the same bins are
# used across all facets
d + geom_density_2d_filled() + facet_wrap(vars(cut))
# If you want to make sure the peak intensity is the same in each facet,
# use `contour_var = "ndensity"`.
d + geom_density_2d_filled(contour_var = "ndensity") + facet_wrap(vars(cut))
# If you want to scale intensity by the number of observations in each group,
# use `contour_var = "count"`.
d + geom_density_2d_filled(contour_var = "count") + facet_wrap(vars(cut))
# If we turn contouring off, we can use other geoms, such as tiles:
d + stat_density_2d(
geom = "raster",
aes(fill = after_stat(density)),
contour = FALSE
) + scale_fill_viridis_c()
# Or points:
d + stat_density_2d(geom = "point", aes(size = after_stat(density)), n = 20, contour = FALSE)
# }
相關用法
- R ggplot2 geom_density 平滑密度估計
- R ggplot2 geom_dotplot 點圖
- R ggplot2 geom_qq 分位數-分位數圖
- R ggplot2 geom_spoke 由位置、方向和距離參數化的線段
- R ggplot2 geom_quantile 分位數回歸
- R ggplot2 geom_text 文本
- R ggplot2 geom_ribbon 函數區和麵積圖
- R ggplot2 geom_boxplot 盒須圖(Tukey 風格)
- R ggplot2 geom_hex 二維箱計數的六邊形熱圖
- R ggplot2 geom_bar 條形圖
- R ggplot2 geom_bin_2d 二維 bin 計數熱圖
- R ggplot2 geom_jitter 抖動點
- R ggplot2 geom_point 積分
- R ggplot2 geom_linerange 垂直間隔:線、橫線和誤差線
- R ggplot2 geom_blank 什麽也不畫
- R ggplot2 geom_path 連接觀察結果
- R ggplot2 geom_violin 小提琴情節
- R ggplot2 geom_errorbarh 水平誤差線
- R ggplot2 geom_function 將函數繪製為連續曲線
- R ggplot2 geom_polygon 多邊形
- R ggplot2 geom_histogram 直方圖和頻數多邊形
- R ggplot2 geom_tile 矩形
- R ggplot2 geom_segment 線段和曲線
- R ggplot2 geom_map 參考Map中的多邊形
- R ggplot2 geom_abline 參考線:水平、垂直和對角線
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Contours of a 2D density estimate。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。