【问题标题】:Scatter plot in ggplot, one numeric variable across two groupsggplot中的散点图,两个组中的一个数值变量
【发布时间】:2017-01-12 16:16:42
【问题描述】:

我想在 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”并将它们相互绘制,但我希望保持数据的整洁和长格式。

干杯,谢谢。

【问题讨论】:

  • 经验法则:加宽或加长,直到一列恰好映射到一种美学。
  • 你可以用任何你喜欢的方式整理你的主力数据框,只需在绘制特定图形之前创建一个新数据框。

标签: r ggplot2 tidyverse


【解决方案1】:

你已经过度整理了。整理数据不仅是使其尽可能长的机制,而且是使其尽可能宽的机制..

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

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

【讨论】:

  • 优秀。我同样害怕。最大限度地追求整洁的数据并不总是最好的策略。谢谢
【解决方案2】:

保持数据较长的问题在于,给定的 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 会出现错误。主要原因是通过对男性分数进行子集化,该子集没有相应的女性分数。您需要首先将数据折叠到日期级别。正如您正确指出的那样,当时这不是很长的格式。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2020-02-29
    • 2019-12-05
    相关资源
    最近更新 更多