当计数不是数据集中的列时在 ggplot 中使用 expand_limits (R)
Using expand_limits in ggplot when counts are not a column in the dataset (R)
我有一个数据集,我需要绘制一个条形图来显示某列不同结果的计数。对于这个例子,我使用的是 mtcars 数据集。
当我第一次尝试这样做时,我发现条形上的标签在顶部被切断,所以我使用 expand_limits 参数给它们更多 space。由于我希望能够将此代码用于刷新数据,因此限制可能会改变,这就是我使用 max() 函数的原因。
mtcars_cyl_counts <- as.data.frame(table(mtcars$cyl))
colnames(mtcars_cyl_counts)[1:2] <- c("cyl", "counts")
mtcars_cyl_counts %>%
arrange(desc(counts)) %>%
ggplot(aes(x = reorder(cyl, -counts), y = counts)) +
geom_bar(stat = "identity") +
geom_text(aes(label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((mtcars_cyl_counts$counts) * 1.05))
这很好用,但创建一个单独的 table 计数似乎不必要地麻烦,并且使一些未来的代码更加复杂,所以我重做了这个:
mtcars %>%
group_by(cyl) %>%
summarize(counts = n()) %>%
arrange(-counts) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot() +
geom_bar(aes(x = cyl, y = counts), stat = "identity") +
geom_text(aes(x = cyl, y = counts, label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((counts) * 1.05))
但是,这个returns出现以下错误:
Error in data.frame(..., stringsAsFactors = FALSE) :
object 'counts' not found
我知道 'counts' 在技术上不在 mtcars 数据集中(这就是为什么如果我使用 mtcars$counts 它也不起作用),但它是我在代码的其他地方使用的定义。
那么,有没有一种方法可以编写它以使其起作用,或者有一种替代方法可以以适应不同数据集的方式扩展垂直限制?
(注意:在这些示例中,条形标签不会被切断,因为它们不是很大,但出于这个目的,我只需要扩大限制,这样细节对正在工作...)
如果这对梅根有帮助,
mtcars %>%
count(cyl) %>%
arrange(-n) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot(aes(cyl, n)) +
geom_text(vjust = -0.5, aes(label = n)) +
geom_bar(stat = "identity") +
expand_limits(y = max(table(mtcars$cyl) * 1.05))
我有一个数据集,我需要绘制一个条形图来显示某列不同结果的计数。对于这个例子,我使用的是 mtcars 数据集。
当我第一次尝试这样做时,我发现条形上的标签在顶部被切断,所以我使用 expand_limits 参数给它们更多 space。由于我希望能够将此代码用于刷新数据,因此限制可能会改变,这就是我使用 max() 函数的原因。
mtcars_cyl_counts <- as.data.frame(table(mtcars$cyl))
colnames(mtcars_cyl_counts)[1:2] <- c("cyl", "counts")
mtcars_cyl_counts %>%
arrange(desc(counts)) %>%
ggplot(aes(x = reorder(cyl, -counts), y = counts)) +
geom_bar(stat = "identity") +
geom_text(aes(label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((mtcars_cyl_counts$counts) * 1.05))
这很好用,但创建一个单独的 table 计数似乎不必要地麻烦,并且使一些未来的代码更加复杂,所以我重做了这个:
mtcars %>%
group_by(cyl) %>%
summarize(counts = n()) %>%
arrange(-counts) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot() +
geom_bar(aes(x = cyl, y = counts), stat = "identity") +
geom_text(aes(x = cyl, y = counts, label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((counts) * 1.05))
但是,这个returns出现以下错误:
Error in data.frame(..., stringsAsFactors = FALSE) : object 'counts' not found
我知道 'counts' 在技术上不在 mtcars 数据集中(这就是为什么如果我使用 mtcars$counts 它也不起作用),但它是我在代码的其他地方使用的定义。
那么,有没有一种方法可以编写它以使其起作用,或者有一种替代方法可以以适应不同数据集的方式扩展垂直限制?
(注意:在这些示例中,条形标签不会被切断,因为它们不是很大,但出于这个目的,我只需要扩大限制,这样细节对正在工作...)
如果这对梅根有帮助,
mtcars %>%
count(cyl) %>%
arrange(-n) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot(aes(cyl, n)) +
geom_text(vjust = -0.5, aes(label = n)) +
geom_bar(stat = "identity") +
expand_limits(y = max(table(mtcars$cyl) * 1.05))