library(ggplot2)
library(viridis)
library(scales)
#数据准备
#三列x、y、z分别表示x、y轴数据和填充数据
x=seq(1, 6000, 1)
y=exp(0.67*log(x)-1.2)
z=runif(n = 6000, min = -5, max = 25)
df=data.frame(x=x,y=y,z=z)
#计算ln(y)和ln(x)的线性拟合结果待用
lm_results=lm(log(y) ~ log(x), data = df)
b=as.numeric(lm_results[["coefficients"]][1])
a=as.numeric(lm_results[["coefficients"]][2])
r2=as.numeric(summary(lm_results)$r.squared)
#初步绘制一下数据点
p=ggplot(data=df, aes(x = x, y = y,color=z)) + geom_point()
#修改坐标轴显示方式
p=p+scale_x_log10(
breaks = c(1, 10, 100, 1000),
labels = trans_format("log10", math_format(10^.x)),
)+
scale_y_log10(
breaks = c(1, 10, 100)
)
#引入色板,修改填充色,并修改主题为白色,并移除网格线
p=p+scale_color_viridis()+theme_bw()+theme(panel.grid = element_blank())
#修改x和y轴标题以及图例标题
#文本的输入规则采用bquote语法
p=p+labs(
x=bquote('Q ( mm'~yr^-1*')'),
y=bquote(atop(CO[2]~'emission per land area'~phantom(), "(g C"~m^-2~yr^-1*')'))
)
#引入线性拟合线
#geom_smooth用于在图中自动添加数据拟合线。
p=p+geom_smooth(method=lm, se=FALSE)
#写入拟合结果
#annotate()用于在图中任意位置添加文本,需要输入文本坐标x和y,尺寸size,内容label。
#文本的输入规则依然采用bquote语法。其中'.()'的符号用于引用前面的拟合结果。
p=p+annotate("text", x = 20, y = 90, size = 4,
label = deparse(bquote(~Ln~CO[2]*e == ~ .(a) ~ Ln ~ Q ~ .(b))),parse = T)+
annotate("text", x = 20, y = 60, size = 4,
label = deparse(bquote(R^2 ==~ .(r2))), parse = T)
#调整图例位置到图中适当位置,调整图例方向为水平,并调整图例长度
p=p+theme(
legend.position = c(0.70, 0.15),
legend.direction = "horizontal",
legend.key.width = unit(0.50, "cm"),
legend.key.height = unit(0.25, "cm")
)
#调整图例标题文本位置和内容
p=p+guides(color = guide_colorbar(title.position = "top",title.hjust = 0.5))+
labs(color = bquote('Annual Temp.('*degree*'C)'))
#调整文字
p=p+theme(
text = element_text(size=11),
axis.text.x = element_text(size = 11),
axis.text.y = element_text(size = 11),
legend.title = element_text(size=9),
legend.text = element_text(size=9)
)
#打印
p
