在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()
您的图表图像对理解您尝试做的事情有很大帮助。使用 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")
我正在尝试使用 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()
您的图表图像对理解您尝试做的事情有很大帮助。使用 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")