我有一个图表,我正在绘制一些非常大的数字,数以百万计.我的观众不太可能理解科学记数法,所以我希望将y轴标记为"2M",例如200万.
这是一个例子.显示完整值(scales::comma)优于默认的科学记数法,但仍然有点忙:
library(ggplot2)
ggplot(as.data.frame(list(x = c(0, 200,100), y = c(7500000,10000000,2000000))),
aes(x = x, y = y)) +
geom_point() +
expand_limits( x = c(0,NA), y = c(0,NA)) +
scale_y_continuous(labels = scales::comma)
Run Code Online (Sandbox Code Playgroud)
我不想重新调整数据,因为我将包含具有各个数据点值的标签.
Joã*_*oão 39
我发现scales::unit_format()更具可读性:
library(dplyr)
library(scales)
library(ggplot2)
as.data.frame(
list(x = c(0, 200, 100),
y = c(7500000, 10000000, 2000000))) %>%
ggplot(aes(x, y)) +
geom_point() +
expand_limits(x = c(0, NA), y = c(0, NA)) +
scale_y_continuous(labels = unit_format(unit = "M", scale = 1e-6))
Run Code Online (Sandbox Code Playgroud)

vin*_*ief 15
在 scales 包中,该函数会label_number_si()自动使用最佳 SI 前缀“K”来缩放和标记值?10e3,“M”代表?10e6,“B”代表?10e9,“T”代表?10e12。看这里
所以:
library(ggplot2)
ggplot(as.data.frame(list(x = c(0, 200,100), y = c(7500000,10000000,2000000))),
aes(x = x, y = y)) +
geom_point() +
expand_limits(x = c(0, NA), y = c(0,NA)) +
scale_y_continuous(labels = scales::label_number_si())
Run Code Online (Sandbox Code Playgroud)
值得将该函数添加到 scale 可以在不指定breaks参数的情况下创建标签。如 中所述?scale_y_continuous,标签可以采用:
之一:
- NULL 表示无标签 waiver() 用于转换对象计算的默认标签
- 给出标签的字符向量(必须与中断长度相同)
- 一个将中断作为输入并返回标签作为输出的函数
创建示例函数很简单:
(function(l) {paste0(round(l/1e6,1),"m")})(5e6)
"5m"
Run Code Online (Sandbox Code Playgroud)
因此,解决方案可能是:
ggplot(as.data.frame(list(x = c(0, 200,100), y = c(7500000,10000000,2000000))),
aes(x = x, y = y)) +
geom_point() +
expand_limits( x = c(0,NA), y = c(0,NA)) +
scale_y_continuous(labels = function(l) {
paste0(round(l/1e6,1),"m")
})
Run Code Online (Sandbox Code Playgroud)
无需指定breaks参数。
在英国,我们倾向于使用小m。
我认为您可以手动设置labels&breaks
library(ggplot2)
ylab <- c(2.5, 5.0, 7.5, 10)
ggplot(as.data.frame(list(x = c(0, 200, 100), y = c(7500000, 10000000, 2000000))),
aes(x = x, y = y)) +
geom_point() +
expand_limits(x = c(0, NA), y = c(0, NA)) +
scale_y_continuous(labels = paste0(ylab, "M"),
breaks = 10^6 * ylab
)
Run Code Online (Sandbox Code Playgroud)

由reprex软件包(v0.2.1.9000)创建于2018-10-01
| 归档时间: |
|
| 查看次数: |
3707 次 |
| 最近记录: |