有两种类型的条形图: geom_bar()
和 geom_col()
。 geom_bar()
使条形的高度与每组中的案例数量成正比(或者如果提供了 weight
美学,则为权重的总和)。如果您希望条形的高度代表数据中的值,请改用geom_col()
。 geom_bar()
默认使用 stat_count()
:它计算每个 x 位置的情况数。 geom_col()
使用 stat_identity()
:它保持数据不变。
用法
geom_bar(
mapping = NULL,
data = NULL,
stat = "count",
position = "stack",
...,
just = 0.5,
width = NULL,
na.rm = FALSE,
orientation = NA,
show.legend = NA,
inherit.aes = TRUE
)
geom_col(
mapping = NULL,
data = NULL,
position = "stack",
...,
just = 0.5,
width = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE
)
stat_count(
mapping = NULL,
data = NULL,
geom = "bar",
position = "stack",
...,
width = NULL,
na.rm = FALSE,
orientation = NA,
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
),也可以是调用位置调整函数的结果。如果需要更改调整设置,请使用后者。 - ...
-
其他参数传递给
layer()
。这些通常是美学,用于将美学设置为固定值,例如colour = "red"
或size = 3
。它们也可能是配对的 geom/stat 的参数。 - just
-
调整柱位置。默认设置为
0.5
,这意味着列将以轴中断为中心。设置为0
或1
将列放置在轴中断的左侧/右侧。请注意,当与其他位置一起使用时,此参数可能会产生意想不到的行为,例如position_dodge()
。 - width
-
条形宽度。默认情况下,设置为数据
resolution()
的 90%。 - na.rm
-
如果
FALSE
,则默认缺失值将被删除并带有警告。如果TRUE
,缺失值将被静默删除。 - orientation
-
层的方向。默认值 (
NA
) 自动根据美学映射确定方向。万一失败,可以通过将orientation
设置为"x"
或"y"
来显式给出。有关更多详细信息,请参阅方向部分。 - show.legend
-
合乎逻辑的。该层是否应该包含在图例中?
NA
(默认值)包括是否映射了任何美学。FALSE
从不包含,而TRUE
始终包含。它也可以是一个命名的逻辑向量,以精细地选择要显示的美学。 - inherit.aes
-
如果
FALSE
,则覆盖默认美学,而不是与它们组合。这对于定义数据和美观的辅助函数最有用,并且不应继承默认绘图规范的行为,例如borders()
。 - geom, stat
-
覆盖
geom_bar()
和stat_count()
之间的默认连接。
细节
条形图使用高度来表示值,因此必须始终显示条形的底部以产生有效的视觉比较。在条形图上使用转换后的比例时请务必小心。始终为酒吧的底部使用有意义的参考点非常重要。例如,对于对数变换,参考点为 1。事实上,当使用对数刻度时,geom_bar()
自动将条形的底数置于 1。此外,切勿使用具有变换刻度的堆叠条形,因为缩放发生在堆叠之前。因此,当使用变换后的比例进行堆叠时,条形的高度将是错误的。
默认情况下,占据相同 x
位置的多个条将通过 position_stack()
堆叠在一起。如果您希望躲避它们side-to-side,请使用position_dodge()
或position_dodge2()
。最后,position_fill()
通过堆叠条形然后将每个条形标准化为具有相同的高度来显示每个 x
的相对比例。
方向
该几何体以不同的方式对待每个轴,因此可以有两个方向。通常,方向很容易从给定映射和使用的位置比例类型的组合中推断出来。因此,ggplot2 默认情况下会尝试猜测图层应具有哪个方向。在极少数情况下,方向不明确,猜测可能会失败。在这种情况下,可以直接使用 orientation
参数指定方向,该参数可以是 "x"
或 "y"
。该值给出了几何图形应沿着的轴,"x"
是您期望的几何图形的默认方向。
美学
geom_bar()
理解以下美学(所需的美学以粗体显示):
-
x
-
y
-
alpha
-
colour
-
fill
-
group
-
linetype
-
linewidth
在 vignette("ggplot2-specs")
中了解有关设置这些美学的更多信息。
geom_col()
理解以下美学(所需的美学以粗体显示):
-
x
-
y
-
alpha
-
colour
-
fill
-
group
-
linetype
-
linewidth
在 vignette("ggplot2-specs")
中了解有关设置这些美学的更多信息。
stat_count()
理解以下美学(所需的美学以粗体显示):
-
x
或者y
-
group
-
weight
在 vignette("ggplot2-specs")
中了解有关设置这些美学的更多信息。
计算变量
这些是由层的 'stat' 部分计算的,可以使用 delayed evaluation 访问。
-
after_stat(count)
bin 中的点数。 -
after_stat(prop)
分组比例
也可以看看
geom_histogram()
用于连续数据,position_dodge()
和 position_dodge2()
用于创建并排条形图。
stat_bin()
,它将数据存储在范围内并计算每个范围内的情况。它与 stat_count()
不同,stat_count()
计算每个 x
位置的事例数量(不分档到范围中)。 stat_bin()
需要连续的x
数据,而stat_count()
可用于离散和连续的x
数据。
例子
# geom_bar is designed to make it easy to create bar charts that show
# counts (or sums of weights)
g <- ggplot(mpg, aes(class))
# Number of cars in each class:
g + geom_bar()
# Total engine displacement of each class
g + geom_bar(aes(weight = displ))
# Map class to y instead to flip the orientation
ggplot(mpg) + geom_bar(aes(y = class))
# Bar charts are automatically stacked when multiple bars are placed
# at the same location. The order of the fill is designed to match
# the legend
g + geom_bar(aes(fill = drv))
# If you need to flip the order (because you've flipped the orientation)
# call position_stack() explicitly:
ggplot(mpg, aes(y = class)) +
geom_bar(aes(fill = drv), position = position_stack(reverse = TRUE)) +
theme(legend.position = "top")
# To show (e.g.) means, you need geom_col()
df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2))
ggplot(df, aes(trt, outcome)) +
geom_col()
# But geom_point() displays exactly the same information and doesn't
# require the y-axis to touch zero.
ggplot(df, aes(trt, outcome)) +
geom_point()
# You can also use geom_bar() with continuous data, in which case
# it will show counts at unique locations
df <- data.frame(x = rep(c(2.9, 3.1, 4.5), c(5, 10, 4)))
ggplot(df, aes(x)) + geom_bar()
# cf. a histogram of the same data
ggplot(df, aes(x)) + geom_histogram(binwidth = 0.5)
# Use `just` to control how columns are aligned with axis breaks:
df <- data.frame(x = as.Date(c("2020-01-01", "2020-02-01")), y = 1:2)
# Columns centered on the first day of the month
ggplot(df, aes(x, y)) + geom_col(just = 0.5)
# Columns begin on the first day of the month
ggplot(df, aes(x, y)) + geom_col(just = 1)
相关用法
- R ggplot2 geom_boxplot 盒须图(Tukey 风格)
- R ggplot2 geom_bin_2d 二维 bin 计数热图
- R ggplot2 geom_blank 什么也不画
- R ggplot2 geom_qq 分位数-分位数图
- R ggplot2 geom_spoke 由位置、方向和距离参数化的线段
- R ggplot2 geom_quantile 分位数回归
- R ggplot2 geom_text 文本
- R ggplot2 geom_ribbon 函数区和面积图
- R ggplot2 geom_hex 二维箱计数的六边形热图
- R ggplot2 geom_jitter 抖动点
- R ggplot2 geom_point 积分
- R ggplot2 geom_linerange 垂直间隔:线、横线和误差线
- R ggplot2 geom_path 连接观察结果
- R ggplot2 geom_violin 小提琴情节
- R ggplot2 geom_dotplot 点图
- 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_density_2d 二维密度估计的等值线
- R ggplot2 geom_map 参考Map中的多边形
- R ggplot2 geom_density 平滑密度估计
- R ggplot2 geom_abline 参考线:水平、垂直和对角线
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Bar charts。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。