Wrapper around the Bokeh library for plotting well-known-text strings and shapely geometries!
pip install wktplot
The well-known-text standard is very common for working with and representing geospatial data, however it is painful to visualize them programatically. The Shapely library extends the functionality of the well-known-text standard with a rich assortment of geometry objects and operations, but it doesn't make it any easier to visualize.
WKTPlot is a library provides an easy-to-use API for visualizing well-known-text strings and shapely objects programatically. This library wraps around the Bokeh library, which is a powerful plotting library for generating interactive visualizations. Bokeh also provides a rich assortment of stylizing options which are all usable through WKTPlot's add_shape
method.
from shapely.geometry import Polygon
from wktplot import WKTPlot
# Create plot object
plot = WKTPlot(title="My first plot!", save_dir="/path/to/directory")
# Define shapes either through well-known-text (WKT) string, or shapely object
shape_1 = "POINT (30 10)"
shape_2 = Polygon([[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]])
# Add shapes to the plot
plot.add_shape(shape_1, fill_color="green", line_width=3)
plot.add_shape(shape_2, fill_color="cyan", fill_alpha=0.7)
# Save the plot to disk [/path/to/directory/my_first_plot.html]
plot.save()
WKTPlot supports majority of shapely objects including:
- Point
- MultiPoint
- LineString
- MultiLineString
- LinearRing
- Polygon
- MultiPolygon
- GeometryCollection
Example for plotting from shapefile. Shapefile is of California's county boundaries from here.
import shapefile # pyshp module
from random import randrange
from shapely.geometry import Polygon
from wktplot import WKTPlot
def get_rand_color():
return f"#{randrange(0, 0xffffff):0>6x}"
plot = WKTPlot(title="California Counties", save_dir="~/scratch")
with shapefile.Reader("~/scratch/CA_Counties_TIGER2016.shp") as shp:
for shape in shp.shapes():
p = Polygon(shape.points)
plot.add_shape(p, fill_color=get_rand_color())
plot.save()
Which will result in this output:
- Add native support for visualizing GeoDataframes and shapefiles.
- Make web view more interactive.