【问题标题】:All possible qplots with different categorical variables具有不同分类变量的所有可能的 qplots
【发布时间】:2017-01-12 11:22:13
【问题描述】:

我使用以下代码绘制了变量 lsiete 和 lcinco 的图:

qplot(lsiete, lcinco, data=enc, color=LENGTHE)

但是,我还想通过以下因子变量为散点图着色以同时将其全部可视化:

> names(enc[,ind])
 [1] "SEX"      "RACE"     "MSTATUS"  "EDUC"     "POSITION" "SATSCHED" "TYPESCH"  "FLEX"     "URBRUR"   "HOURS"   
[11] "SCHOOL"   "ANJOB"    "TYPERES"  "LENGTHE"  "HOWLONG"  "REASONQ"  "REASONW"  "WHY" 

所以,我想要一个包含所有可能散点图的面板。

如何编写代码来做到这一点?

编辑:为了更清楚,lsietelcinco 不会改变,而是颜色的变量会改变

编辑 2:举一个可重现的例子。我用随机数据创建了以下数据框:

sn <- data.frame(a=rnorm(100),b=rnorm(100), cat1=sample(c('male', 'female'), 100, replace=TRUE),cat2=sample(c('U', 'AL'), 100, replace=TRUE),cat3=sample(c('AR', 'ML'), 100, replace=TRUE),cat4=sample(c('LM', 'KR'), 100, replace=TRUE))

我可以用a和b创建一个qplot,并根据cat2给颜色:

qplot(a,b,data=sn,color=cat2)

但是,我想始终保留 a 和 b,并根据其余的分类变量赋予颜色,以获得所有可能的散点图面板。


【问题讨论】:

  • 我们需要为ggplot准备数据,将其从宽转换为长。请参阅this post for more info,然后进行绘图。另外,如果给我们一个toy example data 进行测试,那就太好了。

标签: r ggplot2 visualization data-visualization


【解决方案1】:

最简单的方法是重塑数据并使用分面。这将创建一个包含四个面板和一个共享图例的图。

sn2 <- tidyr::gather(sn, 'cat', 'col', cat1:cat1.1)

ggplot(sn2, aes(a, b, col = col)) + geom_point() + facet_wrap(~cat)

或者,如果您更喜欢单独的图例,则需要创建四个图并将它们拼接在一起,如下所示:

plot_fun <- function(cat) {
  ggplot(sn, aes_(~a, ~b, col = cat)) + geom_point()
}

plot_list <- lapply(c(~cat1, ~cat2, ~cat3, ~cat1.1), plot_fun)
cowplot::plot_grid(plotlist = plot_list, align = 'hv')

【讨论】:

  • 您的第二个代码很好,但我对分类变量有问题,因为在实际数据中有很多分类变量,我不知道如何将我创建的字符串设置为参数。例如,我创建了:这个类别:[1]“~SEX”“~RACE”“~MSTATUS”“~EDUC”“~POSITION”“~SATSCHED”“~TYPESCH”“~FLEX”“~URBRUR”[10 ] "~HOURS" "~SCHOOL" "~ANJOB" "~TYPERES" "~LENGTHE" "~HOWLONG" "~REASONQ" "~REASONW" "~WHY" ,但是这个字符在 ggplot 中不像分类变量那样被识别。我该如何解决这个问题?
  • 我无法确定,因为我的代码适用于您的示例数据。这些变量是您 data.frame 中的因素还是字符向量?还是他们是数字?你得到什么输出?
  • 它们是因子变量,问题出在lapply(c(~cat1,~cat2,~cat3,~cat1.1),plot_fun),我不能手动写超过10000个因子像这样的变量。
  • aes_(~a, ~b, col = cat) 替换为aes_string('a', 'b', col = cat) 并使用names(data) 获取您的姓名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多