This notebook shows how to use patterns in vcs.
Pattern can be used with isofill, boxfill, meshfill and fillarea object.
In this notebook we are using primirarly boxfill
The CDAT software was developed by LLNL. This tutorial was written by Charles Doutriaux. This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.
import requests
r = requests.get("https://uvcdat.llnl.gov/cdat/sample_data/clt.nc",stream=True)
with open("clt.nc","wb") as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter local_filename keep-alive new chunks
f.write(chunk)
import cdms2
# and load data
f = cdms2.open("clt.nc")
clt = f("clt",time=slice(0,1),squeeze=1) # Get first month
import vcs
import cdms2
x=vcs.init(bg=True, geometry=(800,600))
gm = vcs.createboxfill()
gm.boxfill_type = "custom"
# Let's look at the data w/o pattern
x.plot(clt,gm)
Now let's assume we are only interested in areas where clt is greater than 60% let's shade out areas where clt is < 60%
import MV2
bad = MV2.less(clt,60.).astype("f")
# let's create a second boxfill method
gm2 = vcs.createboxfill()
gm2.boxfill_type = "custom"
# and a template for it
tmpl2 = vcs.createtemplate()
tmpl2.legend.priority=0
gm2.levels = [[0.5,1.]]
gm2.fillareacolors = ["black",]
x.plot(bad,gm2,tmpl2)
gm2.fillareaopacity = [50]
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
Rather than opacity, we can use patterns, that let us see better what's "underneath"
gm2.fillareastyle = "pattern"
gm2.fillareaindices = [10]
gm2.fillareaopacity = [100]
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
# we can control the size of patterns
gm2.fillareapixelscale = 2.
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
# Bigger
gm2.fillareapixelspacing = [20,20]
gm2.fillareapixelscale=None
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
# or smaller
gm2.fillareapixelspacing = [5,5]
gm2.fillareapixelscale=None
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
gm2.fillareaopacity = [25.]
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
Using hatch rather than pattern we can control the shading color
gm2.fillareaopacity = [100.]
gm2.fillareastyle = "hatch"
gm2.fillareacolors = ["red"]
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)
# could even have a legend
tmpl2.legend.x1 = .54
tmpl2.legend.x2 = .62
tmpl2.legend.y1 = .885
tmpl2.legend.y2 = .985
tmpl2.legend.priority=0
gm2.legend = {.5:" Bad"}
x.clear()
x.plot(clt,gm)
x.plot(bad,gm2,tmpl2)