geom_smooth 具有假设的逆指数拟合
geom_smooth with hypothetical inverse exponential fit
拿下面的代码,我可以生成一个简单的直方图:
A <- c(rep(0,200),rep(1,1000),rep(2,200),rep(3,100),rep(4,50),rep(5,10))
B <- c(rep("Apple",200),rep("Orange",1000),rep("Pear",200),rep("Grape",100),rep("Banana",50),rep("Nuts",10))
df1 <- data.frame(A,B)
library(ggplot2)
g <- ggplot(df1, aes(A)) +
geom_bar() + theme_bw() +
ylim(0, 1500)
g
如何在不改变的情况下添加红色虚线拟合通过点 (A=1,y=2000), (2,200), (3,100), (4,50), (5,10) Y 限制?
新建 data.frame:
df2 <- data.frame(A=0:5, B=c(0, 2000, 200, 100, 50, 10))
为了完整起见,我还包括了 A = 0
。现在让我们绘制图表:
ggplot(df1, aes(A)) +
geom_bar() +
theme_bw() +
geom_line(data=df2, aes(x=A, y=B, color="red")) +
coord_cartesian(ylim = c(0, 1500))
关键是使用 coord_cartesian
,它在不丢弃数据的情况下重新缩放 y 轴,而不是 ylim
。这给你
使用问题中名为 df2
的数据,解决方案是用 approxfun
定义一个函数 f
,然后让 stat_function
绘制它的图形。
library(ggplot2)
f <- approxfun(df2$A, df2$B, rule = 2:1)
ggplot(df1, aes(A)) +
geom_bar() +
theme_bw() +
stat_function(fun = f, color = "red", linetype = "dashed") +
coord_cartesian(ylim = c(0, 1500))
数据
df2 <- list(c(1,2000), c(2,200), c(3,100), c(4,50), c(5,10))
df2 <- do.call(rbind.data.frame, df2)
names(df2) <- c('A', 'B')
拿下面的代码,我可以生成一个简单的直方图:
A <- c(rep(0,200),rep(1,1000),rep(2,200),rep(3,100),rep(4,50),rep(5,10))
B <- c(rep("Apple",200),rep("Orange",1000),rep("Pear",200),rep("Grape",100),rep("Banana",50),rep("Nuts",10))
df1 <- data.frame(A,B)
library(ggplot2)
g <- ggplot(df1, aes(A)) +
geom_bar() + theme_bw() +
ylim(0, 1500)
g
如何在不改变的情况下添加红色虚线拟合通过点 (A=1,y=2000), (2,200), (3,100), (4,50), (5,10) Y 限制?
新建 data.frame:
df2 <- data.frame(A=0:5, B=c(0, 2000, 200, 100, 50, 10))
为了完整起见,我还包括了 A = 0
。现在让我们绘制图表:
ggplot(df1, aes(A)) +
geom_bar() +
theme_bw() +
geom_line(data=df2, aes(x=A, y=B, color="red")) +
coord_cartesian(ylim = c(0, 1500))
关键是使用 coord_cartesian
,它在不丢弃数据的情况下重新缩放 y 轴,而不是 ylim
。这给你
使用问题中名为 df2
的数据,解决方案是用 approxfun
定义一个函数 f
,然后让 stat_function
绘制它的图形。
library(ggplot2)
f <- approxfun(df2$A, df2$B, rule = 2:1)
ggplot(df1, aes(A)) +
geom_bar() +
theme_bw() +
stat_function(fun = f, color = "red", linetype = "dashed") +
coord_cartesian(ylim = c(0, 1500))
数据
df2 <- list(c(1,2000), c(2,200), c(3,100), c(4,50), c(5,10))
df2 <- do.call(rbind.data.frame, df2)
names(df2) <- c('A', 'B')