Built from a .csv downloadable from letterboxing.org. Just search for boxes with no fields filled in and use the download link at the bottom of the list (I can't list exact URLs here because they are dynamically generated on the back end). The code to clean up, transform, and display the data is below in R. It assumes you have ggplot2 (and all dependencies) and stringr installed. Both packages are available from CRAN.
require(ggplot2);
require(plyr);
require(stringr);
require(maps);
options(stringsAsFactors = FALSE)
##Map plotting
statesline <- data.frame(map("state", plot=FALSE)[c("x","y")])
usamap <- qplot(x, y, data=statesline, geom="path")
#County Maps
countfr<-map_data("county")
names(countfr)<-c("long","lat","group","order","State","County")
countfr$State <- state.abb[match(countfr$State, tolower(state.name))]
state_df <- map_data("state")
WImap<-map_data("state",region="Wisconsin")
##Import and clean main data.
clues<-read.csv(file="~/Downloads/clues.csv",encoding="UTF-8")
clues<-subset(clues,select=c(Letterbox.Name,Placer,City,St,County,Place.Date,Boxes,Lat,Lon))
names(clues)<-c("Name","Placer","City","State","County","Date","Boxes","Blat","Blong")
clues$Boxes[which(clues$Boxes<0)]<-NA
clues$Blat[which(clues$Blat<10)]<-NA
clues$Blong[which(clues$Blong>-10)]<-NA
#Match with lowercase names in maps package
clues$County<-tolower(clues$County)
#Crude removal of some mystery boxes
clues$City[which(nchar(clues$City)<4)]<-NA
#Remove some malformed dates
clues$Date[which(nchar(clues$Date)<6)]<-NA
clues$Date<-as.Date(clues$Date,format="%m/%d/%Y");
#Restrict to the US and to properly formed counties
clues<-clues[which(clues$State %in% state.abb),];
clues<-clues[which(clues$County %in% countfr$County),];
#Create a subset for later.
#WIboxes<-subset(clues,State=="WI",select=c("Blat","Blong"));
#Data frame of factor counts.
nboxsum<-ddply(clues, c("County","State"),"nrow")
names(nboxsum)<-c("County","State","Boxes")
nboxsum$Letterboxes<-cut(nboxsum$Boxes,breaks=c(1,2,5,10,25,50,100,1000),labels=c("0-1","2-5","5-10","10-25","25-50","50-100","100-1000"),right=FALSE)
choropleth <- merge(countfr, nboxsum, by = c("County","State"))
choropleth$State<-as.factor(choropleth$State)
choropleth$County<-as.factor(choropleth$County)
choropleth <- choropleth[order(choropleth$order), ]
#WIboxcty<-subset(choropleth,State=="WI")
#WIboxcty<-rbind.fill(WIboxcty,WIboxes)
lbplot<-ggplot(choropleth, aes(long, lat, group = group)) + geom_polygon(aes(fill = Letterboxes,name="Boxes Per County"), colour = alpha("white", 1/2), size = 0.2) + geom_polygon(data = state_df, colour = "grey", fill = NA) + scale_fill_brewer(pal = "Greens")+theme_bw()+coord_map(project="lagrange")+scale_x_continuous(name=NULL,breaks = NA)+scale_y_continuous(name=NULL,breaks = NA)+ opts(axis.title.y = theme_blank(), axis.text.y = theme_blank(),axis.title.x = theme_blank(), axis.text.x = theme_blank());
#Wisconsin Plot
#wiplot<-ggplot(WIboxcty, aes(long, lat, group = group)) + geom_polygon(aes(fill = Letterboxes), colour = alpha("white", 1/2), size = 0.2) + geom_polygon(data = WImap, colour = "grey", fill = NA) + scale_fill_brewer(pal = "Greens")+theme_bw()+coord_map(project="lagrange")+scale_x_continuous(breaks = NA)+scale_y_continuous(breaks = NA);
##Output code. uncomment to run.
#svg(filename="USALetterboxes.svg",onefile=TRUE,width=7,height=4.5,bg="transparent")
#lbplot
#dev.off()