在ggplot中绘制具有多个变量的线条

Plotting lines with multiple variables in ggplot

我正在尝试使用 R 中的 ggplot2 基于 2 个变量绘制 2 条线。这是我正在使用的完整 Framingham 数据集中的一部分:

df2 = read.table(text = " number smoker   BMI   sex
98      No 27.73   Men
99      No 24.35   Men
100     No 25.60   Men
101    Yes 24.33   Men
102    Yes 27.54   Men
299     No 24.62 Women
300     No 31.02 Women
301    Yes 21.68 Women
302    Yes 19.66 Women
303    Yes 26.64 Women", sep = "", header = TRUE)

我在 ggplot 中尝试了以下操作并得到了一张我不想要的图表。

ggplot(df2, aes(smoker, BMI, color=sex)) + geom_line() + geom_point()

我想要两条线,一条给男人,一根给女人。我希望每个吸烟者类别中的点代表该性别组的平均值。

知道如何使用此数据集执行此操作吗?我在 Whosebug 上找到了适用于其他数据集的示例。

我找到了一种方法,但如果有人可以提供帮助,我仍在寻找更聪明的方法。

df3 <- with(df, tapply(BMI, list(smoker, sex), mean))
smoker <- c("No", "Yes", "No", "Yes")
sex <- c("Men", "Men", "Women", "Women")
BMI <- c(df3[1,1], df3[2,1], df3[1,2], df3[2,2])
df4 <- data.frame(smoker, sex, BMI)
ggplot(df4, aes(smoker, BMI, color=sex)) + geom_line(aes(group=sex)) + geom_point()

Correct R plot

您的图表图像对理解您尝试做的事情有很大帮助。使用 ddply 和 plyr 包中的 summarize 进行与 tapply 相同的计算,但 returns ggplot 可以直接使用的数据框中的结果。鉴于两个示例中使用了不同的数据,下面的代码似乎在 R 中重现了您的图表:

 library(plyr)
 df3 <- ddply(df2,.(sex, smoker), summarize, BMI_mean=mean(BMI))
 ggplot(df3,aes(as.numeric(smoker), BMI_mean, color=sex)) + geom_line() + 
       scale_x_discrete("Current Sig Smoker Y/N", labels=levels(df3$smoker)) +
       labs(y="Mean Body Mass Index (kg/(M*M)", color="SEX")