【问题标题】:How can I create ONE scatter plot that shows the scatter of a DV with different subgroups (Gender)?如何创建一个散点图来显示具有不同子组(性别)的 DV 的散点?
【发布时间】:2020-06-13 08:37:57
【问题描述】:

我正在尝试使用 x(游戏)和 y(M 和 F 的时间)创建散点图。在数据集(df5)中,分别记录了男性(Time M)和女性(Time F)的Time,如图:

View(df5)
Game   Year     Time M    Time F
1      1948     10.30     11.90
2      1952     10.40     11.50
3      1956     10.50     11.50
4      1960     10.20     11.00
5      1964     10.00     11.40
6      1968      9.95     11.08
7      1972     10.14     11.07
8      1976     10.06     11.08
9      1980     10.25     11.06
10     1984      9.99     10.97
11     1988      9.92     10.54
12     1992      9.96     10.82
13     1996      9.84     10.94
14     2000      9.87     10.75
15     2004      9.85     10.93 

如何创建一个散点图,以不同的颜色显示两个 DV 的散点图?

如果能提供任何帮助,我将不胜感激 :)

【问题讨论】:

    标签: r scatter-plot


    【解决方案1】:

    使用sapply 在空的plot 的两列中使用points,使用type="n"

    with(dat, plot(Year, Time.M, type="n", ylim=range(dat[3:4]), 
                   main="My Plot title", ylab="Time"))
    Y <- c("Time.M", "Time.F")
    sapply(seq(Y), function(y)  points(dat$Year, dat[[Y[y]]], pch=16, col=y + 1))
    legend("topright", legend=c("Time M", "Time F"), pch=16, col=2:3)
    

    【讨论】:

    • 感谢您的建议 - 不幸的是,当我尝试运行它时,它会返回以下内容:[Error in seq(Y) : object 'Y' not found] 我将其粘贴到我的工作区(已改编从上面):[with(df5.1, plot(game, wtM, type="n", ylim=range(df5.1[3:4]), main="Plot title", ylab="Winning Time" )) sapply(seq(Y), function(y) points(df5.1$game, df5.1[[Y[y]]], pch=16, col= y + 1)) legend("topright", legend=c("时间 M", "时间 F"), pch=16, col=2:3)]
    • @Vicci 哦,谢谢你告诉我! Y 是列名,我已经更新了代码。请立即尝试,您的散点图现在应该可以工作了!
    【解决方案2】:

    理想情况下,您应该在绘图前获取长格式数据:

    library(ggplot2)
    
    df5 %>%
      tidyr::pivot_longer(cols = starts_with('Time')) %>%
      ggplot() + aes(Year, value, color = name) + geom_point()
    


    您也可以单独绘制它们:

    ggplot(df5) + 
       geom_point(aes(Year, TimeM), color = 'red') + 
       geom_point(aes(Year, TimeF), color = 'blue') 
    

    数据

    df5 <- structure(list(Game = 1:15, Year = c(1948L, 1952L, 1956L, 1960L, 
    1964L, 1968L, 1972L, 1976L, 1980L, 1984L, 1988L, 1992L, 1996L, 
    2000L, 2004L), TimeM = c(10.3, 10.4, 10.5, 10.2, 10, 9.95, 10.14, 
    10.06, 10.25, 9.99, 9.92, 9.96, 9.84, 9.87, 9.85), TimeF = c(11.9, 
    11.5, 11.5, 11, 11.4, 11.08, 11.07, 11.08, 11.06, 10.97, 10.54, 
    10.82, 10.94, 10.75, 10.93)), class = "data.frame", row.names = c(NA, -15L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2021-11-04
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多