如何在循环中绘制ggplot2列?

时间:2015-08-03 00:21:56

标签: r ggplot2

我有一个lat,long和许多其他列的数据框。基本上,我想写一个循环,其中X = Long,Y = Lat保持不变,但颜色在每个循环中都会发生变化。颜色基本上是其他列,每个绘图一个。我怎么能这样做?

library(maps)
library(ggplot2)
library(RColorBrewer)
library(reshape)    
usamap <- ggplot2::map_data("state") 


myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))
simplefun<-function(colname){
  ggplot()+ 
    geom_polygon( data=usamap, aes(x=long, y=lat, group=group),colour="black",fill="white")+
    geom_point(data=stat,aes_string(x=stat$longitude,y=stat$latitude,color=colname))+
    scale_colour_gradientn(name="name",colours = myPalette(10))+
    xlab('Longitude')+
    ylab('Latitude')+
    coord_map(projection = "mercator")+
    theme_bw()+
    theme(line = element_blank())+
    theme(legend.position = c(.93,.20),panel.grid.major = element_line(colour = "#808080"))+
    ggsave(paste0(colname,".png"),width=10, height=8,dpi=300)
}

colname<-names(stat[4:16])
lapply(colname,simplefun)

dput(droplevels(STAT))

    structure(list(siteId = structure(1:16, .Label = c("US1NYAB0001", 
"US1NYAB0006", "US1NYAB0010", "US1NYAB0021", "US1NYAB0023", "US1NYAB0028", 
"US1NYAB0032", "US1NYAL0002", "US1NYBM0004", "US1NYBM0007", "US1NYBM0011", 
"US1NYBM0014", "US1NYBM0021", "US1NYBM0024", "US1NYBM0032", "US1NYBM0034"
), class = "factor"), latitude = c(42.667, 42.7198, 42.5455, 
42.6918, 42.6602, 42.7243, 42.5754, 42.2705, 42.0296, 42.0493, 
42.0735, 42.3084, 42.0099, 42.1098, 42.1415, 42.0826), longitude = c(-74.0509, 
-73.9304, -74.1475, -73.8311, -73.8103, -73.757, -73.7995, -77.9419, 
-76.0213, -76.0288, -75.9296, -75.9569, -75.5142, -75.8858, -75.889, 
-75.9912), no = c(2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L), min_obs = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0), min_mod = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0), avg_obs = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.15, 
0, 0, 0, 0, 0, 0), avg_mod = c(3136.8388671875, 2997.28173828125, 
3258.61840820312, 2970.74340820312, 2992.9765625, 0, 3075.54443359375, 
2701.03662109375, 2974.23413085938, 2967.5029296875, 3004.57861328125, 
2965.07470703125, 3260.25463867188, 3028.55590820312, 2981.8876953125, 
0), max_obs = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.3, 0, 0, 0, 0, 0, 
0), max_mod = c(6273.677734375, 5994.5634765625, 6517.23681640625, 
5941.48681640625, 5985.953125, 0, 6151.0888671875, 5402.0732421875, 
5948.46826171875, 5935.005859375, 6009.1572265625, 5930.1494140625, 
6520.50927734375, 6057.11181640625, 5963.775390625, 0), mean_bias = c(0, 
0, 0, 0, 0, NaN, 0, 0, 0, 5.05475490855863e-05, 0, 0, 0, 0, 0, 
NaN), corr_coef = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 
NA, NA, NA, NA, NA), additive_bias = c(-6273.677734375, -5994.5634765625, 
-6517.23681640625, -5941.48681640625, -5985.953125, 0, -6151.0888671875, 
-5402.0732421875, -5948.46826171875, -5934.705859375, -6009.1572265625, 
-5930.1494140625, -6520.50927734375, -6057.11181640625, -5963.775390625, 
0), mean_error = c(-3136.8388671875, -2997.28173828125, -3258.61840820312, 
-2970.74340820312, -2992.9765625, 0, -3075.54443359375, -2701.03662109375, 
-2974.23413085938, -2967.3529296875, -3004.57861328125, -2965.07470703125, 
-3260.25463867188, -3028.55590820312, -2981.8876953125, 0), mean_abs_error = c(3136.8388671875, 
2997.28173828125, 3258.61840820312, 2970.74340820312, 2992.9765625, 
0, 3075.54443359375, 2701.03662109375, 2974.23413085938, 2967.3529296875, 
3004.57861328125, 2965.07470703125, 3260.25463867188, 3028.55590820312, 
2981.8876953125, 0), rmse = c(4436.16006895562, 4238.79648453055, 
4608.38234747949, 4201.26561821133, 4232.7080465523, 0, 4349.47664966936, 
3819.84262201718, 4206.20224553428, 4196.4707575116, 4249.11582411849, 
4193.24886413303, 4610.69632679956, 4283.02483978603, 4217.02602018439, 
0)), .Names = c("siteId", "latitude", "longitude", "no", "min_obs", 
"min_mod", "avg_obs", "avg_mod", "max_obs", "max_mod", "mean_bias", 
"corr_coef", "additive_bias", "mean_error", "mean_abs_error", 
"rmse"), row.names = c(NA, -16L), class = "data.frame")

1 个答案:

答案 0 :(得分:-1)

我有同样的问题,我这样解决:

我们假设我的代码中的ggplotdata与第二篇文章中的数据框(具有两列以上)相似。 (dput(droplevels(STAT))?)

library(reshape)                                            # package for melting data
shapes <- 1:ncol(ggplot_data)                               # number of shapes

ggplot_data <- melt(ggplot_data, id = "X1")                 # melt data together
p1 <- ggplot(ggplot_data, aes(X1,value))
p1 <- p1 +aes(shape = factor(variable))+                    # different shapes
geom_point(aes(colour = factor(variable)))+                 # different colors
scale_shape_manual(labels=colname, values = shapes)+            # same for the legend
scale_color_manual(labels=colname, values = mypalette)      # same for legend