ggplot中的散点图,一个跨两组的数值变量
Scatter plot in ggplot, one numeric variable across two groups
我想在 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 对宽格式的数据比长格式的数据做得更好。例如,我可以轻松地创建两列,"male_scores" 和 "female_scores" 并将它们相互绘制,但我想保持数据整洁并采用长格式。
干杯,谢谢。
你 over-tidied。整理数据不仅仅是使其尽可能长的机制,它使其尽可能宽..
例如,如果您将动物目击的位置设为 X 和 Y,则不会有两行,其中一行的 "label" 列包含 "X" 并且 X 坐标位于 "value" 列和另一个 "label" 列中的 "Y" 和 "value" 列中的 Y 坐标 - 除非你真的将数据存储在 key-value 存储中,但那是另一个故事...
扩大你的数据,将男性和女性的测试分数放入 test_core_male
和 test_score_female
,然后它们就是你散点图的 x 和 y 美学。
保持数据长的问题在于,给定的 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
如果您使用代码 --
ggplot(semester, aes(x = semester$test_scores[semester$sex=='M',] ,
y = semester$test_scores[semester$sex=='F',],
color = sex)) + geom_point()
GGplot 会报错。主要原因是通过对男性分数进行子集化,该子集没有相应的女性分数。您需要先将数据折叠到日期级别。正如您正确指出的那样,此时这不是长格式。
我建议为此创建一个广泛的数据集。有多种方法可以做到这一点,但这是一个不同的主题。
我想在 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 对宽格式的数据比长格式的数据做得更好。例如,我可以轻松地创建两列,"male_scores" 和 "female_scores" 并将它们相互绘制,但我想保持数据整洁并采用长格式。
干杯,谢谢。
你 over-tidied。整理数据不仅仅是使其尽可能长的机制,它使其尽可能宽..
例如,如果您将动物目击的位置设为 X 和 Y,则不会有两行,其中一行的 "label" 列包含 "X" 并且 X 坐标位于 "value" 列和另一个 "label" 列中的 "Y" 和 "value" 列中的 Y 坐标 - 除非你真的将数据存储在 key-value 存储中,但那是另一个故事...
扩大你的数据,将男性和女性的测试分数放入 test_core_male
和 test_score_female
,然后它们就是你散点图的 x 和 y 美学。
保持数据长的问题在于,给定的 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
如果您使用代码 --
ggplot(semester, aes(x = semester$test_scores[semester$sex=='M',] ,
y = semester$test_scores[semester$sex=='F',],
color = sex)) + geom_point()
GGplot 会报错。主要原因是通过对男性分数进行子集化,该子集没有相应的女性分数。您需要先将数据折叠到日期级别。正如您正确指出的那样,此时这不是长格式。
我建议为此创建一个广泛的数据集。有多种方法可以做到这一点,但这是一个不同的主题。