Skip to content

Commit

Permalink
Treat stroke symbols like other symbols (#7789)
Browse files Browse the repository at this point in the history
* WIP Treat stroke symbols like other symbols

Refer to #7788 for background.  This WIP PR covers psxy and seems to work as explained.  Will do the same for psxyz.

* Same for psxyz

they share the same stroke symbols.

* Only override color it one has been set

* Update the docs for strokable symbols

* Add a constant for the default size to pen width factor

* Update gmt_constants.h

* Fix color assignment if -G or -C given

* Introduce new default MAP_STROKE_WIDTH

* Minor fixes

* Deal with resets after reading symbols from data file

* Fix some PS and scripts

* More PS updates

* Update images.dvc

* fix output name and 2 PS files

* Update psevents.dvc

* Fix inverted CPT

* Increase RMS threshold due to architectures

* typos

running spellchecker
  • Loading branch information
PaulWessel committed Sep 9, 2023
1 parent f3bcba5 commit bc0770d
Show file tree
Hide file tree
Showing 33 changed files with 152 additions and 59 deletions.
4 changes: 2 additions & 2 deletions doc/examples/images.dvc
@@ -1,5 +1,5 @@
outs:
- md5: 27ac0ad4e1c96b09b75e3f2d5270afca.dir
size: 35068257
- md5: bce133098e623506af4a3ad63beaf4fe.dir
size: 35068306
nfiles: 53
path: images
9 changes: 7 additions & 2 deletions doc/rst/source/explain_symbols.rst_
Expand Up @@ -83,10 +83,15 @@
**-Sy**\ *size*
y-dash (\|). *size* is the length of a short vertical (y-dir) line segment.

**Note**: The uppercase symbols **A**, **C**, **D**, **G**, **H**, **I**, **N**,
**Notes**: (1) The uppercase symbols **A**, **C**, **D**, **G**, **H**, **I**, **N**,
**S**, **T** are normalized to have the same *area* as a circle with
diameter *size*, while the *size* of the corresponding lowercase symbols
refers to the diameter of a circumscribed circle.
refers to the diameter of a circumscribed circle. (2) The stroke-only symbols
**x**, **y**, **+** and **-** will derive their pen widths from the symbol size
and their pen color from |-G| or |-C|. In that sense they behave as the other
symbols (but no outline). You can override this behavior by specifying |-W|,
modify it by adjusting :term:`MAP_STROKE_WIDTH` [15%], or set it to zero to
rely on pen defaults (and |-W|).

The next collection shows five symbols that require two or more parameters, and
some have optional modifiers to enhance the symbol appearance.
Expand Down
7 changes: 7 additions & 0 deletions doc/rst/source/gmt.conf.rst
Expand Up @@ -868,6 +868,13 @@ MAP Parameters
cap is reversed, i.e., *85/90* will draw a r = 5 radius circle at the
center of the map with less frequent radial lines there.

**MAP_STROKE_WIDTH**
Used to convert non-fillable (**x**, **y**, **+** and **-**) symbol sizes
to the width of the pen used to stroke these symbols. Give a factor in the
0-1 range (e.g., 0.18) or specify a percentage (e.g., 10%) [15%]. **Note**:
If set to 0 then no such conversion takes place and pen settings must rely on
**-W** or module defaults.

**MAP_SCALE_HEIGHT**
Sets the height (> 0) on the map of the map scale bars drawn by
various programs [default is **5p**].
Expand Down
28 changes: 14 additions & 14 deletions doc/scripts/GMT_base_symbols1.sh
Expand Up @@ -6,20 +6,20 @@ gmt begin GMT_base_symbols1
gmt set GMT_THEME cookbook
cat << EOF > tmp.txt
# All the basic geometric psxy symbols
1 2 1c -
2 2 1c +
3 2 1c a
4 2 1c c
5 2 1c d
6 2 1c g
7 2 1c h
1 1 1c i
2 1 1c n
3 1 1c p
4 1 1c s
5 1 1c t
6 1 1c x
7 1 1c y
1 2 1c a
2 2 1c c
3 2 1c d
4 2 1c g
5 2 1c h
6 2 1c i
7 2 1c n
1 1 1c p
2 1 1c s
3 1 1c t
4 1 1c x
5 1 1c y
6 1 1c -
7 1 1c +
EOF
gmt plot tmp.txt -R0.6/7.4/0.6/2.4 -B0g1 -B+n -Jx1.5c -Sc1c -W0.25p --PROJ_LENGTH_UNIT=cm -i0,1 --MAP_GRID_PEN_PRIMARY=default,dashed
gmt plot tmp.txt -S -Glightblue -W1p --PROJ_LENGTH_UNIT=cm
Expand Down
2 changes: 1 addition & 1 deletion doc/scripts/GMT_seamount_density.sh
Expand Up @@ -2,7 +2,7 @@
# Show the seamount density model offered in grdseamount
gmt begin GMT_seamount_density
echo 0 0 50 6000 | gmt grdseamount -H6000/2500/3000+p1+d0 -Kmodel.grd -Cc -F0.2
gmt makecpt -Cbilbao -T2500/3000 --COLOR_NAN=white
gmt makecpt -Cbilbao -T2500/3000 -I --COLOR_NAN=white
# Plot density reference model above
gmt grdimage model.grd -R0/1.1/0/1.3 -JX15c/4c -Bxaf+l"Normalized radial distance, @%6%r@%%" -Byafg1+l"Normalized height, @%6%h(r)@%%"
printf "0 1.25\n1 0\n" | gmt plot -W0.25p,-
Expand Down
4 changes: 2 additions & 2 deletions doc/scripts/images.dvc
@@ -1,5 +1,5 @@
outs:
- md5: e026fa468e0ece337e57095ec2ed1808.dir
size: 33329636
- md5: 82ec00d385cbf7aaa26287267668ef24.dir
size: 33329800
nfiles: 201
path: images
3 changes: 3 additions & 0 deletions src/gmt_constants.h
Expand Up @@ -257,6 +257,9 @@ enum GMT_time_period {
#define GMT_TEXT_CLEARANCE 15 /* Clearance around text in textboxes, in percent */
#define GMT_TEXT_OFFSET 20 /* Offset of text from refpoint, in percent */

/* Conversion from symbol size to pen width for stroke-only symbols x,y,+, - */
#define GMT_SYMBOL_SIZE_TO_PEN_WIDTH 15 /* 15% */

#define GMT_N_MAX_MODEL 20 /* No more than 20 basis functions in a trend model */

#define GMT_PAIR_COORD 0 /* Tell gmt_get_pair to get both x and y as coordinates */
Expand Down
2 changes: 2 additions & 0 deletions src/gmt_defaults.h
Expand Up @@ -154,6 +154,8 @@ struct GMT_DEFAULTS {
double map_graph_extension; /* If map_frame_type is graph, how must longer to make axis length. [7.5%] */
double map_graph_origin[2]; /* x- and y-origin of graph axis if graph-origin is in use [data 0/0] */
double map_graph_shift; /* Extra offset for title to avoid overwriting the centered y-axis */
double map_stroke_width; /* Conversion factor from symbol size to stroke pen width (non-fillable symbols only) */
char map_stroke_width_unit; /* Either % or not */
unsigned int map_annot_oblique; /* Controls annotations and tick angles etc. [GMT_OBL_ANNOT_ANYWHERE] */
unsigned int map_grid_cross_type[2]; /* 0 = normal cross, 1 = symmetric tick, 2 = asymmetric tick */
unsigned int map_logo_justify; /* Justification of the GMT timestamp box [1 (BL)] */
Expand Down
25 changes: 24 additions & 1 deletion src/gmt_init.c
Expand Up @@ -208,7 +208,7 @@ struct GMT_parameter {
const char *name;
};

/* These are the active GMT5+ keywords, containing no backwards-compatible variants.
/* These are the active >= GMT5 keywords, containing no backwards-compatible variants.
* Also, some grouped keywords such as FONT and FONT_ANNOT are also not listed since they are not in gmt.conf.
* If new keywords are added they need to be added here as well as to gmt_keywords.txt, plus
* specific entries in both gmtlib_setparameter and gmtlib_getparameter, and gmt.conf.rst */
Expand Down Expand Up @@ -314,6 +314,7 @@ static struct GMT_parameter GMT_keyword_active[]= {
{ 0, "MAP_ORIGIN_Y"},
{ 0, "MAP_POLAR_CAP"},
{ 0, "MAP_SCALE_HEIGHT"},
{ 0, "MAP_STROKE_WIDTH"},
{ 0, "MAP_TICK_LENGTH_PRIMARY"},
{ 0, "MAP_TICK_LENGTH_SECONDARY"},
{ 0, "MAP_TICK_PEN_PRIMARY"},
Expand Down Expand Up @@ -6616,6 +6617,9 @@ GMT_LOCAL void gmtinit_conf_classic (struct GMT_CTRL *GMT) {
/* MAP_POLAR_CAP */
GMT->current.setting.map_polar_cap[0] = 85;
GMT->current.setting.map_polar_cap[1] = 90;
/* MAP_STROKE_WIDTH */
GMT->current.setting.map_stroke_width = GMT_SYMBOL_SIZE_TO_PEN_WIDTH / 100.0; /* Given as percentage */
GMT->current.setting.map_stroke_width_unit = '%';
/* MAP_SCALE_HEIGHT */
GMT->current.setting.map_scale_height = 5 * pt; /* 5p */
GMT->current.setting.given_unit[GMTCASE_MAP_SCALE_HEIGHT] = 'p';
Expand Down Expand Up @@ -11237,6 +11241,19 @@ unsigned int gmtlib_setparameter (struct GMT_CTRL *GMT, const char *keyword, cha
GMT->current.setting.map_polar_cap[1] = inc[GMT_X];
}
break;
case GMTCASE_MAP_STROKE_WIDTH:
dval = atof (value);
if (value[len] == '%') {
dval /= 100.0; /* Got factor as a percentage */
GMT->current.setting.map_stroke_width_unit = '%';
}
else /* Got a fraction */
GMT->current.setting.map_stroke_width_unit = '\0';
if (dval < 0.0)
error = true;
else
GMT->current.setting.map_stroke_width = dval;
break;
case GMTCASE_MAP_SCALE_HEIGHT:
dval = gmt_M_to_inch (GMT, value);
if (dval <= 0.0)
Expand Down Expand Up @@ -12798,6 +12815,12 @@ char *gmtlib_getparameter (struct GMT_CTRL *GMT, const char *keyword) {
else
snprintf (value, GMT_LEN256, "%g/%g", GMT->current.setting.map_polar_cap[0], GMT->current.setting.map_polar_cap[1]);
break;
case GMTCASE_MAP_STROKE_WIDTH:
if (GMT->current.setting.map_stroke_width_unit == '%') /* Report as percentage */
snprintf (value, GMT_LEN256, "%g%%", GMT->current.setting.map_stroke_width * 100.0);
else /* Just a factor */
snprintf (value, GMT_LEN256, "%g", GMT->current.setting.map_stroke_width);
break;
case GMTCASE_MAP_SCALE_HEIGHT:
snprintf (value, GMT_LEN256, "%g%c", GMT->current.setting.map_scale_height * gmt_M_def_scale(GMTCASE_MAP_SCALE_HEIGHT), gmt_M_def_unit(GMTCASE_MAP_SCALE_HEIGHT));
break;
Expand Down
1 change: 1 addition & 0 deletions src/gmt_keywords.txt
Expand Up @@ -127,6 +127,7 @@ MAP_ORIGIN_X # x-value of lower-left corner of map relative to page [1i]
MAP_ORIGIN_Y # y-value of lower-left corner of map relative to page [1i]
MAP_POLAR_CAP # Modify gridline spacing for polar caps
MAP_SCALE_HEIGHT # Height of scale bar on maps
MAP_STROKE_WIDTH # Percent of strokable-only symbol size for stroke pen width [15%]
MAP_TICK_LENGTH # Length of major and minor frame axes ticks [does not go in gmt.conf]
MAP_TICK_LENGTH_PRIMARY # Length of major and minor primary frame axes ticks
MAP_TICK_LENGTH_SECONDARY # Length of major and minor secondary frame axes ticks
Expand Down
1 change: 1 addition & 0 deletions src/gmt_support.c
Expand Up @@ -12011,6 +12011,7 @@ int gmt_get_format (struct GMT_CTRL *GMT, double interval, char *unit, char *pre
char text[GMT_BUFSIZ];
size_t s_length;

if (fabs (interval) < GMT_CONV15_LIMIT) interval = 0.0;
if (!strcmp (GMT->current.setting.format_float_map, "%.12g")) { /* Default map format given means auto-detect decimals */

/* Find number of decimals needed in the format statement */
Expand Down
26 changes: 24 additions & 2 deletions src/psxy.c
Expand Up @@ -501,6 +501,15 @@ GMT_LOCAL void psxy_plot_end_vectors (struct GMT_CTRL *GMT, double *x, double *y
PSL_command (GMT->PSL, "U\n");
}

GMT_LOCAL bool psxy_is_stroke_symbol (int symbol) {
/* Return true if cross, x, y, - symbols */
if (symbol == PSL_CROSS) return true;
if (symbol == PSL_XDASH) return true;
if (symbol == PSL_YDASH) return true;
if (symbol == PSL_PLUS) return true;
return false;
}

static int usage (struct GMTAPI_CTRL *API, int level) {
/* This displays the psxy synopsis and optionally full usage information */

Expand Down Expand Up @@ -1706,6 +1715,15 @@ EXTERN_MSC int GMT_psxy (void *V_API, int mode, void *args) {
PSL_command (PSL, "/QR_outline false def\n");
}

if (psxy_is_stroke_symbol (S.symbol)) { /* These are only stroked, not filled */
/* Unless -W was set, compute pen width from symbol size and get pen color from G or z->CPT */
if (!outline_active) /* No pen width given, compute from symbol size unless conversion factor is 0 */
current_pen.width = (gmt_M_is_zero (GMT->current.setting.map_stroke_width)) ? GMT->current.setting.map_default_pen.width : GMT->current.setting.map_stroke_width * S.size_x * PSL_POINTS_PER_INCH;
if (current_fill.rgb[0] > -0.5) { /* Color given, use it for the stroke */
save_pen = current_pen;
gmt_M_rgb_copy (current_pen.rgb, current_fill.rgb);
}
}
if (gmt_geo_to_xy (GMT, in[GMT_X], in[GMT_Y], &plot_x, &plot_y)) continue; /* NaNs on input */

if (gmt_M_is_dnan (plot_x)) { /* Transformation of x yielded a NaN (e.g. log (-ve)) */
Expand Down Expand Up @@ -2065,9 +2083,11 @@ EXTERN_MSC int GMT_psxy (void *V_API, int mode, void *args) {
}
break;
case GMT_SYMBOL_TEXT:
if (Ctrl->G.active && !outline_active)
if (fill_active && !outline_active)
PSL_setcolor (PSL, current_fill.rgb, PSL_IS_FILL);
else if (!Ctrl->G.active)
else if (fill_active)
PSL_setcolor (PSL, current_fill.rgb, outline_setting);
else
PSL_setfill (PSL, GMT->session.no_rgb, outline_setting);
(void) gmt_setfont (GMT, &S.font);
direction = (S.azim) ? gmt_azim_to_angle (GMT, in[GMT_X], in[GMT_Y], 0.1, S.angle) : S.angle;
Expand Down Expand Up @@ -2328,6 +2348,8 @@ EXTERN_MSC int GMT_psxy (void *V_API, int mode, void *args) {
if (S.read_symbol_cmd && (S.symbol == PSL_VECTOR || S.symbol == GMT_SYMBOL_GEOVECTOR || S.symbol == PSL_MARC)) { /* Reset status */
current_pen = save_pen; current_fill = save_fill; Ctrl->W.active = save_W; Ctrl->G.active = save_G;
}
else if (psxy_is_stroke_symbol (S.symbol)) /* Reset */
gmt_M_rgb_copy (current_pen.rgb, save_pen.rgb);
if (Ctrl->H.active) current_pen = nominal_pen;
} while (true);
if (GMT->common.t.variable) { /* Reset the transparencies */
Expand Down
27 changes: 25 additions & 2 deletions src/psxyz.c
Expand Up @@ -136,6 +136,15 @@ struct PSXYZ_DATA {
struct GMT_CUSTOM_SYMBOL *custom;
};

GMT_LOCAL bool psxyz_is_stroke_symbol (int symbol) {
/* Return true if cross, x, y, - symbols */
if (symbol == PSL_CROSS) return true;
if (symbol == PSL_XDASH) return true;
if (symbol == PSL_YDASH) return true;
if (symbol == PSL_PLUS) return true;
return false;
}

static void *New_Ctrl (struct GMT_CTRL *GMT) { /* Allocate and initialize a new control structure */
struct PSXYZ_CTRL *C;

Expand Down Expand Up @@ -734,7 +743,7 @@ EXTERN_MSC int GMT_psxyz (void *V_API, int mode, void *args) {
double bar_gap, bar_width, bar_step, nominal_size_x, nominal_size_y, *t_for_cpt = NULL;
double axes[2] = {0.0, 0.0}, Az = 0.0, factor = 1.0;

struct GMT_PEN default_pen, current_pen, last_headpen, last_spiderpen;
struct GMT_PEN default_pen, current_pen, last_headpen, last_spiderpen, save_pen;
struct GMT_FILL default_fill, current_fill, black, no_fill;
struct GMT_SYMBOL S;
struct GMT_PALETTE *P = NULL;
Expand Down Expand Up @@ -1352,6 +1361,16 @@ EXTERN_MSC int GMT_psxyz (void *V_API, int mode, void *args) {

if (S.base_set & GMT_BASE_ORIGIN) data[n].flag |= 32; /* Flag that base needs to be added to height(s) */

if (psxyz_is_stroke_symbol (S.symbol)) { /* These are only stroked, not filled */
/* Unless -W was set, compute pen width from symbol size and get pen color from G or z->CPT */
if (!outline_active) /* No pen width given, compute from symbol size */
current_pen.width = (gmt_M_is_zero (GMT->current.setting.map_stroke_width)) ? GMT->current.setting.map_default_pen.width : GMT->current.setting.map_stroke_width * S.size_x * PSL_POINTS_PER_INCH;
if (current_fill.rgb[0] > -0.5) { /* Color given, use it for the stroke */
save_pen = current_pen;
gmt_M_rgb_copy (current_pen.rgb, current_fill.rgb);
}
}

if (Ctrl->W.cpt_effect) {
if (Ctrl->W.pen.cptmode & 1) { /* Change pen color via CPT */
gmt_M_rgb_copy (Ctrl->W.pen.rgb, current_fill.rgb);
Expand Down Expand Up @@ -1680,7 +1699,11 @@ EXTERN_MSC int GMT_psxyz (void *V_API, int mode, void *args) {
if (S.user_unit[GMT_Y]) data[n].flag |= 8;

n++;
if (read_symbol) API->object[API->current_item[GMT_IN]]->n_expected_fields = GMT_MAX_COLUMNS;
if (read_symbol) {
API->object[API->current_item[GMT_IN]]->n_expected_fields = GMT_MAX_COLUMNS;
if (psxyz_is_stroke_symbol (S.symbol)) /* Reset */
gmt_M_rgb_copy (current_pen.rgb, save_pen.rgb);
}
} while (true);

if (GMT_End_IO (API, GMT_IN, 0) != GMT_NOERROR) { /* Disables further data input */
Expand Down
4 changes: 2 additions & 2 deletions test/baseline/filter1d.dvc
@@ -1,5 +1,5 @@
outs:
- md5: 17eb890ce6ca5e7c8a6d8d6b124420ac.dir
size: 251237
- md5: 411dc7bd2fc692a5248368543dff2800.dir
size: 251233
nfiles: 6
path: filter1d
4 changes: 2 additions & 2 deletions test/baseline/grdgradient.dvc
@@ -1,5 +1,5 @@
outs:
- md5: b9407eab4b5bfa2882be7c7bad88a838.dir
size: 1651104
- md5: 79f65165bfb0d2ce72ab851940b3afa9.dir
size: 1652327
nfiles: 5
path: grdgradient
4 changes: 2 additions & 2 deletions test/baseline/grdimage.dvc
@@ -1,5 +1,5 @@
outs:
- md5: 707d1f260c2f0d51f6a3671d747950e4.dir
size: 8665406
- md5: 9bb70e197903539f8102f14b5328cb69.dir
size: 8666635
nfiles: 30
path: grdimage
4 changes: 2 additions & 2 deletions test/baseline/movie.dvc
@@ -1,5 +1,5 @@
outs:
- md5: 73cc6f5c09f4c6490d1fde2a71bbd36f.dir
size: 267202
- md5: 4f7fc65ff9890ee6b4e5fbddfaff26f8.dir
size: 267193
nfiles: 8
path: movie
4 changes: 2 additions & 2 deletions test/baseline/psbasemap.dvc
@@ -1,5 +1,5 @@
outs:
- md5: a3e3468d2d600a6b909d0f34a552e677.dir
size: 2903150
- md5: d844a65d237eeb5ecd27b79fb325c08f.dir
size: 2904428
nfiles: 56
path: psbasemap
6 changes: 3 additions & 3 deletions test/baseline/psevents.dvc
@@ -1,5 +1,5 @@
outs:
- md5: b909bda59bb25ef7a68fddc6d00c173d.dir
size: 277203
nfiles: 6
- md5: 62cbdd1fa8eb8d749fb51b04a4a1bfd1.dir
size: 328668
nfiles: 7
path: psevents
4 changes: 2 additions & 2 deletions test/baseline/psxy.dvc
@@ -1,5 +1,5 @@
outs:
- md5: 5caa9a7a3ea8e1fd9bd0a3d108f019db.dir
size: 9395372
- md5: 9b5f30d07ca7e9e7307cd6e88c694ee3.dir
size: 9406894
nfiles: 144
path: psxy
4 changes: 2 additions & 2 deletions test/baseline/psxyz.dvc
@@ -1,5 +1,5 @@
outs:
- md5: f1f78c83dcce8de006622526ee5b1d10.dir
size: 1177367
- md5: e8300f3b8e45690deb50c78d03d3e548.dir
size: 1179003
nfiles: 28
path: psxyz
2 changes: 1 addition & 1 deletion test/filter1d/mfilter.sh
Expand Up @@ -6,4 +6,4 @@ URL=https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/wee
gmt filter1d $URL -T1o+t -Fg30 --TIME_UNIT=d -f0T --IO_HEADER_MARKER=\" > monthly.txt
gmt psxy -R1958T/2018T/300/430 -JX6iT/4i -Bxa10Yf5y -Byaf+u" ppm" -BWSne -W0.25p monthly.txt -P -K -Xc > $ps
gmt psxy -R2012T/2013T/380/410 -J -Bsxa1Y -Bpxa1Og1o -Byaf+u" ppm" -BWSne+t"Keeling CO@-2@- curve" $URL -Sc0.2c -Gred -O -K -Y4.75i --IO_HEADER_MARKER=\" >> $ps
gmt psxy -R -J -Sx0.2i -W1p,blue monthly.txt -O >> $ps
gmt psxy -R -J -Sx0.2i -Gblue monthly.txt -O >> $ps
3 changes: 3 additions & 0 deletions test/grdvector/bothg.sh
@@ -1,6 +1,9 @@
#!/usr/bin/env bash
# Test to deal with issue http://gmt.soest.hawaii.edu/boards/1/topics/6311?r=6315#message-6315
#
# Due to hairline differences due to arcm64 macOS and Intel we need a
# higher rms threshold for this test to pass
# GRAPHICSMAGICK_RMS = 0.04
# GMT_KNOWN_FAILURE_WINDOWS
#
ps=bothg.ps
Expand Down
2 changes: 1 addition & 1 deletion test/psbasemap/mapscales.sh
Expand Up @@ -11,7 +11,7 @@ gmt psbasemap -R -J -Lg0/-7+c-7+w500M+jTC -F+gcornsilk1+p0.5p,black+s -O -K --FO
gmt psbasemap -R -J -Lg0/-10+c-10+w500n+u+jTC -F+gcornsilk1+p0.5p,black -O -K --FONT_LABEL=32p --FONT_ANNOT_PRIMARY=24p >> $ps
gmt psbasemap -R -J -Lg0/-12.5+c-12.5+w3e6f+jTC -F+gcornsilk1+p0.5p,black -O -K --FONT_LABEL=32p --FONT_ANNOT_PRIMARY=24p --FORMAT_FLOAT_MAP=%\'.10g >> $ps
# Plot a red cross at the justification point for the scales
gmt psxy -R -J -O -Sx0.2i -W0.5p,red << EOF >> $ps
gmt psxy -R -J -O -Sx0.2i -Gred << EOF >> $ps
0 14
0 11
0 8
Expand Down
2 changes: 1 addition & 1 deletion test/psevents/event_lines.sh
Expand Up @@ -22,7 +22,7 @@ cat << EOF > /tmp/def
3 0
5 0
EOF
gmt begin lines png
gmt begin event_lines ps
gmt subplot begin 3x1 -Fs15c/5c -R-2/5/-1/2.5 -Bafg1 -A+jTL+gwhite+p1p
gmt subplot set 0 -ALinear
gmt plot psevents_function_l.txt -W3p,red -i0,1 -lsize
Expand Down

0 comments on commit bc0770d

Please sign in to comment.