使用 ggplot2 的 `Slope Graph` 中的小数位
Decimal digits in `Slope Graph` with `ggplot2`
继几周前我提出的一个问题之后:
我面临另一个问题,涉及图表中报告的数值。甚至使用以下两个命令中的任何一个指定我需要的十进制数字(正好是 3):
y=round(y, digit = 3)
代码结尾
或
options(digits=3)
在整个代码的开头
图形输出没有给我所需的位数,但只给出了 0。在图形中,我想要 0.800(不是 0.8)和 0.940(不是 0.94)。看起来它删除了 0。在 R
的图形输出下方,我用红色圈出了我打算更改的数字。
完整代码如下:
library(dplyr)
library(ggplot2)
#options(digits=3)
theme_set(theme_classic())
#### Data
df <- structure(list(group = c("Ups", "Ups", "Ups", "Ups", "Ups"),
yshift = c(0, 0, 0, 0, 0), x = structure(1:5, .Label = c("1 day",
"2 days", "3 days", "5 days", "7 days"), class = "factor"),
y = c(0.108, 0.8, 0.94, 1.511, 1.905), ypos = c(0.10754145,
0.8, 0.94, 1.5111111, 1.90544651164516)), row.names = c(1L,
3L, 5L, 7L, 9L), class = "data.frame")
# Define functions. Source: https://github.com/jkeirstead/r-slopegraph
plot_slopegraph <- function(df) {
ylabs <- subset(df, x==head(x,1))$group
yvals <- subset(df, x==head(x,1))$ypos
fontSize <- 3
gg <- ggplot(df,aes(x=x,y=ypos)) +
geom_line(aes(group=group),colour="grey80") +
geom_point(colour="white",size=8) +
geom_text(aes(label=y), size=fontSize, family="American Typewriter") +
scale_y_continuous(name="", breaks=yvals, labels=ylabs)
return(gg)
}
## Plot
plot_slopegraph(df) + labs(title="Monomer content after days of heating")
我犯了什么错误或遗漏了什么?有没有其他方法强制0位?
提前感谢您的每一个最终回复或评论。
我喜欢这样的 scales
包函数(尽管您当然可以使用 formatC
或 sprintf
)。
我已将 plot_slopegraph
修改为在 geom_text()
中使用 label=scales::label_number(accuracy = 0.001)(y))
:
plot_slopegraph <- function(df) {
ylabs <- subset(df, x==head(x,1))$group
yvals <- subset(df, x==head(x,1))$ypos
fontSize <- 3
gg <- ggplot(df,aes(x=x,y=ypos)) +
geom_line(aes(group=group),colour="grey80") +
geom_point(colour="white",size=8) +
geom_text(aes(label=scales::label_number(accuracy = 0.001)(y)), size=fontSize, family="American Typewriter") +
scale_y_continuous(name="", breaks=yvals, labels=ylabs)
return(gg)
}
plot_slopegraph(df)
继几周前我提出的一个问题之后:
y=round(y, digit = 3)
代码结尾
或
options(digits=3)
在整个代码的开头
图形输出没有给我所需的位数,但只给出了 0。在图形中,我想要 0.800(不是 0.8)和 0.940(不是 0.94)。看起来它删除了 0。在 R
的图形输出下方,我用红色圈出了我打算更改的数字。
完整代码如下:
library(dplyr)
library(ggplot2)
#options(digits=3)
theme_set(theme_classic())
#### Data
df <- structure(list(group = c("Ups", "Ups", "Ups", "Ups", "Ups"),
yshift = c(0, 0, 0, 0, 0), x = structure(1:5, .Label = c("1 day",
"2 days", "3 days", "5 days", "7 days"), class = "factor"),
y = c(0.108, 0.8, 0.94, 1.511, 1.905), ypos = c(0.10754145,
0.8, 0.94, 1.5111111, 1.90544651164516)), row.names = c(1L,
3L, 5L, 7L, 9L), class = "data.frame")
# Define functions. Source: https://github.com/jkeirstead/r-slopegraph
plot_slopegraph <- function(df) {
ylabs <- subset(df, x==head(x,1))$group
yvals <- subset(df, x==head(x,1))$ypos
fontSize <- 3
gg <- ggplot(df,aes(x=x,y=ypos)) +
geom_line(aes(group=group),colour="grey80") +
geom_point(colour="white",size=8) +
geom_text(aes(label=y), size=fontSize, family="American Typewriter") +
scale_y_continuous(name="", breaks=yvals, labels=ylabs)
return(gg)
}
## Plot
plot_slopegraph(df) + labs(title="Monomer content after days of heating")
我犯了什么错误或遗漏了什么?有没有其他方法强制0位?
提前感谢您的每一个最终回复或评论。
我喜欢这样的 scales
包函数(尽管您当然可以使用 formatC
或 sprintf
)。
我已将 plot_slopegraph
修改为在 geom_text()
中使用 label=scales::label_number(accuracy = 0.001)(y))
:
plot_slopegraph <- function(df) {
ylabs <- subset(df, x==head(x,1))$group
yvals <- subset(df, x==head(x,1))$ypos
fontSize <- 3
gg <- ggplot(df,aes(x=x,y=ypos)) +
geom_line(aes(group=group),colour="grey80") +
geom_point(colour="white",size=8) +
geom_text(aes(label=scales::label_number(accuracy = 0.001)(y)), size=fontSize, family="American Typewriter") +
scale_y_continuous(name="", breaks=yvals, labels=ylabs)
return(gg)
}
plot_slopegraph(df)