我想在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;并将这些内容相互映射,但我想保持我的数据整齐和长格式。
干杯谢谢。
答案 0 :(得分:3)
你过度整理了。整理数据不仅仅是尽可能长时间地制作数据的机制,而是使其尽可能广泛。
例如,如果您有动物目击的X和Y位置,则不会有两行,一行的“标签”列包含“X”,X坐标位于“值”列,另一行“ Y“在”标签“列中,Y坐标在”值“列中 - 除非您确实将数据存储在键值存储中,但这是另一个故事......
扩大您的数据并将男性和女性的测试分数放入test_core_male
和test_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会出错。主要原因是通过对男性得分进行分组,该子集没有相应的女性得分。您需要先将数据折叠到日期级别。正如你正确地指出的那样,在这一点上,它不是长格式的。
我建议为这一个创建广泛数据集的情节。有多种方法可以做到这一点,但这是一个不同的主题。