r - ggplot scale_fill_* 在指南的顶部和底部强制标签
问题描述
我正在对 a 进行对数变换scale_fill
,并且刻度的顶部没有标记。对于线性刻度,这不是问题,因为它是等距的,但对于对数刻度,必须显示最大值。
鉴于该值未知,是否有某种方法可以强制执行该行为?
编辑:代表
suppressPackageStartupMessages(require(tidyverse))
diamonds %>%
mutate(price = price^2)
ggplot(aes(x = carat, y = depth, fill = price)) +
geom_point() +
scale_fill_continuous(trans = "log")
由reprex 包(v0.2.1)于 2019 年 3 月 6 日创建
期望的行为:价格刻度的顶端(浅蓝色)具有价格最大值的标签。
解决方案
breaks
参数 inscale_*_continuous
接受以下之一(强调添加):
NULL
不休息waiver()
对于转换对象计算的默认中断- 位置的数值向量
- 将限制作为输入并返回中断作为输出的函数
你可以试试这个:
p <- diamonds %>%
ggplot(aes(x = carat, y = depth, fill = price)) +
geom_point(shape = 21)
p +
scale_fill_continuous(
trans = "log",
breaks = function(x) seq(x[1], x[2], length.out = 5))
或者,如果您希望在日志转换后值均匀分布:
p +
scale_fill_continuous(
trans = "log",
breaks = function(x) exp(seq(log(x[1]), log(x[2]), length.out = 5)))
以上只是为了说明。根据您的用例,您可能希望针对不同的中断数、更好的数字格式(例如,四舍五入到特定的小数位数)等修改函数。
推荐阅读
- sql-server - 在 where 语句中为 null 不返回我的行
- mysql - 追随者/追随者关系
- amazon-web-services - CORS 请求未成功 - Cloudfront 和 ELB over HTTPS
- java - 尝试保存在内部位图图片中
- thymeleaf - 在 Thymeleaf 中翻译属性值
- ruby-on-rails - 使用 sqlite 启动 rspec 测试:memory: - “迁移待定”
- c++ - 为什么这种使用 boost::none 无法使用 nvcc 编译?
- c++ - 包含 jsoncpp 后编译错误
- sql - SQL 识别出现超过特定月份的记录
- java - 编写一个接受整数参数 n 并作为序列前 n 项之和返回的方法