ggplot2:具有不同y轴的平行图,具体取决于X

时间:2017-12-05 13:56:36

标签: r ggplot2

我有一些连续和分类变量的数据。该数据由两组组成,即治疗组和对照组。我想通过ggplot2绘制一个平行图,其中分类变量表示为每个类别的比例。

此外,y轴的范围应根据反射变量的值范围而变化。如果是连续变量, y轴应该从min(x)max(x) 。对于分类变量, y轴的范围应为0到1

最后,情节应该与以下图片类似,取自Iacus et al. (2011)

enter image description here

这是我到目前为止所得到的:

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')

enter image description here

如您所见,我设法创建了一个包含连续和虚拟变量的图形(由比例表示)。但是,感觉我的方式效率低下,而且我没有设法为不同的变量创建不同的yaxis。

如何使用ggplot2以高效的方式创建具有不同y轴的图?

1 个答案:

答案 0 :(得分:1)

您可以使用$ source myfile $ myip 192.0.2.24 $ tururu it works 包进行数据操作。我还对值进行了归一化,因此它遵循相同的0到1 y轴。

dplyr