精华内容
下载资源
问答
  • ggplot2绘图

    2019-10-04 08:54:23
    library(ggplot2) > p <- ggplot(data=mpg, mapping=aes(x=cty, y=hwy)) > p + geom_point() p <- ggplot(mpg, aes(x=cty, y=hwy, colour=factor(year))) > p + geom_point() 增加平滑曲线 > p + geom_point() +...

    基本语法:

    geom_XXXx(参数)——见R语言实战 p407-408

     

    几何函数常见选项(参数)

    color:对点、线、填充区域的边界进行着色

    fill:对填充区域着色

    alpha:颜色的透明度

    linetype:图案的线条    (从0(完全透明)到1(不透明))

    size:点的尺寸和线的宽度

    shape:点的形状

    position:绘制条形图或点等对象的位置(条形图:  dodge:分组的条形图并排;stacked:堆叠条形

                                                                                     图;fill:垂直堆叠分组条形图且高度相等

                                                                       点:   jitter:减少点重叠)

    binwidth:直方图高度

    notch:表示方块图是否为缺口(TRUE、FALSE)

    sides:地毯图的安置("b"=底部;“t”=顶部;“r”=右部;"bl"=左下部)

    width:箱线图的宽度

     

     

    1、点图
    library(ggplot2)
    > p <- ggplot(data=mpg, mapping=aes(x=cty, y=hwy))
    > p + geom_point()

    p <- ggplot(mpg,
    aes(x=cty, y=hwy, colour=factor(year)))
    > p + geom_point()

    增加平滑曲线
    > p + geom_point() + stat_smooth()

    2、直方图

    直方图
    > P <- ggplot(mpg,aes(x=hwy))
    p + geom_histogram()

    3、条形图

    条形图
    > p <- ggplot(mpg, aes(x=class))
    p + geom_bar()

    > class2 <- mpg$class; class2 <- reorder(class2,class2,length)
    > mpg$class2 <- class2
    > P <- ggplot(mpg, aes(x=class2))
    > p + geom_bar(aes(fill=class2))

    幵立方式
    > P + geom_bar(position='dodge')

    叠加方式
    > p+geom_bar(position='stack')

    相对比例
    > p+geom_bar(position='fill')

    分面显示
    > p+ geom_bar(aes(fill=class2))+facet_wrap(~year)

    4、饼图

    p <- ggplot(mpg, aes(x = factor(1), fill = factor(class))) + geom_bar(width = 1)

    p + coord_polar(theta = "y")

    5、箱线图

    p <- ggplot(mpg, aes(class,hwy,fill=class))
    p+geom_boxplot()

    6、小提琴图

    p + geom_violin(alpha=0.3,width=0.9)+
    geom_jitter(shape=21)

    7、二维直方图

    p + stat_bin2d()

    8、密度图

    >p + stat_density2d(aes(fill = ..level..), geom="polygon") +
    coord_cartesian(xlim = c(0, 1.5),ylim=c(0,6000))+
    scale_fill_continuous(high='red2',low='blue4')

     9、风向风速玫瑰图

    随机生成100次风向,并汇集到16个区间内 dir <- cut_interval(runif(100,0,360),n=16)
    #随机生成100次风速,并划分成4种强度 mag <- cut_interval(rgamma(100,15),4) sample <- data.frame(dir=dir,mag=mag)
    #将风向映射到X轴,频数映射到Y轴,风速大小映射到填充色,生成条形图后再转为极坐标形式即可 p <- ggplot(sample,aes(x=dir,y=..count..,fill=mag)) p + geom_bar()+ coord_polar()

    转载于:https://www.cnblogs.com/fangfang66/p/7872613.html

    展开全文
  • ggplot2 绘图

    2018-07-19 18:32:27
    # 对于长尾分布,你可以添加一个 ggplot 图层(如:scale_x_log10())来转换变量。 qplot (x = price/carat, data = diamonds) + scale_x_log10() + facet_wrap(~cut, scales = "free" )
    # 保存最近一次生成的图片
    ggsave('priceHistogram.png')
    # ggsave currently recognises the extensions eps/ps, tex (pictex),
    # pdf, jpeg, tiff, png, bmp, svg and wmf (windows only).

    facet_wrap(formula)
    facet_wrap(~variable)

    facet_grid(formula)
    facet_grid(vertical ~ horizontal)

    # 方法一
    pf <- read.csv('pseudo_facebook.tsv', sep = '\t')
    # 方法二
    pf <- read.delim('pseudo_facebook.tsv')
    
    # 分面处理
    qplot(x=dob_day, data=pf) + 
      scale_x_continuous(breaks = 1:31) +
      facet_wrap(~dob_month, ncol = 3)

    这里写图片描述

    # 限制x轴:方法一
    qplot(x=friend_count, data=pf, xlim=c(0, 1000))
    
    # 方法二
    qplot(x=friend_count, data=pf) +
      scale_x_continuous(limits = c(0, 1000))

    这里写图片描述

    # 设置每组的宽度
    qplot(x = friend_count, data = pf, binwidth = 10) +
      scale_x_continuous(limits = c(0, 1000),
                         breaks = seq(0, 1000, 50))

    这里写图片描述

    # 按照性别拆分直方图
    qplot(x = friend_count, data = pf, binwidth = 10) +
      scale_x_continuous(limits = c(0, 1000), breaks = seq(0, 1000, 50)) +
      facet_wrap(~gender)

    这里写图片描述

    # 删除 NA Values
    qplot(x = friend_count, data=subset(pf, !is.na(gender)), binwidth = 10) +
      scale_x_continuous(limits = c(0, 1000), breaks = seq(0, 1000, 50)) + 
      facet_wrap(~gender)

    这里写图片描述

    # 按照性别统计 friend 平均值
    > by(pf$friend_count, pf$gender, summary)
    pf$gender: female
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
          0      37      96     242     244    4923 
    --------------------------------------------------------- 
    pf$gender: male
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
          0      27      74     165     182    4917

    分析:女性的平均 friend_count 要高于男性,不管是中位数还是均值都大于男性。应该注意,中位数 指标比 均值 指标更可靠、稳定:因为friend_count 是右偏的,当右侧有很离谱的 friend_count 时,均值很容易会被拉向右方,而中位数却不受影响。

    > summary(pf$tenure)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
        0.0   226.0   412.0   537.9   675.0  3139.0       2 
    
    # 设置颜色
    qplot(x = tenure, data = pf,
          color = I('black'), fill = I('#099dd9'))

    这里写图片描述

    # create a histogram of tenure by year
    qplot(x = tenure/365, data = pf, binwidth = .25, 
          color = I('black'), fill = I('#f79420')) + 
      scale_x_continuous(breaks = seq(0, 7, 1), limits = c(0, 7))

    这里写图片描述

    # 增加x轴,y轴标签
    qplot(x = tenure/365, data = pf, binwidth = .25,
          xlab = 'Number of years using Facebook',
          ylab = 'Number of users in sample',
          color = I('black'), fill = I('#f79420')) + 
      scale_x_continuous(breaks = seq(0, 7, 1), limits = c(0, 7))

    这里写图片描述

    > summary(pf$age)
       Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      13.00   20.00   28.00   37.28   50.00  113.00 
    
    # 绘制年龄直方图
    qplot(x=age, data = pf, binwidth = 1,
          color=I('black'), fill=I('#5760ab')) +
      scale_x_continuous(breaks = seq(0, 113, 5))

    这里写图片描述

    # 分面时,使y轴按需要调节
    qplot(x = price, data = diamonds) + facet_wrap(~cut, scales = "free") 

    这里写图片描述

    # 分面时,使y轴按需要调节,对横坐标轴进行对数转换
    # 对于长尾分布,你可以添加一个 ggplot 图层(如:scale_x_log10())来转换变量。
    qplot(x = price/carat, data = diamonds) + 
      scale_x_log10() + 
      facet_wrap(~cut, scales = "free")

    这里写图片描述

    展开全文
  • 公众号先前若干篇文章已经介绍ggplot2绘图的基本方法(具体可以关注文末链接),为推动学习,今天介绍再次系统的一番。ggplot2包是R的一个作图用的最精彩的扩展包,它实现了“图形的语法”,将一个作图任务分解为若干...

    R语言最擅长绘图。R语言最擅长的绘图包是ggplot2,由于很多朋友没有接触过ggplot2,必须要对其语言方式有个初步的认识。所以入门学习是必须的。公众号先前若干篇文章已经介绍ggplot2绘图的基本方法(具体可以关注文末链接),为推动学习,今天介绍再次系统的一番。

    ggplot2包是R的一个作图用的最精彩的扩展包,它实现了图形的语法,将一个作图任务分解为若干个子任务,只要完成各个子任务就可以完成作图。在作常用的图形时,只需要两个步骤:首先将图形所展现的数据输入到ggplot()函数中,然后调用某个geom_xxx()函数,指定图形类型,如散点图、曲线图、盒形图等。

    如果需要进一步控制图形细节,只要继续调用其它函数,就可以控制变量值的表现方式(scale)、图例、配色等。这使得我们很容易做出基本的图形,在有需要时再深入学习,做出更为满意的图形。

    与基本R中的作图系统相比, ggplot2的作图有规律可循,作图结果直接达到出版印刷质量,除了可以按照一些既定模式做出常见种类的图形,也很容易将不同图形种类组合在一起,或者设计新颖的图形。基本R的作图结果通常不够美观,如果要将不同种类图形组合在一起比较困难,对设计新的图形类型支持也不够好。

    ggplot2 的绘图理念与基础的绘图有很大的不同,基础的绘图就好像是先铺好画布,然后在画布上画图,是一个平面的,而ggplot2打破了这种画图的方式 ,采用了图层的概念进行画图,先画好基础图,然后再往上一层一层的叠加图层,所以在进行ggplot2画图的时候,代码中会有大量的“+”,这就是对于图层的叠加。本章将大致的给大家介绍医学数据应用ggplot2基本的结构。

    ggplot2 图层元素

    1.数据(data):将要可视化的数据

    2.映射(aes):数据中的变量值

    3.几何对象(geom):如bar条形图,point散点图

    4. 统计变换(stats):对数据进行计算

    5.标度(scale):变量以什么形状、颜色映射到图形上

    6. 分面(facet):将数据拆开,进行分层画图

    7. 主题(theme):主题设定,与数据无关的图层可以通过这个函数实现。

    8. 注释 (annotate): 对图形增加文字类的注释

    ggplot()图层

    ggplot ()图层包括数据和映射。ggplot函数相当于一幅基本的画布,画者在上面绘制好坐标轴,设置好基本的格局和色彩、线条。

    geom_XXX() 图层

    geom_XXX() 指的是我们要绘制的图形类型,常见包括以下:

    geom_point()绘制散点图

    geom_bar()绘制条形图

    geom_line()绘制线图

    geom_histogram()绘制直方图

    geom_boxplot() 绘制箱式图

    geom_density() 绘制概率密度函数

    scale_ XXX 图层

    scale_ XXX 标度是一种函数,size对大小进行调整,shape对形状进行调整,fill、col对颜色进行调整,可根据自己喜好调整

    ggplot(data =数据 ,  aes(x =变量1 , y = 变量2,col=变量3)) +

         geom_point(stat = 'count',position=”dodge”)+  #计数、并排

         scale_fill_manual(values = c("颜色1","颜色2"))

    facet_grid() 图层

    facet_grid(...) 对图层进行分面,数据分成多个子集进行绘图

    ggplot(data =数据 ,  aes(x =变量1 , y = 变量2,col=变量3)) +

    geom_point(stat = 'count',position=”dodge”)+

    scale_colour_manual(values = c("颜色1","颜色2"))+

    facet_grid(变量4~变量5) #要求变量属于分类变量,分成多行多列的图

    theme() 图层

    theme() 是主题修改,是一个对绘图精雕细琢的过程, 主要对标题、坐标轴标签、图例标签等文字调整, 以及网格线、背景、轴的颜色搭配。

    theme(plot.title = element_text(size = , color =, hjust = , face = ))

    ggplot2的作图一般步骤为:

    · 准备数据,一般为数据框,且一般为长表,即每个观测时间占一行,每个观测变量占一列。

    · 载入R包,R包括可以通过tidyverse包整体载入。

    ·  将数据输入到ggplot()函数中,并指定参与作图的每个变量分别映射到哪些图形特性,比如映射为x坐标、y坐标、颜色、形状等。这些映射称为aesthetic mappingsaesthetics

    很多人不明白所谓的映射。其实映射,通俗来讲,就是告诉软件,这幅图所涉及到的变量,并且指出每个变量的用途。比如,x=gender,指的是x轴是性别;y=age,指的是y轴表示年龄大小,shape=location,指的是不同地区图标的形状不一样(比如城市用星号,农村用三角)

    ·   选择一个合适的图形类型,函数名以geom_开头,如geom_point()表示散点图。图形类型简称为geom。将ggplot()部分与geom_xxx()部分用加号连接。到此已经可以作图,下面的步骤是进一步的细化设定。

    ·   设定适当的坐标系统,如coord_cartesian()scale_x_log10()等。仍用加号连接。

    ·    设定标题和图例位置等,如labs()。仍用加号连接。

    这个流程的一个大致的模板为:

    p ggplot(data=<输入数据框>,

         mapping=aes(<维度>=<变量名>,

         <维度>=<变量名>, <...>))

    p +geom_<图形类型>(<...>) +

     scale_<映射>_<类型>(<...>) +

     coord_<类型>(<...>) +

     labs(<...>)

    其中<...>表示额外的选项。变量p包含做出的图形的所有数据与设定,变量名可以任意取。

    我接下来讲引用R语言自带数据库,以散点图为例,进行ggplot2绘图。

    本文数据集来自gapminder扩展包的gapminder数据集,有若干个国家不同年份的一些数据,包括所属洲、期望寿命、人口数、人均GDP。有1704个观测和6个变量。数据库的变量包括country(国家) 、continent(洲)、year(年)、lifeExp(期望寿命)、pop(人口数)、gdpPercap(人均GDP)

    library(gapminder)

    head(gapminder, 6)

    # A tibble: 6 x 6

    country     continent  year lifeExp      pop gdpPercap

    1 Afghanistan Asia       1952    28.8 8425333      779.

    2 Afghanistan Asia       1957    30.3 9240934      821.

    3 Afghanistan Asia       1962    32.0 10267083      853.

    4 Afghanistan Asia       1967    34.0 11537966      836.

    5 Afghanistan Asia       1972    36.1 13079460      740.

    6 Afghanistan Asia       1977    38.4 14880372      786.

    这个数据集有多个国家在多个年份的期望寿命与人均GDP值,作期望寿命对人均GDP的散点图,每个国家的每个年份作为一个点。散点图最重要的映射是x轴与y轴两个维度。

    1. 最基本的散点图

    首先调用绘图基本函数ggplot()函数,指定数据集,将人均GDP映射到x轴,将期望寿命映射到y轴,结果保存为一个R变量:

    p ggplot(data = gapminder,

     mapping =aes(

       x = gdpPercap,

       y = lifeExp))

    ggplot()的调用中,可以省略data =mapping =x =y =,写成:

    p ggplot(gapminder, aes(gdpPercap, lifeExp))

    ggplot函数,相当于一幅基本的画布,画者在上面绘制好坐标轴,设置好基本的格局和色彩、线条。

    在如上指定了数据和映射后,只要用geom_xxx()指定一个图形类型,并与ggplot()的结果用加号连接就可以作图了,如:

    p +geom_point()

    xy轴是最常见的映射,也可以将变量映射为颜色、符号、线型等,这时不需要指定具体的颜色、符号、线型,而是将变量映射为这些图形元素类型。

    02e20384e4c5671ed8d3fe7751a9dfe9.png

    2. 更多的美图

    指定数据集、指定映射、选择适当的图形类型就可以做出基本的图形,随后可以逐步对坐标系、坐标系刻度、标签与图例、配色等进行改善。实际上,ggplot2包已经提供了十分合理的预设值,用户只要进行一些必要的改动即可。

    作图步骤之间用加号连接,这是ggplot包特有的语法。例如,用相同的映射基于geom_smooth() 做出拟合曲线图:

    p +geom_smooth()

    ## `geom_smooth()` using method ='gam' and formula 'y ~ s(x, bs = "cs")'

    efa6458883aafb40a1f793e29ba740bf.png

    用相同的映射做出散点图并叠加拟合曲线图:

    p +geom_point() +geom_smooth()

    ## `geom_smooth()` using method ='gam' and formula 'y ~ s(x, bs = "cs")'

    959c508ca40d29f74a698583567f8681.png

    geom_smooth()的默认设置调用了gam()函数来拟合曲线,可以用geom_smooth()的参数选择不同的拟合方法,如直线拟合:

    p +geom_point() +geom_smooth(method="lm")

    c747567475866c130ab91ea9eff81b2e.png

    注意geom_xxx()函数计算所需的变量值是从ggplot()函数保存在变量p中的信息提取的。

    在以上的所有图形中, x轴变量(人均GDP)分布非正态,严重右偏,使得大多数散点重叠地分布在直角坐标系的左下角。将x轴用对数刻度可以改善,函数为scale_x_log10():

    p +geom_point() +

     geom_smooth(method="gam") +

     scale_x_log10()

    9ffe1a9d4e6ec735b011786da128f796.png

    广义可加模型拟合的曲线基本是一条直线。注意,对数刻度实际上是对原始数据进行对数变换,而geom_smooth()的拟合计算是在对数变换之后进行的。

    刚刚的图形的横坐标轴刻度不太友好,可以调用scales扩展包的适当函数进行改善,作为scale_x_log10()labels选项:

    p +geom_point() +

     geom_smooth(method="gam") +

     scale_x_log10(labels=scales::dollar)

    11945a3ffcd1c753966fee8a2af7a1a9.png

    scale_xxx()labels选项指定如何标出坐标刻度数字,参数值是一个函数对象,如果scales包中找不到适当的功能,可以自定义一个函数将数值转换为字符串。 scales包提供了comma,  datedollar,  math,numberordinalpvaluescientifictime 等坐标刻度值转换函数。

    4. 在geom_point()geom_smooth()加点简单元素

    geom_xxx()函数接受许多关于颜色、透明度、符号、线型的设置参数。比如,下面的程序指定了散点的透明度,以及散点图的颜色的粗细:

    p ggplot(data=gapminder, mapping =aes(   x = gdpPercap,   y = lifeExp))p +geom_point(color="chartreuse4",alpha=0.5) + geom_smooth(method="loess") + scale_x_log10(labels=scales::dollar)

    7436df3f11312f34a8f99298d6278b05.png

    当然,也可以对geom_smooth()玩一把

    +geom_point(color="chartreuse4",alpha=0.5+

     geom_smooth(color="cadetblue1", se =FALSE, size =2, alpha =0.3

    3a7370ecca7b5624e82b2ee1cbb92591.png

    程序中size指定了线的以毫米为单位的粗细, se = FALSE关闭了置信区间显示。用alpha =设置了透明度,取01之间的值,数值越小越透明。在有许多个点时适当设置透明度可以比较好地显示出重叠的点,重叠点越多点的颜色越深。虽然这里设置了固定的透明度,也可以在aes()中将透明度alpha映射到某个变量,使得该变量值大小用点的透明度表示。

    画线时可以用linetype参数指定线型, 0表示实线, 16分别表示不同的虚线线型。

    最后,来一个下面用labs()函数给图形加上适当的标题:

    +geom_point(color="chartreuse4",alpha=0.5+ geom_smooth(color="cadetblue1"se =FALSEsize =2alpha =0.3labs(   x ="人均GDP",   y ="期望寿命(年数)",   title ="经济增长与期望寿命",   subtitle ="数据点为每个国家每年",   caption ="数据来源: gapminder"  )

    b934b46f7c12b661a259b0f064ca6983.png

    3.颜色、符号、线型等映射

    ggplot()函数的mapping参数的aes()设定中将变量映射到xy轴,颜色、符号、线型等图形元素类型,也可以作为图形设置将某些图形元素设置为固定值。

    例如,用不同颜色表示不同大洲,就是将continent变量映射到color:

    p ggplot(data=gapminder,

     mapping =aes(

       x = gdpPercap,

       y = lifeExp,

       color = continent))

    程序中仅指定了将大洲映射到颜色维,并不具体指定所用的颜色。

    作带有局部多项式曲线拟合的散点图:

    p +geom_point() +

     geom_smooth(method="loess") +

     scale_x_log10(labels=scales::dollar)

    1fb291b5c6481cc64a96ce883aa26736.png

    可以看出,不同散点用了不同颜色表示其continent变量的值,五个大洲分别进行了曲线拟合,曲线使用了不同颜色但置信域颜色相同,使得难以认读。在图形右侧自动生成了颜色与continent变量值的对应关系图例。

    下面的图形仍分不同大洲作曲线拟合,并将置信区间阴影的颜色也用不同大洲区分,方法是在aes()中将colorfill都指定为变量continent:

    p ggplot(data=gapminder,

     mapping =aes(

       x = gdpPercap,

       y = lifeExp,

       color = continent,

       fill = continent))

    p +geom_point() +

     geom_smooth(method="loess") +

     scale_x_log10(labels=scales::dollar)

    ef4696ee33d3a6cf2a9d960af7d30097.png

    4. 在geom_xxx() 映射变量

    在前面的一个例图中,在ggplot()函数中将colorfill映射到了continent变量,使得不仅散点颜色代表了不同大洲,还使得每个大洲单独拟合了曲线。如果希望所有大洲拟合同一条曲线怎么办?

    在必要时,可以在geom_xxx()函数中用mapping = aes(<...>)单独指定变量映射。例如,下面的程序在geom_point()中将不同大洲映射为不同颜色,而不影响geom_smooth()中的颜色以及分组:

    p ggplot(data=gapminder,

     mapping =aes(

       x = gdpPercap,

       y = lifeExp))

    p +geom_point(mapping =aes(color = continent)) +

     geom_smooth(method="loess") +

     scale_x_log10(labels=scales::dollar)

    98add7206a3c086be57d457500578668.png

    也可以将一个分类变量映射到不同绘图符号。例如,取gapminder 2007年数据子集,将大洲映射到符号(shape)

    p

                mapping = aes(

                  x = gdpPercap,

                  y = lifeExp))

    p + geom_point(mapping =aes(shape = continent), alpha = 0.4, size = 4) +

     scale_x_log10(labels=scales::dollar)

    这种映射仅适用于点数比较少的情况,太多密密麻麻不好看(为此我们用了filter函数抽取2007年的数据),还用了size参数指定符号的大小(单位:毫米)。如果所有点使用同一符号并需要指定符号,可以在geom_point()中用shape参数指定,可以用025的整数值表示,比如19为实心点,也可以用字符串符号名称表示,如"circle"表示实心点。参见ggplot2帮助目录中的vignette ggplot2:ggplot2-specs

    65c52ba94c36354060195ecb84acf97d.png

    也可以将连续变量映射为渐变色。除了表示二元函数的等值线图以外这种方法并不利于读者认读。

    例如,将人口数取自然对数映射为渐变色:

    p ggplot(data=gapminder,

     mapping =aes(

       x = gdpPercap,

       y = lifeExp,

       color =log(pop)))

    p +geom_point() +

     geom_smooth(method="loess") +

     scale_x_log10(labels=scales::dollar)

    73ea3ba2dc6e87f10b9754583c0e6e59.png

    5.小图

    前面所有国家的图包含了过多的曲线, 使得图形表现得很拥挤。可以将一个作图区域拆分成若干个小块, 称为小图(facet), 按照某一个或两个分类变量的不同值将数据分为若干个子集, 每个数据子集分别在小图上作图。

    对于上面的例子, 可以将每个大洲的图形分别放置在一个小图上。小图不是一种变量映射, 而是一种图形摆放方法, 所以不设置在aes()函数内, 而是用facet_wrap()函数规定。 程序如:

    p 
                   mapping =aes(
                   x = gdpPercap,
                    y = lifeExp,
                 color= continent))
    p +geom_point() +
        geom_smooth(method="loess") +
         scale_x_log10(labels=scales::dollar)+
    facet_wrap(~ continent, ncol = 2)

    9b88578537feed4cdebcf797b0d7950c.png

    区分不同小图的标签写在每个小图的上方。可以用facet_wrap()参数strip_position和参数switch调整标签的上下左右。

    小图之间默认公用了横坐标和纵坐标且坐标范围保持一致。如果不保持一致, 读者可能会有误解。但是x轴或y轴映射为分类变量且不同小图的分类完全不同时, 可以令各小图中该轴的取值不统一。facet_wrap()选项scales默认为"fixed", 即所有小图的x轴、y轴都范围一致, 取"free_x"则允许各小图的x轴不统一, "free_y"允许各小图的y轴不统一, "free"允许各小图的x轴和y轴都不统一。

    facet_wrap()中可以用ncol参数指定小图的列数, 用nrow指定小图的行数。各个小图的次序应该设定为一定的合理次序, 比如用来分类的变量本身有序, 或者令各小图中的数据值有一定的增减次序。

    6.总结

    ggplot2的不仅仅是能够做一些固定格式的图形, 而是按照一种图形语法构建图形。小图功能可以将数据集分成若干子集作多幅小图, 每幅小图中, 有可以分层, 每层有不同类型的图, 各层叠加显示在一起。所以,分层语法作图结构如下:

    • 有一个主要的数据集, 以及从数据集变量到坐标位置、颜色、填充、大小、符号等的映射关系(aesthetics);

    • 有一到多个图层, 比如散点图和平滑曲线图层, 每个图层有几何对象、必要的统计变换、位置调整, 还可以有额外的数据集以及额外的映射关系;

    • 对每个映射关系有一个刻度(scaling), 对x、y维,一般需要线性变换,偶尔用到对数变换之类的其它变换, 颜色、填充等维度需要一些复杂的对应关系。无特殊需要时只要使用默认刻度;

    • 有一个坐标系统, 如直角坐标系、极坐标系、球面坐标系等, 一般只要使用默认的坐标系统;

    • 可以划分小图(facetting)。

    利用绘图语法既可以做出常见的统计图形, 也可以做出各种新颖的图形, 当然, 就像语法正确的语句不一定有意义, 用绘图语法做得新颖图形不一定有实际意义, 还是要按照可视化的一般原则做出能说服读者的图形

    本公众号R语言绘图相关推文

    1.30 天学会R DAY 17:R语言绘图入门

    2.30天学会R DAY18:ggplot2数据可视化(1)

    3.30天学会R DAY19:ggplot2:组间比较如何标注P值

    4.30天学会R DAY20:ggplot2 关联性数据图形绘制

    5.30天学会R DAY21:ggplot2 重复测量数据图形绘制

    6.30天学会R DAY22:ggplot2 快速画图

    f9c4e4b9202df39866640a16e3e28c23.gif

    663f11d814c6e2c8a0af56cd0787cb88.png

    展开全文
  • 原标题:ggplot2绘图之图例微调欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:...

    原标题:ggplot2绘图之图例微调

    欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。

    我们说一幅完整的图应包含至少4项元素,即:标题、坐标轴、图例和数据来源,在基于ggplot2图形的微调文中已经详细的介绍了图形的标题、坐标轴和数据来源的设置,包括属性设置和外观设置等。本文就详细为大家讲讲有关图例的设置,包括属性设置、位置设置、顺序设置、外观设置等。

    一、清除图例

    有时图例的存在并没有意义,如之前的图形中已经出现了图例,在之后的某些图中就没必要使图例存在;x轴或y轴已经表示了分类的各个水平(如盒形图),此时也没必要将图例保存下来。这里介绍两种清除图例的办法,即标度法和主题法。

    library(ggplot2)

    set.seed(1234)

    type

    region

    values

    df

    head(df)

    #盒形图保留图例是没有必要的

    ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot()

    接下来使用标度法和主题法将图例删除,标度法通过使用scale_fill_discrete()函数实现,只需将guide参数设置为FALSE即可;主题法就是通过them()函数,将参数legend.position设为'none'即可。这两方法可以达到相同的功效。

    ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot() + scale_fill_discrete(guide = FALSE)

    #或者

    ggplot(data = df, mapping = aes(x = type, y = values, fill = type)) + geom_boxplot() + theme(legend.position = 'none')

    上面的图只是举了个图例为填充色的例子,如果图例是由其他属性构成,如大小、形状、颜色、线型等,同样可以使用以上的标度法,只不过需要将对于的标度更改就可以了。下面就列出常用的标度出来:

    基于填充色属性:

    scale_fill_discrete() #离散变量填充色

    scale_fill_continuous() #连续变量填充色

    scale_fill_gradient() #连续变量色阶

    scale_fill_gray() #灰度填充色

    scale_fill_hue() #自定义画板填充色

    scale_fill_brewer() #自定义画板填充色

    scale_fill_manual() #自定义填充色

    基于颜色属性:

    scale_colour_discrete()

    scale_colour_continuous()

    scale_colour_gradient()

    scale_colour_gray()

    scale_colour_hue()

    scale_colour_brewer()

    scale_colour_manual()

    基于大小属性:

    scale_size_discrete()

    scale_size_continuous()

    scale_size_manual()

    scale_size_area()

    基于形状属性:

    scale_shape_discrete()

    scale_shape_continuous()

    scale_shape_manual()

    基于线型属性:

    scale_linetype_discrete()

    scale_linetype_continuous()

    scale_linetype_manual()

    如果图例是必不可少的,为了美观,可能需要对图例做更多的改动,如图例位置的摆放、顺序的重设定、外观设置等。下面就看看如何使我们的图例变得更具吸引眼球。

    二、修改图例位置

    有关图例位置的更改,可以通过主题theme()函数实现,只需要通过调整legend.position()参数的设定就可以随心所欲的摆放图例位置。

    library(dplyr)

    #数据汇总分析

    df2

    df3 % summarize(., Total = sum(values))

    head(df3)

    #默认情况下的图例

    p

    p

    #更改图例位置

    p + theme(legend.position='bottom')

    legend.position可以设置为顶部(top),底部(bottom)、左边(left)和右边(right)。发现图标在顶部或底部的话,原来的图形会被压缩,高度明显变矮。为了解决这样的问题,legend.position还可以设置图例的具体位置,即legend.position = c(x, y)。注意,这里的x和y的取值范围均为[0,1]。

    #将图例放到图形内部,并设置为左上角

    p + theme(legend.position=c(0,1))

    咦?这位置怎么跑的很奇怪?虽是左上角,怎么还跑到图形外面去了?因为默认情况下图例的中心点位置设在了(0,1)的位置,如果需要更改图例中心点位置,则需使用legend.justification = c(x, y)进行设置,如legend.justification = c(1,0)表示图例中心点在图例的左上角。下面使用legend.justification重新绘制一下图例的位置:

    p + theme(legend.position=c(0,1), legend.justification=c(0,1))

    Perfect!图例不再错误的偏移了。有没有发现不和谐的地方?图形的背景为灰色,而图例的背景为白色,明显感觉像是不专业的PS工作者,如何让图例融入到图形中呢?很简单,只需要进一步设置图例背景主题即可。

    p + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black'))

    其中,theme_bw()将原来的灰色背景设置为黑白背景,fill设置图例背景色为白色, colour设置图例边框为黑色。如果不需要边框色的话,就不需要指定颜色属性的值。

    三、修改图例内容的顺序

    如果我想把图例内容的顺序改一改,即West在East之上,该如何实现呢?ggplot2包仍然允许你添加少量的代码就可以实现目的。

    p + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black')) + scale_fill_discrete(limits = c('West','East'))

    哎?跟上一幅图相比,发现一个问题,虽然图例内容的顺序发生了变化,但原本的颜色跟着变化了,即原来East为粉红色变为了蓝色,原来West为蓝色变为了粉红色,而且条形图的顺序并没有跟着发生变化。在我看来颜色的变化并不是重点,重点是条形图的顺序纹丝不动,如果想让图例项目顺序和条形图顺序一致的话,该如何操作呢?实际也很简单,只需将因子顺序改变即可。

    ggplot(data = df3, mapping = aes(x = type, y = Total, fill = factor(region, levels = c('West','East')))) + geom_bar(stat = 'identity', position = 'dodge') + theme_bw() + theme(legend.position=c(0,1), legend.justification=c(0,1)) + theme(legend.background = element_rect(fill = 'white', colour = 'black')) + scale_fill_discrete(limits = c('West','East')) + labs(fill = 'region')

    四、图例内容顺序的整体逆转

    如何逆转图例的整体内容呢?同样很简单,只需使用guide()函数就可以轻松实现:

    #原始默认的图例内容顺序

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge')

    #实现整体图例内容的逆转

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + guides(fill = guide_legend(reverse = TRUE))

    五、修改图例标题和图例项目的内容

    使用labs()函数,通过设定fill、colour、shape、size、linetype等属性的值,就可以更改图例标题了。当然也可以通过标度方法达到相同的目的,以例子说明这两种方法的应用:

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + labs(fill = '类型by_labs')

    #或者

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + scale_fill_discrete(name = '类型by_scale')

    #当然也可以通过这种方式删除图例标题

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + labs(fill = '')

    #修改图例项目的内容

    ggplot(data = df3, mapping = aes(x = region, y = Total, fill = type)) + geom_bar(stat = 'identity', position = 'dodge') + scale_fill_discrete(labels = c('Level01','Level02','Man','Women','Children'))

    六、修改图例标题和图例内容的外观

    之前我们说过,修改图形标题、坐标轴标签和刻度标签的外观可以通过主题方式实现,这里同样也可以通过主题theme()函数实现图例标题和图例内容的外观。

    #默认情况下的图例

    p

    p

    #修改图例标题和图例内容的外观

    p + theme(legend.title = element_text(colour = 'steelblue', size = 15, face = 'bold.italic')) + theme(legend.text = element_text(colour = 'red', face = 'bold'))

    参考文献:

    R语言_ggplot2:数据分析与图形艺术

    R数据可视化手册

    转载请保留以下内容:

    本文来源自天善社区每天进步一点点2015老师的博客(公众号)。

    原文链接: https://ask.hellobi.com/blog/lsxxx2011/7573返回搜狐,查看更多

    责任编辑:

    展开全文
  • ggplot2绘图调用外部变量有两种方式: library(ggplot2) variable = ‘a’ #Using sym ggplot(df, aes(x = !!sym(variable)) + geom_histogram() #Using .data ggplot(df, aes(x = .data[[variable]])) + geom_...
  • 公众号先前若干篇文章已经介绍ggplot2绘图的基本方法(具体可以关注文末链接),为推动学习,今天介绍再次系统的一番。ggplot2包是R的一个作图用的最精彩的扩展包,它实现了“图形的语法”,将一个作图任务分解为若干...
  • 1. ggplot绘图ggplot绘图系统自有一套严密的绘图语法系统。(绘图) 语法表明统计图形就是一种从数据到几何形状 (点、线、柱) 的美学属性 (颜色、形状、大小) 的映射。... ➢ggplot2绘图的基本组成部分 组成data frame...
  • 经过前面ggplot2绘图原理的学习,我们了解到ggplot图形的本质都是散点图,因此让我们从一个散点图的案例开始学习,先看下图:point.pngA图为ggplot2默认输出的图形样式,而B图则是在geom_point点图的基础之上添加了...
  • R语言站点数据插值及ggplot2绘图 R语言站点数据插值及ggplot2绘图 setwd(“I:\hhhhh\”) rm(list = ls()) gc() library(stringr) library(ggplot2) library(RColorBrewer) library(metR) library(rgdal) library...
  • 文章目录R语言绘图——实用篇 ggplot2绘图绘制等值线图相关如何绘制等值线图插值,平滑插值插值,缺失值插值色条(色阶)划分图例的色条(色阶)修改,合理的参数值选用图例的色条(色阶)修改,刻度线修改无效或不显示的...
  • 该讲义详细讲述了R语言ggplot绘图方式,能够帮助我们根据自己的实际情况绘出理想图表
  • 原文地址:[zz]ggplot2绘图入门系列之一:导论作者:黄晶PKU本文转载 数据科学与R语言 http://xccds1977.blogspot.jp/2012/01/ggplot2.html 需翻墙! ggplot2绘图入门系列之一:导论 1 什么是ggplot2 ggplot2是...
  • ggplot2绘图--类别比较型图表 沈益 7/18/2019 library(ggplot2) library(RColorBrewer) library(reshape2) 类别比较型图标–柱形图系列 1. 单数据系列柱形图 # 绘图数据 mydata <- data.frame(Cut = c(...
  • ggplot2绘图三要素 1.data(通常为dataframe形式) 2.图形属性(用aes()函数添加,所绘制数据所对应的x,y轴、数据分组所用颜色等属性) 3.几何对象(用geom_someshape()添加。所绘制数据所使用的的几何形状,大小...
  • ggplot2绘图要素详解

    2020-11-29 02:14:45
    按照ggplot2绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。 数据(Data)和映射(Mapping) 几何对象...
  • R数据可视化_ggplot2绘图

    千次阅读 2018-12-27 16:56:37
    R语言可视化ggplot2之ggplot函数绘图入门 层(Layer) 第一层是数据层 第二层是美学层 第三层是几何层,是最基本的层 第四层是面,绘图面板划分成多少行列,对应一个分类变量 第五层是统计层 第六层是坐标...
  • 时间: 2018-07-31 ...3. ggplot2绘图系统 ggplot2绘图有很多的层: - Data:变量 - Aesthetics:美学层(x,y轴、颜色、大小、标签、形状、线宽等) - Geometries:几何客体层(散点图、线图、柱状图、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 973
精华内容 389
关键字:

ggplot2绘图