如何使用ggplot更改坐标轴上数字的格式?

8 浏览
0 Comments

如何使用ggplot更改坐标轴上数字的格式?

我正在使用R和ggplot来绘制一些数据的散点图,一切都很好,除了y轴上的数字以计算机风格的指数格式显示,即4e+05,5e+05等。这对我来说是不可接受的,所以我希望能将它们显示为500,000,400,000等。如果能得到正确的指数表示法也是可以接受的。

绘图的代码如下:

p <- ggplot(valids, aes(x=Test, y=Values)) +

geom_point(position="jitter") +

facet_grid(. ~ Facet) +

scale_y_continuous(name="荧光强度/任意单位") +

scale_x_discrete(name="测试重复") +

stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar")

非常感谢任何帮助。

0
0 Comments

问题原因:尝试使用scale_x_continuous函数更改x轴上数字的格式时,出现了一个错误,错误提示formatter是一个未使用的参数。

解决方法:需要加载scales包,并使用comma函数代替之前使用的函数。修改后的代码如下:

x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_x_continuous(labels = comma)

0
0 Comments

问题:如何在ggplot中更改坐标轴上数字的格式?

原因:在使用ggplot进行数据可视化时,有时需要更改坐标轴上数字的格式。默认情况下,ggplot会根据数据的范围和类型自动选择数字的格式,但有时我们需要自定义数字的格式以满足特定需求。

解决方法:以下是一种可以在坐标轴上使用正确的科学计数法表示数字的方法,可以应用于ggplot图表中。这个方法可以通过以下步骤实现:

1. 定义一个自定义函数`fancy_scientific`,该函数将数字转换为科学计数法的字符字符串表示:

fancy_scientific <- function(l) {
     # 将数字转换为科学计数法的字符字符串
     l <- format(l, scientific = TRUE)
     # 引用指数之前的部分以保留所有数字
     l <- gsub("^(.*)e", "'\\1'e", l)
     # 将'e+'转换为plotmath格式
     l <- gsub("e", "%*%10^", l)
     # 以表达式形式返回结果
     parse(text=l)
}

2. 使用`fancy_scientific`函数来设置坐标轴的标签:

ggplot(data=df, aes(x=x, y=y)) +
   geom_point() +
   scale_y_continuous(labels=fancy_scientific)

3. 如果不希望将0打印为"0 x 10⁺⁰",可以在`format(...)`行的下面添加以下代码:

l <- gsub("0e\\+00","0",l)

4. 如果想要特殊处理其他情况,可以在`format()`后直接添加更多的`gsub()`命令,并在单独的控制台中测试`format()`对你的情况返回的结果。

5. 如果希望按照论文通常使用的格式进行转换,可以在最后一个`gsub`命令之前添加以下代码:

# 删除指数后面的"+",如果存在。例如:(3x10^+2 -> 3x10^2)
l <- gsub("e\\+","e",l)
# 将1x10^或1.000x10^转换为10^
l <- gsub("\\'1[\\.0]*\\'\\%\\*\\%", "", l)

这样,就可以在ggplot中更改坐标轴上数字的格式了。

补充问题:如何根据轴刻度函数生成ggplot2自定义文本格式?

在这个问题的答案中,还有一个补充问题,可以在stackoverflow.com/questions/63477686/…上提问。

以上就是关于如何在ggplot中更改坐标轴上数字格式的原因和解决方法的整理。

0
0 Comments

问题的出现原因是用户想要改变ggplot中坐标轴上数字的格式。为了解决这个问题,用户可以使用scales包中的函数来格式化坐标轴刻度标签,然后将其添加到ggplot语句中,示例如下:

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma)

如果不想加载scales包,可以使用以下方式:

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)

令人惊讶的是,这样一个微不足道的问题竟然需要加载一个新的包。

另外,这个方法也适用于其他的ggplot2中的刻度标签,例如:

scale_y_log10(labels = scales::comma)

非常感谢这些提示!

虽然回答晚了点,但是你可以将任何函数传递给labels参数,例如:

scale_x_continuous(labels = function(x) format(x, big.mark = ","))

以上是解决该问题的方法。

0