首页 > 解决方案 > 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 日创建

期望的行为:价格刻度的顶端(浅蓝色)具有价格最大值的标签。

标签: rggplot2

解决方案


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))

情节 1

或者,如果您希望在日志转换后值均匀分布:

p + 
  scale_fill_continuous(
    trans = "log",
    breaks = function(x) exp(seq(log(x[1]), log(x[2]), length.out = 5)))

情节2

以上只是为了说明。根据您的用例,您可能希望针对不同的中断数、更好的数字格式(例如,四舍五入到特定的小数位数)等修改函数。


推荐阅读