首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带多个标志的ggplot

带多个标志的ggplot
EN

Stack Overflow用户
提问于 2017-04-18 01:26:47
回答 2查看 760关注 0票数 0

我有一个包括几个标志的基本数据集:

代码语言:javascript
运行
复制
library(ggplot2)
X<-c(seq(1:10))
Y<-c(2,4,6,3,5,8,6,5,4,3)
Flag1<-c(0,0,0,0,1,0,0,1,0,0)
Flag2<-c(0,0,0,0,60,0,0,0,0,60)
Flag3<-c(12,0,12,12,12,12,12,0,0,12)
Flag4<-c(0,0,0,0,40,0,0,40,0,0)

DF<-data.frame(X,Y,Flag1,Flag2,Flag3,Flag4)

每个旗帜类型(1-4)要么包含一个"0",要么包含一个特定于该标志类型的数字。我的目标是绘制上述x/y数据作为基本行图。

代码语言:javascript
运行
复制
p<-ggplot(DF, aes(x=X, y=Y)) +geom_line() +geom_point(col='black', size=1)

但要比地块上的重叠点来标记我有旗子的地方。理想情况下,旗帜点会稍微大一些,每种旗帜类型都会有不同的颜色。

我的一些旗帜点会重叠,所以我不确定有什么最令人愉悦的处理方法(也许是一个抵消,以防止点重叠?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-18 01:42:17

您可以尝试将数据从wide更改为long,即为标志类型和标志值创建列。然后,您可以按标志类型着色,并使用size作为标志值。避免重叠的一种方法是geom_jitter

代码语言:javascript
运行
复制
library(tidyr)
library(ggplot2)
DF %>% 
gather(flag, value, -X, -Y) %>% 
  ggplot(aes(X, Y)) + geom_line() + geom_jitter(aes(color = flag, size = value))

结果:

另一种选择是按标志类型对单独的绘图使用facet_grid

票数 1
EN

Stack Overflow用户

发布于 2017-04-18 01:44:55

代码语言:javascript
运行
复制
library(data.table)
library(ggplot2)

X<-c(seq(1:10))
Y<-c(2,4,6,3,5,8,6,5,4,3)
Flag1<-c(0,0,0,0,1,0,0,1,0,0)
Flag2<-c(0,0,0,0,60,0,0,0,0,60)
Flag3<-c(12,0,12,12,12,12,12,0,0,12)
Flag4<-c(0,0,0,0,40,0,0,40,0,0)

DF<-data.frame(X,Y,Flag1,Flag2,Flag3,Flag4)

DF.long <- melt(DF, measure.vars=c("Flag1","Flag2","Flag3","Flag4"), variable="Flag")

因此,数据组织为标志类型的单个列,对应值为单个列,即:

代码语言:javascript
运行
复制
X Y     Flag value
1 2    Flag1     0
2 4    Flag1     0
3 6    Flag1     0
4 3    Flag1     0
5 5    Flag1     1
6 8    Flag1     0
7 6    Flag1     0
8 5    Flag1     1
9 4    Flag1     0
0 3    Flag1     0
1 2    Flag2     0
2 4    Flag2     0
3 6    Flag2     0
4 3    Flag2     0
5 5    Flag2    60
...etc

然后,可将其绘制如下:

代码语言:javascript
运行
复制
p <- ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(size=2, aes(y=value, color=Flag))

geom_line()将继承原始ggplot()调用中的X和Y,并且geom_jitter()被设置为具有自己独特的y值(在上面的示例中名为" value“的列),每个标志都有一个唯一的颜色:

编辑:啊哈,值是对应于值的大小,这实际上要直观得多,我误解了;)

在neilfws的建议中,使用size=value:

代码语言:javascript
运行
复制
p2 <-ggplot(DF.long, aes(x=X, y=Y)) +geom_line() +geom_jitter(aes(size=value, color=Flag))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43462092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档