当前位置:   article > 正文

R语言ggplot绘图

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)
  • 1
  • 2
  • 3

看看数组里的各种内容

class(diameter)
names(diameter)
head(diameter)
head(diameter,10)
  • 1
  • 2
  • 3
  • 4

方法一 用了中文宋体字

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

方法二 用了中文宋体字

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=冲泻质输沙量(亿吨)))

  • 1
  • 2
  • 3
  • 4

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

esquisse:::esquisser()   

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

做气泡图

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"))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、在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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

有一个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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/132078
推荐阅读
相关标签
  

闽ICP备14008679号