我有一些连续和分类变量的数据。该数据由两组组成,即治疗组和对照组。我想通过ggplot2
绘制一个平行图,其中分类变量表示为每个类别的比例。
此外,y轴的范围应根据反射变量的值范围而变化。如果是连续变量, y轴应该从min(x)
到max(x)
。对于分类变量, y轴的范围应为0到1 。
最后,情节应该与以下图片类似,取自Iacus et al. (2011):
这是我到目前为止所得到的:
library("caret")
library("ggplot2")
library("reshape2")
# Example data
set.seed(123)
N_1 <- 250
N_2 <- 750
x1 <- round(c(rnorm(N_1), rnorm(N_2, 5)), 2)
x2 <- as.factor(c(rbinom(N_1, 1, 0.3), rbinom(N_2, 1, 0.4)))
x3 <- as.factor(c(round(runif(N_1, 0, 2)), round(runif(N_2, 0, 2))))
# Create dummies for categorical variables
df <- data.frame(x1, x2, x3)
dv <- dummyVars(x1 ~., df)
df <- data.frame(x1, predict(dv, newdata = df))
# Replace dummies with proportions
df$x2.0 <- c(rep(mean(df$x2.0[1:N_1]), N_1), rep(mean(df$x2.0[(N_1 + 1):N_2]), N_2))
df$x2.1 <- c(rep(mean(df$x2.1[1:N_1]), N_1), rep(mean(df$x2.1[(N_1 + 1):N_2]), N_2))
df$x3.0 <- c(rep(mean(df$x3.0[1:N_1]), N_1), rep(mean(df$x3.0[(N_1 + 1):N_2]), N_2))
df$x3.1 <- c(rep(mean(df$x3.1[1:N_1]), N_1), rep(mean(df$x3.1[(N_1 + 1):N_2]), N_2))
df$x3.2 <- c(rep(mean(df$x3.2[1:N_1]), N_1), rep(mean(df$x3.2[(N_1 + 1):N_2]), N_2))
# Reorder data for ggplot2
df <- melt(data.frame(id = 1:length(x1), df),
id.vars = c(rep(0, N_1), rep(1, N_2)))
# Draw plot
ggplot(df, aes(x = variable, y = value, group = id)) +
geom_path(aes(color = id), alpha = 0.5, lineend = 'round', linejoin = 'round')
如您所见,我设法创建了一个包含连续和虚拟变量的图形(由比例表示)。但是,感觉我的方式效率低下,而且我没有设法为不同的变量创建不同的yaxis。
如何使用ggplot2
以高效的方式创建具有不同y轴的图?
答案 0 :(得分:1)
您可以使用$ source myfile
$ myip
192.0.2.24
$ tururu
it works
包进行数据操作。我还对值进行了归一化,因此它遵循相同的0到1 y轴。
dplyr