4

我正在分析 Alberto Cairo 的“功能艺术”中的一个 datavis 示例(我推荐给你)

在那本书中,有这个例子

http://img546.imageshack.us/img546/8327/snap1026.png

我在 R 中尝试。在左下图(散点图)

我使用书中的数据,并根据人口函数计算有效军队,lm(efect ~ pop)并根据人口+效应计算预算

这里是一个问题:如何使用颜色代表 BUDGET 值的色标(渐变)绘制散点图的背景?

之后,我想用预算的颜色来表示点(人口、效果)。这样,我可以将国家预算与人口+效应函数的估计预算进行比较

我知道基本的 R,我已经安装了ggplot2scales

我想要一个类似于

在此处输入图像描述

但颜色正确。

谢谢你。

4

2 回答 2

5

要获得背景,您可以使用它geom_raster来获得您想要的效果。我将使用@GeekOnAcid 建议的相同数据集:

首先获取数据并拟合回归模型:

crime = read.csv("http://datasets.flowingdata.com/crimeRatesByState2005.tsv", 
              header=TRUE, sep="\t")
 ##Fit the regression model
 m = lm(crime$burglary ~ crime$murder)

接下来我们为背景颜色创建一个网格:

##Create a grid for the background colour
x = seq(1, 10, length.out=100)
y = seq(400, 1200, length.out=100)
z = expand.grid(x,y)

现在我们需要一个渐变颜色的距离度量。我只是使用回归线的平方距离:

z$grad = (z[,2] - (398.3 +  62.2*z[,1]))^2

然后绘制:

require(ggplot2)    
ggplot(z) + geom_raster(aes(Var1, Var2, fill=grad)) + 
    geom_point(data=crime[1:15,], aes(murder, burglary, size=population),pch=1 ) + 
    geom_text(data=crime[1:15,], 
              aes(murder, burglary, label=state), 
              hjust=-0.2, size=4) + 
    scale_size_continuous(range=c(1,10)) + 
    scale_fill_continuous(high="red", low="white", trans="sqrt") +
    xlab("Murder") + ylab("Burglary")  + 
    guides(size=FALSE, fill=FALSE) +
    scale_y_continuous(expand=c(0, 0)) + 
    scale_x_continuous(expand=c(0, 0)) 

要得到:

在此处输入图像描述

于 2012-11-05T09:48:48.800 回答
2

为了帮助您入门,请查看Nathan Yau 的本教程,他展示了如何使用 R 中的基本图形创建气泡图。我只是检索了他的解决方案以使其与您的示例更相关。

#get some example data
crime <- read.csv("http://datasets.flowingdata.com/crimeRatesByState2005.tsv", 
                  header=TRUE, sep="\t")
#define the radius of circles
radius <- sqrt( crime$population/ pi )
#makes your plot, bg defines colour, inches scales circles
symbols(crime$murder[1:15], crime$burglary[1:15], circles=radius[1:15], 
        inches=0.5, bg=gray(0.9), xlab="Murder Rate", ylab="Burglary Rate")
#makes your labels, you can offset them by adding values to x and y arguments
text(crime$murder[1:15], crime$burglary[1:15], crime$state[1:15], cex=0.6)

在此处输入图像描述

背景的东西会很棘手,但你确定你真的需要它吗?即使有不同的颜色,它也会看起来很丑......

于 2012-11-04T22:33:55.797 回答