2017-10-05 66 views
0
age <- rnorm(100, 0:100) 
freq <- rnorm(100, 0:1) 
char1<-stringi::stri_rand_strings(100, length = 1, pattern = "[abc]") 
char2<-stringi::stri_rand_strings(100, length = 1, pattern = "[def]") 
char3<-stringi::stri_rand_strings(100, length = 1, pattern = "[def]") 
char3<-stringi::stri_rand_strings(100, length = 1, pattern = "[ghi]") 
dftest <- data.frame(age, freq, char1, char2, char3) 
dflist <- list(dftest, dftest, dftest, dftest, dftest) 

这将创建一个示例数据框架,演示我遇到的问题。如何根据数据框的多列中的特征创建散点图?

我想为列表中的每个数据框创建年龄与频率的散点图,但是我想根据列“char#”中的值为点创建不同的颜色。我还需要一个单独的趋势线来表示这些独立特征中的每一个的值。

我也希望能够根据不同char列的不同特征的组合来做到这一点。其中一个例子是每种组合的3 * 3 = 9种颜色,每种颜色都有不同的趋势线。

这将如何完成?

我希望这是足够重复和清晰的。我只发布了几次,所以我仍然习惯了这种格式。

谢谢!

+0

在您所提供的数据,数据帧的都是相同的,所以即使你彩色他们不同的列表,你只会看到一组点。假设你有真实的数据看起来不同于这个,你首先需要为每个数据框添加一个id列,然后将它们全部“绑定”在一起,然后将颜色映射到id。对于您提供的示例,您的ID将为1-5 – Mako212

+0

查看ggplot2。听起来最适合这个问题。尝试使用方面。 – Jimbou

回答

0

首先让我们来创建一个数据帧,让我们展现出点用不同的颜色:

df2 <- data.frame(age=rnorm(200,0:100), 
    freq=rnorm(200,0:1),id=rep(1:2,each=100)) 

然后我们就可以plot像这样:

plot(dflist2$age,dflist2$freq, col=dflist2$id, pch=16) 

我们设置col(颜色)等到id(这将代表每个数据帧)。 pch是点类型(实心圆点)。

0

您可以尝试使用dplyr进行数据准备,并使用ggplot进行绘图。所有功能都通过tidyverse包装:

library(tidyverse) 
# age vs freq plus trendline for char1 
as.tbl(dftest) %>% 
    ggplot(aes(age, freq, color=char1)) + 
    geom_point() + 
    geom_smooth(method = "lm") 

enter image description here

# age vs freq plus trendline for combinations of char columns 
as.tbl(dftest) %>% 
    unite(combi, char1, char2, char3, sep="-") %>% 
    ggplot(aes(age, freq, color=combi)) + 
    geom_point() + 
    geom_smooth(method = "lm") 
# no plot as too many combinations make the plot to busy 
dflist %>% 
    bind_rows(.id = "df_source") %>% 
    ggplot(aes(age, freq, color=char1)) + 
    geom_point() + 
    geom_smooth(method = "lm", se=FALSE) + 
    facet_wrap(~df_source) 

enter image description here

+0

对不起,我可能应该在问题中提到过这个问题,但是可以在图上显示每个线性模型的Spearman相关p值和rho值吗? – user8384020

+0

是的,这是可能的。看看'ggpubr'或'ggsignify'包。请注意,“lm”是一种参数化方法。 – Jimbou

相关问题