前几天看到群里有人问如何画一张类似下图的、带拟合线与误差的相关性图,这里找点数据来演示一下怎么画。

demo 找了点数字画了个例子,假设数据读进来是这样的两列:

Untitled

绘图的部分我用了这些

leg <- theme(title=element_text(size=15), 
             axis.text.x=element_text(size=14),
             axis.text.y=element_text(size=14),
             legend.text=element_text(size=14))
label_text <- paste0("r = ", round(cor(subdata$Na,subdata$K),2))
library(ggplot2)
ggplot(subdata, aes(x = log(Na), y = log(K))) +
  geom_point(size = 2,color = "#31705a") +
  stat_smooth(method = "lm", color = "#31705a")+
  theme_classic() +
  annotate("text", x=5.8, y=9, label= label_text) +
  leg

以上代码画出来的图如下: Untitled

其中各部分的解释如下

leg <- theme(title=element_text(size=15), 
             axis.text.x=element_text(size=14),
             axis.text.y=element_text(size=14),
             legend.text=element_text(size=14)) # 用于指定字体大小等,可以先忽略
label_text <- paste0("r = ", round(cor(subdata$Na,subdata$K),2)) # 用于计算相关系数r的值,并处理成标在图上的「r = xxx」的文本
library(ggplot2) # 用ggplot2包画图
ggplot(subdata, aes(x = log(Na), y = log(K))) + #指定画图的数据subdata,在aes(x = ,y = )中指定横纵坐标轴
  geom_point(size = 2,color = "#31705a") + #绘制散点部分,点的大小为2,颜色为浅绿色
  stat_smooth(method = "lm", color = "#31705a")+ #绘制拟合线部分,method = "lm" 使用线性拟合,颜色同前
  theme_classic() + # 使用ggplot的classic画图主题,是个只显示横纵坐标轴的主题
  annotate("text", x=5.8, y=9, label= label_text) + # 添加上文字标注,类型是"text",位置在x=5.8,y=9
  leg # 添加之前指定的字体大小部分,不关键