r - 根据R中的计数最小值-最大值范围为直方图的计数(y轴)添加中断?
问题描述
我有一个ggplot
直方图。在 x 轴上,我有一个因子变量 (1,2,3,4,..)
在 y 轴上我有数。
我希望我的 y 轴从最小计数到最大计数,减 1。
我正在玩,scale_y_discrete
但我不能接受min(count)
,max(count)
并添加 = 1。
请指教。
df <- structure(list(user_id = c(1L, 1L, 3L, 3L, 4L, 4L, 4L, 6L, 8L,
8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L), obs_id = c(1L,
30L, 133L, 134L, 144L, 160L, 162L, 226L, 272L, 273L, 274L, 275L,
276L, 299L, 307L, 322L, 323L, 324L, 325L, 326L, 327L, 328L),
n = c(6L, 6L, 10L, 6L, 11L, 11L, 12L, 6L, 3L, 2L, 5L, 2L,
3L, 5L, 12L, 11L, 25L, 7L, 5L, 2L, 5L, 17L)), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -22L), vars = "user_id", drop = TRUE, .Names = c("user_id",
"obs_id", "n"), indices = list(0:1, 2:3, 4:6, 7L, 8:12, 13:21), group_sizes = c(2L,
2L, 3L, 1L, 5L, 9L), biggest_group_size = 9L, labels = structure(list(
user_id = c(1L, 3L, 4L, 6L, 8L, 9L)), class = "data.frame", row.names = c(NA,
-6L), vars = "user_id", drop = TRUE, .Names = "user_id"))
解决方案
您可以创建一个breaks
以轴的限制作为参数的函数。
从 的文档中scale_continuous
,breaks
可以采取:
将限制作为输入并返回中断作为输出的函数
这是一个示例,我从 0 到最大 y 轴限制 1。(我使用 0 而不是最小计数,因为直方图从 0 开始。)
函数中的x
是图中轴的限制,ggplot()
由用户计算或设置。
byone = function(x) {
seq(0, max(x), by = 1)
}
您可以将此函数传递给breaks
in scale_y_continuous()
。limits
直接从图中提取并传递给函数的第一个参数。
ggplot(df, aes(user_id)) +
geom_histogram() +
scale_y_continuous(breaks = byone)
推荐阅读
- c# - 尝试使用 LINQ 在 XML 文件中检索值
- java - 以流形式访问 StringWriter 内容
- ruby - 如何检查文件是否仍被当前线程锁定?
- javascript - 以数组的形式存储来自附加表单数据的 php 变量
- batch-file - 从修剪后的文件中覆盖同名文件
- grails - 重新编译分类中断 (UTF-8) 编码
- c# - 如何将具有两位数字年份的德语日期格式转换为 UTC 格式?
- android - 未知颜色问题
- c++ - bluetoothapis.h 的 SPP 端口数
- angular - 错误 。InvalidPipeArgument:管道“AsyncPipe”的“[object Object]”。无法从 Firebase 中提取数据