如何使用R创建包含3个变量的数据框图?

时间:2014-04-19 22:00:47

标签: r plot dataframe

我正在使用logit回归并创建了一个模型,该模型根据FICO得分和请求金额预测获得贷款的可能性。我创建了一个具有概率函数结果的数据框 - 行是潜在的FICO分数,列是潜在的请求贷款值。对于每一行和每一列,都有一个'True'或'False'的值,'True'表示个人获得贷款的概率> = .50。

如何根据数据框中的信息制作一个散点图(FICO得分,贷款值),并绘制一个绿色圆圈,表示“True”和红色X的值为那些'假'的价值?此外,有没有比散点图更好的方式来表示此类数据?

3 个答案:

答案 0 :(得分:2)

如果我明白你想做什么,我认为热图可能会更好。 R中有不止一种方法可以做到这一点。ggplot2 geom_tile提供了一种非常好的方法,只要您首先重塑数据:

# using http://www.free-ocr.com/ to OCR your image gives:
dat <- structure(list(FICO = c(640L, 650L, 660L, 670L, 680L, 690L, 700L, 
710L, 720L, 730L, 740L, 750L, 760L, 770L, 780L, 790L, 800L, 810L, 
820L, 830L), `1000` = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE), `1500` = c(FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE), `2000` = c(FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `2500` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `3000` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `3500` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `4000` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `4500` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `5000` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), `5500` = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE)), .Names = c("FICO", 
"1000", "1500", "2000", "2500", "3000", "3500", "4000", "4500", 
"5000", "5500"), class = "data.frame", row.names = c(NA, -20L
))

# now melt that data 
dat.m <- melt(dat, "FICO")
colnames(dat.m) <- c("FICO.Score", "Loan.Value", "p(loan)>0.50")

# and use ggplot with geom_tile to make a heatmap
gg <- ggplot(dat.m, aes(x=FICO.Score, y=Loan.Value))
gg <- gg + geom_tile(aes(fill=`p(loan)>0.50`), color="white")
gg <- gg + theme_bw()
gg <- gg + labs(x="", y="")
gg <- gg + theme(panel.border=element_blank())
gg <- gg + theme(panel.grid=element_blank())
gg 

enter image description here

答案 1 :(得分:1)

lattice包很适合您想要的情节。这是一个有假数据的例子

> z <- as.logical(sample(TRUE:FALSE, 10, TRUE))
> d <- data.frame(x = 1:10, y = 101:110, z)
> d
##     x   y     z
## 1   1 101 FALSE
## 2   2 102 FALSE
## 3   3 103 FALSE
## 4   4 104  TRUE
## 5   5 105 FALSE
## 6   6 106 FALSE
## 7   7 107 FALSE
## 8   8 108 FALSE
## 9   9 109  TRUE
## 10 10 110  TRUE

> library(lattice)
> xyplot(y ~ x, data = d, groups = z, col = c("red", "green"), pch = 19)

enter image description here

答案 2 :(得分:1)

您也可以使用ggplot2执行此操作。

一些FICO数据的样本:

fico <- structure(list(LoanValue = c(20000, 19200, 35000, 9975, 12000, 6000, 10000, 33450, 14675, 7000, 2000, 10625, 27975, 34950, 9600, 24975, 10000, 13900.25, 10000, 5175, 21975, 30000, 6500, 17400, 4000, 7200, 8000, 8000, 3000, 14500, 23850, 14000, 34975, 16000, 7019.25, 7975, 7200, 20125, 11875, 1850, 3200, 12725, 5500, 15650, 9000, 5000, 3000, 19975, 5450, 14000, 8799.04, 3000, 32000, 22250, 7300, 16450, 2500, 6000, 27575, 1000, 12000, 30000, 13500, 9000, 15000, 5300, 7000, 19975, 14993.57, 8000, 23947.48, 7500, 16875, 12000, 6000, 825, 4500, 1600, 10000, 18525, 7450, 3225, 23675, 12000, 25000, 15850, 4175, 10000, 6000, 6000, 7925, 15925, 9500, 6000, 9975, 7000, 4500, 12000, 10375, 4800), FICOscore = c(735L, 715L, 690L, 695L, 695L, 670L, 720L, 705L, 685L, 715L, 670L, 665L, 670L, 735L, 725L, 730L, 695L, 740L, 730L, 760L, 665L, 695L, 665L, 695L, 670L, 705L, 675L, 675L, 765L, 760L, 685L, 685L, 720L, 685L, 675L, 780L, 720L, 830L, 715L, 660L, 670L, 720L, 660L, 660L, 675L, 715L, 710L, 670L, 785L, 705L, 750L, 660L, 700L, 665L, 680L, 725L, 670L, 715L, 690L, 755L, 705L, 715L, 680L, 665L, 730L, 725L, 685L, 685L, 705L, 695L, 695L, 715L, 735L, 665L, 670L, 670L, 790L, 700L, 665L, 725L, 710L, 760L, 680L, 690L, 695L, 725L, 810L, 675L, 750L, 685L, 665L, 765L, 670L, 675L, 675L, 750L, 765L, 735L, 665L, 670L)), .Names = c("LoanValue", "FICOscore"), class = "data.frame", row.names = c(NA, -100L))

创建一个人为的可行性:

fico$getloan <- ifelse(fico$FICOscore<700, "0", "1")

加载ggplot2包:

require(ggplot2)

创建散点图:

ggplot(fico, aes(x=FICOscore, y=LoanValue)) +
  geom_point(aes(color=getloan))

给出: enter image description here