跟我一起ggplot2(1)

ggplot2

R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果。

qplot

加载qplot

library(ggplot2)

# 测试数据集,ggplot2内置的钻石数据
qplot(carat, price, data = diamonds)
dsmall <- diamonds[sample(nrow(diamonds), 100), ] #对diamonds数据集进行抽样

#1. 按color,size,shape的基本分类可视化
     #1.1 简单的散点图(利用color分类,不同颜色的钻石由不同颜色的点代表)

#1.2. 简单的散点图(利用shape分类,不同的切割方式由不同形状的点代表)

#2. 绘制不同类型的图表:geom参数

qplot(x,y,data=data,geom="")中的geom=""用来控制输出的图形类型

I. 两变量图

(1) geom="points",默认参数,绘制散点图(x,y)

(2) geom="smooth" 绘制平滑曲线(基于loess, gam, lm ,rlm,glm)

(3) geom="boxplot" 绘制箱线图 ,当x为属性变量(factor),y为数值变量时

II.单变量图

(4) geom="histogram",直方图

(5) geom="density",核密度估计图

(6) geom="bar",条形图barchart

III.时间序列

(7) geom="line",折线图,可用于时间序列(当x=date)

(8) geom="path",路径图(参见后文)

# 2.1 同时绘制散点图+平滑直线

qplot(carat, price, data = dsmall, geom=c("point","smooth"))

#参数调整:method=""等
     #(a). method = "loess", 默认平滑算法, 通过span=调整窗宽, span=0(波动) 到 span=1(光滑)

qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
      method = "loess",span=0.2)

# (b). method = "gam": GAM 在大数据时比loess高效,需要载入 mgcv 包

library(mgcv)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
      method="gam", formula = y ~ s(x))

# (c). method="lm", 线性平滑

qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
     method = "lm")

# method="lm",formula = y ~ ns(x, 3),三次自然样条,需要载入splines包

library(splines)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
      method = "lm", formula = y ~ ns(x, 3))

# method = "rlm", robust linear model, 受异常值影响小,需要载入MASS包

library(MASS)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),
      method = "rlm")

# 2.2:x为属性变量,y为连续变量,绘制boxplot

qplot(color, price/carat, data=diamonds,geom="boxplot")

# 2.3:单变量,直方图

qplot(carat, data = diamonds, geom = "histogram")

#2.4: 单变量,核密度估计图

qplot(carat, data = diamonds, geom = "density")

# 按不同颜色绘制的density图

qplot(carat, data = diamonds, geom = "density",colour=color)

# 2.5 条形图(柱状图)

#计数,求count(color)
qplot(color, data = diamonds, geom = "bar")

#加权,对每个求sum(carat),类似于excel里的数据透视图,按不同的color计算carat的总和
qplot(color, data = diamonds, geom = "bar", weight = carat)

#2.6. Time-series
qplot(date, unemploy / pop, data = economics, geom = "line")

#2.7. Path plot
#如果要查看失业率(unemploy / pop)与平均失业时间(uempmed)之间的关系,一个方法是利用散点图,但是这样做就会导致无法观察到随时间变化的趋势了,path plot利用颜色深浅来代表年份,随着颜色从浅蓝变成深蓝,可以观察到失业率与失业时间的关系的变化趋势。

#具体实现:先自定义函数year(),将字符串格式的时间转化为年
year <- function(x) as.POSIXlt(x)$year + 1900

#画出path plot,颜色按年份由浅到深
qplot(unemploy / pop, uempmed, data = economics,
      geom = "path", colour = year(date))

我们已经讨论了如何利用外观参数在同一图中比较不同分类的差异。而分面可以将不同的亚类放在不同的图中进行比较:

qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))

qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))

下面的图形在一开始的基础上添加了新的元素:分面,多个图层以及统计数据。分面和图层扩展了上面提到的数据结构:每一个分面的每一个图层都有属于自己的数据集。你可以将它想象成是一个三维的数组:分面构成了二维平面,然后图层给予其在新的维度上的扩展。在这个例子中,不同图层上的数据是一样的,但是从理论上来讲,不同的图层中可以有不同的数据。

qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()

ggplot

基本绘图类型:

这些几何元素是ggplot的基础。他们彼此结合可以构成复杂的图像。他们中的绝大多数对应特定的绘图类型。

geom_area()

geom_bar()

geom_line()

geom_point()

geom_polygon()

geom_text()

geom_tile()

> library("ggplot2")
> head(mpg)
  manufacturer model displ year cyl      trans drv cty
1         audi    a4   1.8 1999   4   auto(l5)   f  18
2         audi    a4   1.8 1999   4 manual(m5)   f  21
3         audi    a4   2.0 2008   4 manual(m6)   f  20
4         audi    a4   2.0 2008   4   auto(av)   f  21
5         audi    a4   2.8 1999   6   auto(l5)   f  16
6         audi    a4   2.8 1999   6 manual(m5)   f  18
  hwy fl   class
1  29  p compact
2  29  p compact
3  31  p compact
4  30  p compact
5  26  p compact
6  26  p compact
> p <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(year)))
> summary(p)
data: manufacturer, model, displ, year, cyl,
  trans, drv, cty, hwy, fl, class [234x11]
mapping:  x = cty, y = hwy, colour = factor(year)
faceting: facet_null()

然后就是几何对象和统计,简单的理解就是通过统计变换把前面的元素表现出来,因为统计变换的函数stat开头的默认有包含自己的几何图形,而几何图形函数geom又带有自己的统计变换,通常都能达到目的。

p + geom_point()  #散点图

ggplot(mpg, aes(x = displ)) + geom_histogram(aes(y = (..count..)), fill = "steelblue", colour = "#808080", bin = 0.1)  #直方图

ggplot(mpg, aes(y = displ, x = factor(cyl), fill = factor(cyl))) + geom_boxplot()  #盒图

ggplot(diamonds, aes(carat, price)) + stat_bin2d()  #二维密度图

p + geom_point() + stat_smooth(method = "lm", se = F)

ggplot(mpg, aes(x = cty, y = hwy)) + geom_point(aes(colour = factor(year))) + stat_smooth(method = "lm", se = F)  #请注意两种方式的区别

ggplot(mpg, aes(y = hwy, x = class, colour = class)) + geom_boxplot() + geom_jitter(alpha = 0.3) +
    theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, colour = "black"))

ggplot(mpg, aes(x = displ)) + stat_bin(aes(y = ..density.., fill = factor(year)),
    colour = "#909090") + stat_density(aes(ymax = "density", colour = factor(year)),
    geom = "line", size = 1.2) + facet_wrap(~year, ncol = 1)

ggplot2中的基本概念

将数据中变量映射到图形属性。映射控制了二者之间的关系。

标度:标度负责控制映射后图形属性的显示方式。具体形式上来看是图例和坐标刻度。scale和mapping是紧密相关的概念。

几何对象(Geometric):几何对象代表我们图中看到的图形元素,如点、线、多边形等。

统计变换(Statistics):对原始数据进行某种计算,例如二元散点上加上一条回归线。

坐标系统(Coordinate):坐标系统控制坐标轴并影响所有图形元素,坐标轴可以进行变换以满足不同的需要。

图层(Layer):数据、映射、几何对象、统计变换等构成一个图层。图层可以允许用户一步步的构建图形,方便单独对图层进行修改。

分面(Facet):条件绘图,将数据按某种方式分组,然后分别绘图。分面就是控制分组绘图的方法和排列形式。

总结

关于ggplot2的绘图功能还有待进一步挖掘。

时间: 2024-11-13 08:16:21

跟我一起ggplot2(1)的相关文章

R数据可视化第二弹---ggplot2工具箱

ggplot2工具箱 ggplot2的图层化架构让我们以一种结构化的方法来设计和构建图形,这里每一小节解决一个特定的作图问题. 1.基本图形类型 geom_area()用于绘制面积图 geom_bar(stat="identity")绘制条形图,我们需要指定stat="identity",因为默认的统计变换会自动对值进行计数. geom_line()绘制线条图,从左到右连接 geom_point()绘制散点图 geom_polygon()绘制多边形 geom_tex

ggplot2绘制多图

参考链接:http://www.cnblogs.com/nxld/p/6065237.html ggplot2.multiplot是一个易于使用的功能,将多个图形在同一页面上使用R统计软件和GGPLOT2绘图方法.这个功能是从easyGgplot2包. 安装并加载easyGgplot2包,easyGgplot2 软件包可以安装如下: install.packages("devtools") library(devtools) install_github("easyGgplo

ggplot2:分面的介绍

1.分面 分面是指在一个页面上自动摆放多幅图形的技巧,也就是说可以让不同分类的图同时展示在一张图上,这样方便于数据之间的的比较.ggplot2提供了网格型(facet_grid)和封装型(facet_wrap)两种分面类型,下面就针对不同的两种分面进行介绍. 1.1 网格分面(facet_grid) 如果我们对图像什么也不改变,或者加上facet_null()则不会出现分面效果(如下所示). library("ggplot2") mpg2<-subset(mpg,cyl!=5&a

ggplot2 geom相关设置—分布图

分布在R中应该算是个比较重要的内容,而通过画图来展示数据的分布,可以更直观的让我们了解数据的分布情况 直方图 geom_histogram(mapping = NULL, data = NULL, stat = "bin", position = "stack", ..., binwidth = NULL, bins = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) 密度图 geom_densi

ggplot2 geom设置—散点图

散点图也是目前R中的常用的图形之一 geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity",  na.rm = FALSE, ...) 从参数来看基本上也是常规的参数 下面来看些具体例子 library(ggplot2) p<-ggplot(economics,aes(pop,psavert)) p+geom_point() p+geom_point(ae

R包——ggplot2(一)

关于ggplot2包(一) 关于ggplot2包(一) ggplot2基本要素 数据(Data)和映射(Mapping) 几何对象(Geometric) 标尺(Scale) 统计变换(Statistics) 坐标系统(Coordinate) 图层(Layer) 分面(Facet) 主题(Theme) 数据(Data)和映射(Mapping) 下面用diamonds的数据为例,由于数据很大,随机选取一个子集进行画图 > library(ggplot2)> data(diamonds)> s

用 ggplot2 绘制镜像条形图

#生成数据,用于演示 dat <- data.frame(   group = rep(c("Above1", "Above2", "Below1", "Below2"), each=10),   x = rep(c(seq(1, 37, by=4), seq(1, 37, by=4)+1), 2),   #注意,在处理实际数据时,需要将放在x轴下方的条形图的数据取反变为负数   y = c(runif(10, 0, 1

ggplot2——玫瑰图

更多内容请见:R.ggplot2.shiny 汇总 初始图样: library(ggplot2) dt = data.frame(A = c(2, 7, 4, 10, 1), B = c('B','A','C','D','E')) windowsFonts(myFont = windowsFont("楷体")) ## 绑定字体 p = ggplot(dt, aes(x = B, y = A, fill = B)) + geom_bar(stat = "identity&quo

使用ggplot2绘制风向风速玫瑰图

install.packages("ggplot2") library(ggplot2) # WindRose.R  http://stackoverflow.com/questions/17266780/wind-rose-with-ggplot-rrequire(ggplot2)require(RColorBrewer) plot.windrose <- function(data, spd, dir, spdres = 10, dirres = 30, spdmin = 0

R数据分析-------ggplot2工具箱二

本篇主要分为三部分: 揭示不确定性 统计摘要 添加图形注解 1.揭示不确定性 关于不确定的信息,怎么展示很重要,在ggplot2中共有四类几何对象可以用于这项工作,具体使用取决于x的值是离散型还是连续型的.这些几何对象列于下表中: 变量X类型 仅展示区间 同时展示区间和中间值 连续型 geom_ribbon geom_smooth(stat = "identity") 离散型 geom_errorbar geom_linerange geom_crossbar geom_pointra