首页 理论教育 geom_path和geom_line函数的区别

geom_path和geom_line函数的区别

时间:2023-11-19 理论教育 版权反馈
【摘要】:用于绘制折线图的函数是geom_path和geom_line。二者的区别在于,geom_line会按照数据点在数据框中的位置来连线,即,先连接第一个和第二个点,再连线第二个和第三个点,因此,线条有可能折返。dat=read.csv # 课件中的文件# 注意:数据是按照时间顺序收集的,所以折线图的X轴应代表时间。但是这样画出来的折线图是没有意义的。本章第三节会给出说明# 用color、linetype等指向分组变量时,图例会自动

geom_path和geom_line函数的区别

用于绘制折线图的函数是geom_path和geom_line。二者的区别在于,geom_line会按照数据点在数据框中的位置来连线,即,先连接第一个和第二个点,再连线第二个和第三个点,因此,线条有可能折返。而geom_line则会先对数据点在X轴上的取值进行排序,并按顺序把点连接起来。例如,如果数据是按时间顺序收集的,并且也是按时间顺序从先到后放在数据框中的,那么我们用这两个函数中的哪一个都可以,但如果数据是按照被打乱的顺序放置的,我们就必须使用geom_line。

## 请通过以下这个例子观察geom_path和geom_line的区别

library(ggplot2)

ggplot()+geom_path(aes(x=c(3, 5, 1, 2, 4), y=c(10, 20, 30, 40, 50)))

ggplot()+geom_line(aes(x=c(3, 5, 1, 2, 4), y=c(10, 20, 30, 40, 50)))

下边来看geom_path/line有哪些一般参数。

data、mappingp、na.rm、show.legend:请参阅geom_point的说明。

linetype:线形,0=不绘制,1=实线(默认),2=短横,3=点状,4=点加短横, 5=长横,6=点加长横。另外,线形还可用单元长度表示,比如linetype="31",表示先画3个单位的线条,空1个单位;linetype="3141",表示先画3个单位的线条,空1个单位,再画4个单位的线条,再空1个单位。具体用法见例子。

color:线条颜色。一般情况下,每根线条使用一种颜色;但当linetype=1时,如果线条包含n个点并且有n个颜色被给出,则线条会带有渐变效果。见下文示例。

alpha:线条透明度。与color相仿,同一线条每一部分的透明度也可不同。

size:宽度,即线条的粗细,默认值为0.5。

lineend:线条两端的形状,可选择"butt"(默认)、"round"、"square",通常无需修改。

linejoin:线条拐角处的形状,可选择"mitre" 、"round"(默认)、"bevel",通常无需修改。

arrow:为线条加箭头。见下文示例。

orientation:见第三章第一节关于coord_flip的内容。

在本例中,我们使用的数据为美国月度工业生产指数(Industrial Production Index,IP Index)。

dat=read.csv("ip small.csv", row.names=1) # 课件中的文件

# 注意数据是按照时间顺序收集的所以折线图的X轴应代表时间但由于我们尚未学习变量为时间对象时的坐标轴画法所以暂且使用序号来代表时间顺序,也就是数据中的id一列

## 表面上看我们直接使用ggplot(dat)+geom_line(aes(x=ID, y=Value))绘制折线图即可但是这样画出来的折线图是没有意义的这是因为文件包含机械领域计算机和电子产品领域两方面的数据分别用Machinery和Computer这两个类别表示因此我们必须为每一个类别绘制一条折线

# 我们先以Area为Computer的数据为例

comp=ggplot(dat[dat$Area=="Computer", ])+labs(title="Industrial Production Index")

comp+geom_line(aes(ID, Value), linetype=2, color="red", alpha=0.5, size=1.5) # 改变线形颜色透明度粗细

comp+geom_line(aes(ID, Value), linetype="2141", size=1.5) # 用单位长度设定linetype图2-2-1a

comp+geom_line(aes(ID, Value), size=1.5, color=color Ramp Palette (c("red", "blue"))(24)) # 线条包含24个数据点因此要给出24个颜色最后一个颜色不会被使用),才能产生渐变图2-2-1b

图2-2-1 左=图a 用单位长度设定linetype,右=图b 渐变线条

## 箭头的画法arrow参数应指向由arrow函数生成的对象其中angle是箭头线与线段的夹角length是箭头线的长度默认为0.25必须用unit函数设置);ends用于设定在哪里画箭头可选择"last"默认)、"first""both";type用于设定形状"closed"为实心"open"为非实心

comp+geom_line(aes(ID, Value), arrow=arrow(angle=25, length= unit(0.20, "inches"), type="closed"))(www.xing528.com)

那么,如何同时为两组数据作图呢?我们这时要用到group参数。

p=ggplot(dat)

## 用group参数指定分组在本例中Area列指明了Value列的数值是属于"Machinery"领域还是属于"Computer"领域因此我们用group=Area就可为这两组数据分别画折线了

p+geom_line(aes(ID, Value, group=Area))

## 不过这样画出来的两个线条在属性上没有区别因此我们也许需要使用colorlinetype等aes参数

p+geom_line(aes(ID, Value, color=Area)) # 每组颜色不同

p+geom_line(aes(ID, Value, linetype=Area)) # 每组线形不同

# 注意这里用于分组的变量必须要么是character变量要么是factor变量那么如果使用连续变量来分组会有什么不同呢本章第三节会给出说明

# 用colorlinetype等指向分组变量时图例会自动显示如果你不想画图例,可加上show.legend=FALSE

#==========

# 练习

#==========

# 在需要同时画多组数据的情况下以下几种方法的效果完全相同

# 方法一用group

p+geom_line(aes(ID, Value, group=Area))

# 方法二把数据拆成两组再使用两个图层本章在后边会对复合图表进行讲解

dat1=dat[dat$Area=="Computer", ]

dat2=dat[dat$Area=="Machinery", ]

ggplot()+

geom_line(data=dat1, aes(ID, Value))+

geom_line(data=dat2, aes(ID, Value))

# 方法三在画图的时候使用索引

ggplot()+

geom_line(data=dat[dat$Area=="Computer", ], aes(ID, Value))+

geom_line(data=dat[dat$Area=="Machinery", ], aes(ID, Value))

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈