用R语言做数据分析——lattice图形系统(二)
bigegpt 2024-10-12 05:08 7 浏览
分组变量
当一个lattice图形表达式含有条件变量时,将会生成在该变量各个水平下的面板。若我们想将结果叠加在一起,则可以将变量设定为分组变量。
假如我们想利用核密度图来展示手动挡和自动挡汽车的每加仑英里数的分布情况,可使用如下代码:
mtcars$transmission <- factor(mtcars$am, levels = c(0,1),
labels = c("Automatic","Manual"))
densityplot(~mpg,data = mtcars,
groups = transmission,
main="MPG Distribution by Transmission Type",
xlab = "Miles per Gallon",
auto.key = TRUE)
group选项默认将分组变量各个水平下的图形叠加到一起。绘制的点为空心圆圈,线为实线,水平信息用颜色来区分。图例或图例符号不会默认生成。选项auto.key=TRUE将可以创建一个摆放在图形上方的、初步的图例符号,我们可将所做的修改以列表形式添加到自动图例符号中。例如:
auto.key=list(space="right", columns=1, title="Transmission")
将把图例移到图形的右边,并在一个单独的栏中展示符号和图例标题。若想对图例进行更多控制,可使用key选项,下面再看一段示例代码:
library(lattice)
mtcars$transmission <- factor(mtcars$am, levels = c(0,1),
labels = c("Automatic", "Manual"))
#设定颜色、线和点类型
colors <- c("red","blue")
lines <- c(1,2)
points <- c(16, 17)
#自定义图例
key.trans <- list(title="Transmission",
space="bottom",columns=2,
text=list(levels(mtcars$transmission)),
points=list(pch=points,col=colors),
lines=list(col=colors,lty=lines),
cex.title=1,cex=.9)
#自定义核密度图
densityplot(~mpg,data = mtcars,
group = transmission,
main="MPG Distribution by Transmission Type",
xlab = "Miles per Gallon",
pch=points,lty=lines,col=colors,
lwd=2,jitter=.005,
key=key.trans)
此处,图形符号、线条类型和颜色都设定为向量。每个向量的第一个原色都会被应用到分组变量的第一个水平上,第二个元素应用到第二个水平上,依此类推。创建一个图例选项的列表对象。选项设定了图例以两栏形式摆放在图形下方,并包含水平名称、点符号类型、线条类型和颜色。
densityplot()函数使用了相同的绘图符号、线条类型和颜色,同时还增加了线条粗细和扰动程度以改善图形外观。最后,图例符号设置使用的是之前定义的列表值。这种为分组变量设定图例的方式具有很大的灵活性。实际上,我们可以创建不止一个图例,并将它们摆放到图形不同的区域。
图形参数
之前我们学习了如何利用par()函数查看和设置默认的图形参数,不过它们只对R语言中简单的图形系统有效,对于lattice图形来说是无效的。在lattice图形中,lattice函数默认的图形参数包含在一个很大的列表对象中,我们可通过trellis.par.get()函数来获取,并用trellis.par.set()函数来修改。show.settings()函数可展示当前的图形参数设置情况。
以把默认图形符号修改为叠加点(即图形中包含了一个分组变量的点)为例,默认设置是空心圆圈,我们将赋予每组的点以各自的符号。
首先,查看当前的默认设置,并将它们存储到一个mysettings列表中:
>library(lattice)
>show.settings()
>mysettings <- trellis.par.get()
然后查看叠加点的默认设置值:
> mysettings$superpose.symbol
$alpha
[1] 1 1 1 1 1 1 1
$cex
[1] 0.8 0.8 0.8 0.8 0.8 0.8 0.8
$col
[1] "#0080ff" "#ff00ff" "darkgreen" "#ff0000"
[5] "orange" "#00ff00" "brown"
$fill
[1] "#CCFFFF" "#FFCCFF" "#CCFFCC" "#FFE5CC" "#CCE6FF"
[6] "#FFFFCC" "#FFCCCC"
$font
[1] 1 1 1 1 1 1 1
$pch
[1] 1 1 1 1 1 1 1
这里我们可以看到分组变量的每个水平都使用空心圆圈(pch=1)。定义了7个水平后,图形符号将会被循环使用。
最后,我们再做如下声明:
> mysettings$superpose.symbol$pch <- c(1:10)
> trellis.par.set(mysettings)
> show.settings()
此时lattice图形将对分组变量的第一个水平使用符号1(空心圆圈),第二个使用符号2(空心三角形),依此类推。另外,我们对分组变量的10个水平的符号都进行了定义,而不是7个。这种图形设置效果将会一直存在,直到关闭图形设备。我们可以按照这样的方式对其他任意图形参数进行修改。
页面摆放
在基础图形系统中,可以利用par()函数在一个页面中摆放多个图形。但lattice不识别par()设置,这时我们需要先将lattice图形存储到对象中,然后利用plot()函数中的split或position选项进行控制。
split选项将页面分割为指定行数和列数的矩阵,然后将图形放置到该矩阵中。split选项的格式为:
split = c(placement row, placement column, total number of rows, total number of columns)
来看以下代码:
> library(lattice)
> graph1 <- histogram(~height|voice.part,data = singer,
+ main="Heights of Choral Singers by Voice Part")
> graph2 <- densityplot(~height,data = singer,group=voice.part,
+ plot.points = FALSE, auto.key = list(columns=4))
> plot(graph1,split=c(1,1,1,2))
> plot(graph2,split=c(1,2,1,2),newpage=FALSE)
上述代码中,第一幅图放置到第二幅图的上面。具体来讲,第一个plot()函数把页面分割成一列两行的矩阵,并将图形放置到第一列、第一行中(自上往下、从左至右计数)。第二个plot()函数做同样的分割,但是把图形放置到第一列、第二行中。因为plot()函数默认启动一个新的页面,设定选项newpage=FALSE可禁止该操作。
使用position选项可以对大小和摆放方式进行更多的控制,例如:
library(lattice)
graph1 <- histogram(~height|voice.part,data = singer,
main="Heights of Choral Singers by Voice Part")
graph2 <- densityplot(~height,data = singer,group=voice.part,
plot.points = FALSE, auto.key = list(columns=4))
plot(graph1, position = c(0,.3,1,1))
plot(graph2, position = c(0,0,1,.3),newpage = FALSE)
来看此处的position=c(xmin,ymin,xmax,ymax),该页面的x-y坐标系统是矩形,x轴和y轴的维度范围都是从0到1,原点(0,0)在图形左下角。
在lattice图形中我们还可以改变面板的顺序,高级绘图函数的index.cond选项可以设定条件变量水平的顺序。以voice.part因子为例,因子水平有:
> levels(singer$voice.part)
[1] "Bass 2" "Bass 1" "Tenor 2" "Tenor 1" "Alto 2" "Alto 1" "Soprano 2" "Soprano 1"
添加的index.cond=list(c(2,4,6,8,1,3,5,7))将把1声放在一起,随后是2声部。当有两个条件变量时,在列表中包含两个向量即可,例如、index.cond=list(c(1,2),c(2,1))。
相关推荐
- 方差分析简介(方差分析通俗理解)
-
介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...
- 正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃
-
吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...
- Python数据可视化:箱线图多种库画法
-
概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...
- 多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读
-
作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...
- 方差分析 in R语言 and Excel(方差分析r语言例题)
-
今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...
- 可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图
-
前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...
- matplotlib 必知的 15 个图(matplotlib各种图)
-
施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...
- R ggplot2常用图表绘制指南(ggplot2绘制折线图)
-
ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...
- Python数据可视化:从Pandas基础到Seaborn高级应用
-
数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...
- Python 数据可视化常用命令备忘录
-
本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...
- 统计图的种类(统计图的种类及特点图片)
-
统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...
- 实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)
-
大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...
- 通过AI提示词让Deepseek快速生成各种类型的图表制作
-
在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...
- 数据可视化:解析箱线图(box plot)
-
箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...
- [seaborn] seaborn学习笔记1-箱形图Boxplot
-
1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)