R语言ggplot绘图

一、R语言ggplot2绘折线图

读取文件放置的位置,赋予数组名称

library(ggplot2)
setwd("E:\\Buffer\\My work\\ggplot_data")
diameter <- read.csv("0.031_0.062_ggplot_try.csv", stringsAsFactors = FALSE)

看看数组里的各种内容

class(diameter)
names(diameter)
head(diameter)
head(diameter,10)

方法一 用了中文宋体字

ggplot(data=diameter, aes(x=年份, y=冲悬比))+
theme(text=element_text(family="Songti SC",size=12,face = "bold"))
  geom_line()+ geom_point()

方法二 用了中文宋体字

ggplot()+
  geom_line(data=diameter,aes(x=年份, y=冲泻质输沙量(亿吨)))+ theme(text=element_text(family="Songti SC",size=12,face = "bold"))+
  geom_point(data=diameter,aes(x=年份, y=冲泻质输沙量(亿吨)))

方法三 调用可视化作图包 提取代码再修改

esquisse:::esquisser()   

ggplot(diameter) +
  aes(x = 年份, y = 冲泻质输沙量.亿吨.) +
  geom_line(size = 0.6, colour = "#B22222") +
  geom_point(size = 2, colour = "#B22222")+
  theme_gray()

做气泡图

esquisse:::esquisser()   
ggplot(diameter) +
  aes(x = 年份, y = 冲泻质输沙量, colour = 冲悬比, size = 冲泻质输沙量) +
  geom_point(shape = "circle") +
  scale_color_viridis_c(option = "viridis", direction = 1) +
  theme_gray()+
  theme(text=element_text(family="Songti SC",size=12,face = "bold"))

二、在ggplot中用乘幂(幂函数)的方法对散点进行曲线拟合

一般来说,简单的线性拟合和二次、三次等固定数学形式的拟合可以在geom_smooth当中完成。如下:

%曲线拟合
geom_smooth()
%线性拟合
geom_smooth(method = "lm",colour='#764C29',fill='#E7E1D7')

%其他拟合形式
geom_smooth(method="lm", formula= (y ~ exp(x)), se=FALSE, color=1)
geom_smooth(method="lm", formula= (log(y) ~ x), se=FALSE, color=2)
geom_smooth(method='lm',formula = y~x+ I(x^2),colour='red')

但没办法拟合一些复杂的函数,比如幂函数。

有一个R包basicTrendline,可以很方便实现,此包的优秀之处在于它可以一次性生成散点图的拟合曲线、拟合方程、判别系数R2和P值,并把这些内容显示在图上。

basicTrendline包可以使用函数“trendline”建立不同的拟合方程,只需要改变参数model的值就可以选择不同模型来拟合。参数“model”的值如line2P为一次函数,line3P为二次函数,log2P为对数函数,exp2P为指数函数,exp3P为指数函数(带常数项),power2P为幂函数,power3P为幂函数(带常数项)

%安装并引用包
#install.packages("basicTrendline")
library(basicTrendline)

%导入数据
setwd("E:\\Buffer\\My work\\ggplot_data")
Jianli1<- read.csv("water_flow_intensity_riverbed_Jianli1.csv", stringsAsFactors = FALSE)

%导入dataframe的第二列和第五列作为横纵坐标的变量
m<-Jianli1[1:15,2]
n<-Jianli1[1:15,5]

%用power3P来拟合x和y的散点
trendline(m,n,model="power3P")

结果如下:
在这里插入图片描述
但是很丑,需要对原代码进行稍微复杂的修改。

可以根据下面的网站修改参数,美化图像:

1、看trendline()相关参数
http://blog.sciencenet.cn/blog-651374-1126673.html

2、看plot相关参数,也可以用于trendline()中
https://www.jb51.net/article/207442.htm
https://www.jianshu.com/p/419d84e83548
http://blog.sciencenet.cn/blog-651374-979745.html

%加入科研字体
windowsFonts(HEL=windowsFont("Helvetica CE 55 Roman"),
             RMN=windowsFont("Times New Roman"),
             ARL=windowsFont("Arial"))
             
%把图画漂亮,并且使得输出SVG图形时中文不是方框
trendline(m,n,model="power3P",family="RMN",xlab="X取值",ylab="Y取值",linecolor="red",tck=-0.03,col = "orange",font=2,font.lab=2,cex.axis =0.9,las=1,pch=16,eSize =0.9,lty=2,text.col="blue",lwd=2,eDigit=5,summary=TRUE)

效果如下(我截图时去掉了xy轴标题,中文也能显现)
在这里插入图片描述

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值