一、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轴标题,中文也能显现)