ggplot中的散点图,两个组中的一个数字变量

时间:2017-01-12 16:16:43

标签: r ggplot2 tidyverse

我想在ggplot2中创建一个散点图,它使用下面的数据集在x轴上显示男性test_scores,在y轴上显示女性test_scores。我可以轻松地创建一个geom_line图,分割男性和女性,并将日期(" dts")放在x轴上。

library(tidyverse)

#create data

dts <- c("2011-01-02","2011-01-02","2011-01-03","2011-01-04","2011-01-05",
"2011-01-02","2011-01-02","2011-01-03","2011-01-04","2011-01-05")

sex <- c("M","F","M","F","M","F","M","F","M","F")

test <- round(runif(10,.5,1),2)

semester <- data.frame("dts" = as.Date(dts), "sex" = sex, "test_scores" = 
test)

#show the geom_line plot
ggplot(semester, aes(x = dts, y = test, color = sex)) + geom_line()

似乎只有一个时间序列,ggplot2在宽格式数据方面比长格式更好。例如,我可以轻松地创建两列,&#34; male_scores&#34;和&#34; female_scores&#34;并将这些内容相互映射,但我想保持我的数据整齐和长格式。

干杯谢谢。

2 个答案:

答案 0 :(得分:3)

你过度整理了。整理数据不仅仅是尽可能长时间地制作数据的机制,而是使其尽可能广泛。

例如,如果您有动物目击的X和Y位置,则不会有两行,一行的“标签”列包含“X”,X坐标位于“值”列,另一行“ Y“在”标签“列中,Y坐标在”值“列中 - 除非您确实将数据存储在键值存储中,但这是另一个故事......

扩大您的数据并将男性和女性的测试分数放入test_core_maletest_score_female,然后它们就是散点图的x和y美学。

答案 1 :(得分:0)

保持数据长的问题在于,给定的Y值不会有相应的X值。原因是数据集的结构 -

         dts  sex  test_scores
1 2011-01-02   M        0.67
2 2011-01-02   F        0.78
3 2011-01-03   M        0.58
4 2011-01-04   F        0.58
5 2011-01-05   M        0.51

如果ypu要使用代码 -

ggplot(semester, aes(x = semester$test_scores[semester$sex=='M',] ,
                     y =  semester$test_scores[semester$sex=='F',], 
                     color = sex)) + geom_point()

GGplot会出错。主要原因是通过对男性得分进行分组,该子集没有相应的女性得分。您需要先将数据折叠到日期级别。正如你正确地指出的那样,在这一点上,它不是长格式的。

我建议为这一个创建广泛数据集的情节。有多种方法可以做到这一点,但这是一个不同的主题。