我有一个光栅文件 我想绘制直方图,我使用hist()完成它,如下所示。但我想用ggplot2进行绘图,以更好的方式绘制它。
conne <- file("C:\\fined.bin","rb")
r = raster(y)
hist(r, breaks=30, main="SMD_2010",
xlab="Pearson correlation", ylab="Frequency", xlim=c(-1,1))
我试过了:
qplot(rating, data=r, geom="histogram")
错误:
ggplot2 doesn't know how to deal with data of class RasterLayer
我需要绘制类似的内容:
答案 0 :(得分:5)
作为快速解决方案您可以使用hist
f <- hist(r, breaks=30)
dat <- data.frame(counts= f$counts,breaks = f$mids)
ggplot(dat, aes(x = breaks, y = counts)) +
geom_bar(stat = "identity",fill='blue',alpha = 0.8)+
xlab("Pearson correlation")+ ylab("Frequency")+
scale_x_continuous(breaks = seq(-1,1,0.25), ## without this you will get the same scale
labels = seq(-1,1,0.25)) ## as hist (question picture)
PS:也许您需要使用scale_x_discrete
来获得更好的轴外观
编辑以添加渐变填充
ggplot(dat, aes(x = breaks, y = counts, fill =counts)) + ## Note the new aes fill here
geom_bar(stat = "identity",alpha = 0.8)+
xlab("Pearson correlation")+ ylab("Frequency")+
scale_x_continuous(breaks = seq(-1,1,0.25),
labels = seq(-1,1,0.25))+
scale_fill_gradient(low="blue", high="red") ## to play with colors limits
答案 1 :(得分:3)
如果您的对象r
是rasterLayer
对象,那么我认为您只需要将其转换为数据框,可能是这样的:
rr <- as.data.frame(values(r))
请参阅?getValues
,因为您可能需要稍微改变一下这个电话。无论如何,ggplot2
必须将数据框作为其数据源。
仔细观察一下,我认为这可以做你想要的,但如果不转换为rasterLayer
对象而是绘制你的y
对象,它实际上更简单。但是我无法使用您链接的文件(可能是我的错误),因此您必须尝试一下。
编辑:这是一个有效的例子:
f <- system.file("external/test.grd", package="raster")
f
r <- raster(f)
rr <- as.data.frame(r)
str(rr)
# data is in one particular slot:
qplot(rr$test)
进一步详情:
str(rr)
'data.frame': 9200 obs. of 1 variable:
$ test: num NA NA NA NA NA NA NA NA NA NA ...
summary(rr)
test
Min. : 128.4
1st Qu.: 293.2
Median : 371.4
Mean : 423.2
3rd Qu.: 499.8
Max. :1805.8
NA's :6097
如果这不适合你,那我就是2013-01-21 r61719
这是3.0 RC。也许这就是区别? ggplot2 0.9.3
?