Skip to content

plot(x, y, G=value, C=cmap) gives strange behavior for individual points #417

Description

@kmaterna

Description of the problem

In plot(), using G=value and C=cmap to interpret a color from a CMAP for a single value doesn't work in the same way that a list/array of values does. Interpreting a single value from a color map would be useful for plotting a bunch polygons with different colors (ex: for coulomb stress changes on fault segments).

  • For plotting arrays of points, G returns an array of colors extracted from the cmap, as it should
  • For plotting single polygons, G returns foreground or background color. wrong?
  • For plotting single points, G returns 0. wrong?
    In the single-element case, plot() requires G=str, which is also counter-intuitive.

Either way, the result makes it difficult to plot custom-colored polygons with a colormap
(usually I would just extract a color for each polygon and plot each one separately, calling plot() in a loop). Is there another way to plot polygons with cmap colors?

In the example code, I'm plotting some dummy data, once as an array of points, and once in a for-loop with points and polygons in individual plot() calls. The cmap behavior is quite different.

Full code that generated the error

importpygmt# Make CPT and Fake Datapygmt.makecpt(C="jet",T="-1.0/1.0/0.05",H="mycpt.cpt");
xdata= [-123, -122.5, -122.0, -121.5]; ydata= [36.5, 37, 37.5, 38]; zdata= [-0.7, -0.25, 0.25, 0.7];
# Batch Calling : worksfig=pygmt.Figure()
title="+t\"Batch to CMAP - Works for Points.\""; fig.coast(region=[-124, -120, 35, 39], projection="M7i", B=[title,"1.0"],shorelines="1.0p,black"); fig.colorbar(D="jBr+w3.5i/0.2i+o5.5c/1.5c+h",C="mycpt.cpt",I="0.8",G="-1.0/1.0",B=["x"+str(0.2),"y+L\"KPa\""]); fig.plot(x=xdata, y=ydata, color=zdata, style="c1.8c", pen="thick,black", C="mycpt.cpt"); fig.savefig("Working.png");
# Single Calls Only : doesn't do the right thingfig=pygmt.Figure()
title="+t\"Single Calls to CMAP - Odd.\""; fig.coast(region=[-124, -120, 35, 39],projection="M7i",shorelines="1.0p,black",B=[title,"1.0"]); fig.colorbar(D="jBr+w3.5i/0.2i+o5.5c/1.5c+h",C="mycpt.cpt",I="0.8",G="-1.0/1.0",B=["x"+str(0.2),"y+L\"KPa\""]); foriinrange(len(xdata)): # just looping through the datafig.plot(x=xdata[i], y=ydata[i], G=str(zdata[i]), style="c1.8c", pen="thick,black", C="mycpt.cpt"); # plotting a point with associated cmap dataxdata_long= [xdata[i]+0.2, xdata[i]+0.3, xdata[i]+0.3, xdata[i]+0.2, xdata[i]+0.2]; # building a polygonydata_long= [ydata[i], ydata[i], ydata[i]+0.1, ydata[i]+0.1, ydata[i]]; # building a polygonfig.plot(x=xdata_long, y=ydata_long, G=str(zdata[i]), pen="thick,black", C="mycpt.cpt"); # plotting the polygon with associated cmap datafig.savefig("Not_Working.png");

System information
Mac OSX Mojave, miniconda3 package manager, python3.6. I installed pygmt in a brand new python environment today.

Working

Not_Working

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    triageUnsure where this issue fits

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions