R的可视化以及ggplot2

ggplot2的优点
ggplot2可以让作图者根据ggplot2的作图语法来控制一下作图中的重要的因素,用起来可以说神通广大
ggplot2的主要元素:
1.data:数据
2,Aesthetic mapping:颜色、形状、点的大小与线的粗细
3,Statistical transformations:将数据做统计转换,比如概率密度,计数等等
4,Coordinate system:坐标轴的调整
5,position adjustments:作图目标的方位调整
6,faceting:可以在一张大图中做出多副子图

#R的可视化以及ggplot2
rm(list=ls())
getwd()
library(dplyr)
library(ggplot2)
library(readstata13)
library(ggalt) #ggalt包是ggplot2扩展模块配合ggplot2使用可以对ggplot2进行一些补充,使之可以做出更高级的图形
#install.packages("ggalt")
#提取数据库ggplot2中midwest数据,使用data函数提取ggplot2中的数据,第一个参数是数据名称
#第二个参数是数据所在包的名称
data("midwest",package="ggplot2")
midwest
#想知道美国中西部这些县总人口和面积之间的关系
#输出midwest所有的变量名
names(midwest)

#如果不用ggplot2,那我们可以用普通的plot方程来画散点图呈现两个变量之间的关系
#需要输入X轴及Y轴,xlab为X轴名称,ylab为y轴名称
plot(midwest$area,midwest$poptotal,xlab="Area",ylab = "Total population")
#查看列state有多少个不同值既有多少个州
unique(midwest$state)
#画出每个州的县人口和面积的关系
summary(midwest$area)
summary(midwest$poptotal)
#col为颜色参数,main为图形的名称,pch为点的形状,xlim为x轴的最大值与最小值
plot(subset(midwest,state=="IL")$area,subset(midwest,state=="IL")$poptotal,xlab="Area",ylab = "Total population",col="red",main = "Area vs Total population",pch=19,xlim  =c(0,0.11),ylim=c(0,6000000))
#在原来的图上新加点用points就可以了
points(subset(midwest,state=="IN")$area,subset(midwest,state=="IN")$poptotal,col="blue",pch=19)
points(subset(midwest,state=="MI")$area,subset(midwest,state=="MI")$poptotal,col="green",pch=19)
points(subset(midwest,state=="OH")$area,subset(midwest,state=="OH")$poptotal,col="yellow",pch=19)
points(subset(midwest,state=="WI")$area,subset(midwest,state=="WI")$poptotal,col="black",pch=19)

#给图增加图例使用legend,第一个参数是图例的位置,第二个参数legend:是图例名称,
#第三个参数col:是图例颜色,第四个参数pch:是图例的形状
legend("topleft",legend=c("IL","IN","MI","OH","WI"),col=c("red","blue","green","yellow","black"),pch = 19)

#使用ggplot2作图
#+符号代表此次作图还没有完成还要继续
gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state)) + #在这个c层中我们给不同的州定义不同的颜色
  #labs可以定义图及坐标轴的名称
  labs(title="Area vs Total population",x="Area",y="Total population")
gg

#把图中的点根据人口面积的大小而改变大小
gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #labs可以定义图及坐标轴的名称,subtitl为副标题
  labs(subtitle = "Area vs Population",title="Area vs Total population",x="Area",y="Total population")
gg

#使用scale_x_continuous设置x轴,可以设置X轴刻度名称
gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
    geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
   #重新定义x轴
   scale_x_continuous(breaks = c(0.025,0.05,0.075),labels = c("very small","medium","very large")) + 
   labs(subtitle = "Area vs Population",title="Scatterplot",x="Area",y="Total population")
gg
?geom_smooth
#查看面积和人口之间有没有线性关系
gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #用area作为x,poptotal作为y来做一条线性方程回归曲线method为显示线的方法,lm表示线性方程,se为显示置信区间,size为设置线的粗细
  geom_smooth(method="lm",se = T,size=1) +
  #重新定义x轴
  scale_x_continuous(breaks = c(0.025,0.05,0.075),labels = c("very small","medium","very large")) +
  labs(subtitle = "Area vs Population",title="Scatterplot",x="Area",y="Total population")
gg

#现在感觉总体确实不是特别明显,查看按照州把这一副大图变成五副小图

gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #用area作为x,poptotal作为y来做一条线性方程回归曲线method为显示线的方法,lm表示线性方程,se为显示置信区间,size为设置线的粗细
  geom_smooth(method="lm",se = T,size=1) +
  #重新定义x轴
  scale_x_continuous(breaks = c(0.025,0.05,0.075),labels = c("very small","medium","very large")) +
  labs(subtitle = "Area vs Population",title="Scatterplot",x="Area",y="Total population") +
  #将所有县按照不同的state分成五个小图,在每个图上显示面积,ncol表示排序方式每行两个图
  facet_wrap(~ state,ncol=2)
plot(gg)

#设置背景,设置x轴标识的方向

gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #用area作为x,poptotal作为y来做一条线性方程回归曲线method为显示线的方法,lm表示线性方程,se为显示置信区间,size为设置线的粗细
  geom_smooth(method="lm",se = T,size=1) +
  #重新定义x轴
  scale_x_continuous(breaks = c(0.025,0.05,0.075),
                     labels = c("very small","medium","very large")) +
  labs(subtitle = "Area vs Population",title="Scatterplot",
       x="Area",y="Total population") +
  #更改图形的主题,backgroud表示背景,grid.major是表示粗的网格线,grid.minor细的网格线
  theme(panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        #设置x轴标识角度angle为65度,与x轴的位置vjust为0.6
        axis.text.x = element_text(angle = 65,vjust=0.6)) +
  #将所有县按照不同的state分成五个小图,在每个图上显示面积,ncol表示排序方式每行两个图
  facet_wrap(~ state,ncol=3)
plot(gg)
#另外,第一副图中,我们发现有一些县的人口总数特别大,我们想把这些名字进行标注
#首先我们把这些人口总数非常巨大的县按照我们的条件筛选出来
midwest_select <- filter(midwest,poptotal>1000000 & area > 0.01 & area < 0.1)

#作图

gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #用area作为x,poptotal作为y来做一条线性方程回归曲线method为显示线的方法,lm表示线性方程,se为显示置信区间,size为设置线的粗细
  geom_smooth(method="lm",se = T,size=1) +
  #重新定义x轴
  scale_x_continuous(breaks = c(0.025,0.05,0.075),
                     labels = c("very small","medium","very large")) +
  #给符合条件的点添加注释,注释内容为label,注释位置为x,注释所用的数据为data
  geom_text(aes(label = county, x=area + 0.01),data = midwest_select) +
  labs(subtitle = "Area vs Population",title="Scatterplot",
       x="Area",y="Total population") +
  #更改图形的主题,backgroud表示背景,grid.major是表示粗的网格线,grid.minor细的网格线
  theme(panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        #设置x轴标识角度angle为65度,与x轴的位置vjust为0.6
        axis.text.x = element_text(angle = 65,vjust=0.6)) 
 

gg

#把人口比较大的县圈出来

gg <- ggplot(midwest,aes(x=area,y=poptotal)) + #首先我们先在ggplot2中最底层定义我们想要使用的数据
  geom_point(aes(col=state,size=popdensity)) + #在这个图层中我们给不同的州定义不同的颜色,不同的人口密度点的大小不同
  #用area作为x,poptotal作为y来做一条线性方程回归曲线method为显示线的方法,lm表示线性方程,se为显示置信区间,size为设置线的粗细
  geom_smooth(method="lm",se = T,size=1) +
  #重新定义x轴
  scale_x_continuous(breaks = c(0.025,0.05,0.075),
                     labels = c("very small","medium","very large")) +
  #给符合条件的点添加注释,注释内容为label,注释位置为x,注释所用的数据为data
  geom_encircle(aes(x=area,y=poptotal),data = midwest_select,color="red",size=2,expand=0.02,s_shape=0.9)+
  geom_text(aes(label = county, x=area + 0.01),data = midwest_select)
#制作概率密度函数
g <- ggplot(midwest,aes(popdensity))
#fill表示填充的颜色,此时表示根据州的不同填充不同的颜色,alpha标识透明度
g + geom_density(aes(fill = factor(state)),alpha = 0.8) +
  labs(title = "Density plot",
       subtitle="population Density Grouped by state",
       x = "population Density",
       fill="state")
g

#做每个州有多少个县的图像
freqtable <- table(midwest$state)
df <- as.data.frame.table(freqtable)
g <- ggplot(df,aes(Var1,Freq))
#fill为填充颜色,width为宽度
g + geom_bar(stat = "Identity", width = 0.5, fill= "tomato2") +
  labs(title = "Bar Chart",
       subtitle="Number of Counties in Each State",
       x = "State") +
  theme(axis.text.x = element_text(angle=0,vjust=0.6))
g
?geom_bar


发布了39 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42712867/article/details/92705946