I suggest that you take a look at python + matplotlib + the basemap toolkit and/or cartopy - as this SO Question shows you can select countries based on a number of criteria and colour them as you wish.
- Output to numerous file formats
- Selection on numerous criteria
- Results are your own - you can place in the public domain
- Multiple colours available
- You get to pick the center, crop and projection
- Free both price and FOSS
- Cross platform.
- You can either save your plot programmatically or, in the view window, you can save image in a number of formats.
From the answers to the question referenced above:
#! /usr/bin/env python
from pylab import *
from mpl_toolkits.basemap import Basemap
import matplotlib as mp
from shapelib import ShapeFile
from matplotlib.collections import LineCollection
from matplotlib import cm
for npoly in range(shp.info()):
shpsegs = 
shpinfo = 
shp_object = shp.read_object(npoly)
verts = shp_object.vertices()
rings = len(verts)
for ring in range(rings):
if ring == 0:
shapedict = dbf.read_record(npoly)
name = shapedict["name_long"]
continent = shapedict["continent"]
lons, lats = zip(*verts[ring])
if max(lons) > 721. or min(lons) < -721. or max(lats) > 91. or min(lats) < -91:
x, y = m(lons, lats)
shapedict['RINGNUM'] = ring+1
shapedict['SHAPENUM'] = npoly+1
lines = LineCollection(shpsegs,antialiaseds=(1,))
ax = plt.subplot(111)
m = Basemap(projection='merc',llcrnrlat=30,urcrnrlat=72,\
sfile = 'ne_10m_admin_0_countries'
shp = ShapeFile(sfile)
dbf = dbflib.open(sfile)
Which results in:
You might also like to take a look at plotly which allows more online use but the last time that I looked hadn't fully implemented basemap.