首页 > 解决方案 > 如何在数学上转换 ggplot 中图例上的默认标签?

问题描述

我有一个用 ggplot 制作的二维曲面图,我正在对其进行着色以显示它的第三维值。该数据在 Z 方向上的范围很广,因此我在进行插值以进行绘图之前对其进行了对数转换。

我喜欢绘图算法为中断选择的默认选项。但是,这些中断的标签现在是日志值。

当前的着色代码是:

scale_fill_viridis(breaks = waiver(), labels = waiver())

waiver() 是底层算法使用默认值的标志。理想情况下,我想做类似的事情

scale_fill_viridis(breaks = waiver(), labels = sprintf("%.1f", 10^waiver()))

Error in 10^my_breaks : non-numeric argument to binary operator但这会因错误而中断

如何在数学上将标签的默认值转换为对数转换之前的值?

标签: rggplot2

解决方案


像这样的东西怎么样:

your_function <- function(x){sprintf("%.1f", 10^as.numeric(x))}

labels = scales::trans_format("identity", your_function)

your_function将取 的倒数log10,有效地撤消对数变换。 scales::trans_format将通过应用它传递给它的任何函数来重新格式化给定的标签,在这种情况下your_function

您当然可以在内部定义重新格式化功能,trans_format但为了使事情尽可能清晰,我分两步完成。


推荐阅读