作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 ggplot2 的 geom_bar(stat="identity")
绘制计数是一种有效的计数可视化方法。我想使用这种方法来显示我观察到的计数并将它们与预期计数进行比较我想通过使用 geom_step
来做到这一点在条形图上覆盖阶梯图图层。
但是,当我这样做时,我遇到了默认情况下条形图的位置被躲避的问题,但 geom_step
才不是。例如同时使用连续和离散因变量:
library(tidyverse)
test <- data_frame(a = 1:10, b = runif(10, 1, 10))
test_plot <- ggplot(test, aes(a, b)) +
geom_bar(stat="identity") +
geom_step(color = 'red')
test2 <- data_frame(a = letters[1:10], b = runif(10, 1, 10))
test2_plot <- ggplot(test2, aes(a, b, group = 1)) +
geom_bar(stat="identity") +
geom_step(color = 'red'))
gridExtra::grid.arrange(test_plot, test2_plot, ncol = 2)
geom_path
有一个
position =
选项但是尝试类似
geom_step(color = 'red', position = position_dodge(width = 0.5))
不做我想要的,而是将酒吧和楼梯线向中心压缩。另一种选择是像这样直接调整数据
geom_step(aes(a-0.5, b), color = 'red')
这对具有连续因变量的数据产生了接近可接受的结果。您还可以将阶梯线计算为函数并使用
stat_function()
绘制它。 .
geom_step()
是错误的方法,我想要得到的东西可以通过另一种方式实现,我对此也很感兴趣。
最佳答案
我认为解决这个问题最有效的方法是通过以下方式定义自定义几何体:
library(tidyverse)
geom_step_extend <- function(data, extend = 1, nudge = -0.5,
...) {
# Function for computing the last segment data
get_step_extend_data <- function(data, extend = 1, nudge = -0.5) {
data_out <- as.data.frame(data[order(data[[1]]), ])
n <- nrow(data)
max_x_y <- data_out[n, 2]
if (is.numeric(data_out[[1]])) {
max_x <- data_out[n, 1] + nudge
} else {
max_x <- n + nudge
}
data.frame(x = max_x,
y = max_x_y,
xend = max_x + extend,
yend = max_x_y)
}
# The resulting geom
list(
geom_step(position = position_nudge(x = nudge), ...),
geom_segment(
data = get_step_extend_data(data, extend = extend, nudge = nudge),
mapping = aes(x = x, y = y,
xend = xend, yend = yend),
...
)
)
}
set.seed(111)
test <- data_frame(a = 1:10, b = runif(10, 1, 10))
test2 <- data_frame(a = letters[1:10], b = runif(10, 1, 10))
test_plot <- ggplot(test, aes(a, b, group = 1)) +
geom_bar(stat = "identity") +
geom_step_extend(data = test, colour = "red")
test2_plot <- ggplot(test2, aes(a, b, group = 1)) +
geom_bar(stat = "identity") +
geom_step_extend(data = test2, colour = "red")
gridExtra::grid.arrange(test_plot, test2_plot, ncol = 2)
position_nudge
向左轻推期望值的步长曲线(在本例中为 -0.5); get_step_extend_data
计算缺失的(右侧的)段数据.它的行为灵感来自 ggplot2:::stairstep
这是geom_step
的底层函数; geom_step
与 geom_segment
与 list
在单独的 geom 中. 关于R - ggplot2 'dodge' geom_step() 重叠 geom_bar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43434725/
我可以得到一个“填充”geom_line与 geom_ribbon或 geom_area . geom_step 是否有等价物?不需要弄乱多边形/条形图或创建实际的步骤点?以下是一些示例数据: lib
我想绘制一个空心直方图,其中没有绘制垂直条,而只是一个轮廓。我找不到任何方法来使用geom_histogram来做到这一点。 geom_step+stat_bin 组合似乎可以完成这项工作。但是,ge
使用 ggplot2 的 geom_bar(stat="identity") 绘制计数是一种有效的计数可视化方法。我想使用这种方法来显示我观察到的计数并将它们与预期计数进行比较我想通过使用 geom_
我如何标记每个 geom_step系列( group )没有标记每个点?这是要标记的情节: 这是我得到的 ggrepel : ex <- structure(list(date = structure
我是一名优秀的程序员,十分优秀!