R语言ggplot2与plotly的基本介绍
ggplot2
以R包自带的数据mpg为例
library(ggplot2)
data0 <- mpg
ggplot(data = data0,mapping = aes(x=displ))+
geom_density() # 密度图
## 另一种形式
# ggplot()+geom_density(data = data0,mapping = aes(x=displ))
这里ggplot
提供整张图最下面的图层,并包含了一个名叫data0的参数data(data.frame类型)。函数aes
象征的映射参数mapping,其作用是将data按照使用者的设置映射到当前的图层上,即要如何显示数据。
函数geom_density
是第二个图层,如果此函数中不输入新的data和mapping,则此图层的相关输入都继承自底层。这里我们将data0$displ(可简写为displ)作为密度图的x显示出来,图如下:
为了美观,我们也可以作其他修改。这里的fill(图像颜色),color(线颜色),size(线粗细)是对于geom_density
绘图属性的修改,不是数据的映射属性,固写在aes
外面。
ggplot(data = data0)+
geom_density(aes(x=displ),fill="cornsilk", color="grey60", size=1.2)
如果我们想要在原有图上继续添加新的图层,可以继续用+
连接图层。这里我们加入含有data1的散点图geom_point
,由于输入了新的data和mapping,所以不再使用之前的参数。
data1 <- data.frame(x = c(1,4,6),y = c(0.1,0.03,0.02))
# x y
# 1 1 0.01
# 2 4 0.03
# 3 6 0.02
ggplot(data = data0)+
geom_density(aes(x=displ),fill="cornsilk", colour="grey60", size=1.2)+
geom_point(data = data1,aes(x=x,y=y))
当我们要展示多幅图时,可以用到gridExtra::arrangeGrob
以及ggplot2::aes_string
。借助lapply
,生成不同x的密度图
(arrangeGrob
会自动排图)
library(gridExtra)
colnames <- colnames(mpg)[c(3,8,9)]
f <- function(colname){
ggplot(mpg, aes_string(x=colname))+
geom_density(fill="cornsilk", color="grey40", size=.3)
}
plot(arrangeGrob(grobs=lapply(colnames, f)))
下面来画散点图。这里的color是data所要映射的属性之一,写在aes
里。ggtitle
,scale_x_continuous
等是设置坐标的函数,是最上端的图层。根据需要,中间可以为x,y,color,fill,shape等,后面为discrete,continuous,manual等。
p <- ggplot(mpg, aes(x=displ, y=hwy,color = cyl)) +
geom_point() +
ggtitle("Figure: mpg") +
scale_x_continuous(name ="x.displ") +
scale_y_continuous(name = "y.hwy") +
scale_colour_continuous(name = "cl.cyl")
plotly
最后我们试着用plotly作图。一种方法是直接用函数plotly::ggplotly
将ggplot2
图转化为plotly
图。
library(plotly)
ggplotly(p)
另一种方法是依照plotly
提供的绘图思路Data-plot pipeline,其特点是用%>%
来连接数据,图层(绘图),坐标等,类似于+
之于ggplot
。 add_trace
是通用的加图方式,type是需要的图片类型,symbol是点的形状,亦可用特殊化的add_markers
替换。
pp <- plot_ly(x = ~mpg$displ, type = "histogram")
add_markers(pp, x= ~c(1,3,5), y=~c(10,20,30),
symbol= I(4)) %>%
add_trace(pp, x= ~c(2,4,6), y=~c(10,20,30),
type = "scatter", symbol= I(5),
mode="markers") %>%
layout( title="Histogram", xaxis = list(title = "x.displ"),
yaxis=list(title= "y"))
其他
笔者没怎么用过Photoshop,但玩过RPG maker,用地图编辑器的解释ggplot2的绘图思路就是:
ggplot
提供一张地图的地面geom_XXX
提供了地图上的河流,树木分布,山势地形layout
是地图天上飞的云
【hhh 仅供参考】