从基本图到ggplot,如何将cex转换为符号大小

时间:2017-05-22 12:51:41

标签: r ggplot2

我的一位朋友帮我创建了一个代码,使用基本的绘图功能生成散点图。现在我想使用ggplot创建相同的图,但是我不知道/理解如何在相应的ggplot选项中转换基本绘图函数的cex参数。

这是我的数据的一个例子

df=read.table(text="
    A   B   C   D   E   F   G   H   I   J
    1   2   3   4   5   1   2   3   4   5
    2   3   4   5   6   2   3   4   5   6
    3   4   5   6   7   3   4   5   6   7
    4   5   6   7   8   4   5   6   7   8
    5   6   7   8   9   5   6   7   8   9
    6   7   8   9   10  6   7   8   9   10
    7   8   9   10  11  7   8   9   10  11
    8   9   10  11  12  8   9   10  11  12
    9   10  11  12  13  9   10  11  12  13",header=T)

这是我用于基本绘图功能的代码

temp <- as.matrix(df)
x <- ncol(temp)/2
y <- nrow(temp)
maxtemp  <- max(temp [ , 1:x], na.rm = T)
plot(rep(1, y) ~ temp [, x + 1], type = "p", pch = 1, cex = 5*temp [, 1]/maxtemp , xlim = c(0, 15), ylim = c(0,6))
for(i in 1:(x-1)){
  points(rep(1 + i, y) ~ temp [, x + 1 + i], type = "p", pch = 1, cex = 5*temp [, 1 + i]/maxtemp)
  next}

为了在ggplot中创建相同的图我编写了这段代码,但是我没有得到相同的图片,点的大小不一样,我猜这是因为情节使用cex,而ggplot使用大小,我不知道如何处理这个......

    temp <- data.table(df)
    colnames(temp) <- c(paste("I",c(1:5), sep=""), c(1:5))
x <- ncol(temp)/2    
maxtemp  <- max(temp [ , 1:x], na.rm = T)

    for(t in 1:5){
      temp[, t] <- 5*temp[, t, with = FALSE]/maxtemp
      next}
    #I do this to create the 'cex' values, as cex does not exist in ggplot

    ggplot(gather(temp[, 6:10]),aes(x = value, y = as.numeric(key))) + geom_point(aes(size = gather(temp[, 1:5])$value), shape = 1) + xlim(0, 15) + ylim(0, 6) + theme_bw() +  theme(legend.position = "none", panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + xlab("") + ylab("")

我做错了什么?

1 个答案:

答案 0 :(得分:-1)

好的,我想我找到了一种方法来做我想做的事。 我正在寻找别的东西,我在ggplot2的参考手册中看到了以下句子

# To set aesthetics, wrap in I()
qplot(mpg, wt, data = mtcars, colour = I("red"))

所以我尝试了一下,经过几次尝试后我得到了以下代码

ggplot(gather(temp[, 6:10]),aes(x = value, y = as.numeric(key))) + geom_point(aes(size = I(gather(temp[, 1:5])$value*2)), shape = 1) + xlim(0, 15) + ylim(0, 6) + theme_bw() +  theme(legend.position = "none", panel.grid.major = element_blank(), panel.grid.minor = element_blank()) + xlab("") + ylab("")

使用aes(size = I(gather(temp[, 1:5])$value*2))我得到几乎完全相同的情节,就好像我使用plot()函数(第一个代码块)。 我并不完全理解cexaes(I())之间的关系,但它确实符合我的要求。也许有人可以对此发表评论。