From 8ce28aa68d214446091b81f4c35205aedc03df2e Mon Sep 17 00:00:00 2001 From: Joaquim Date: Sat, 15 Jun 2024 02:31:21 +0100 Subject: [PATCH] Add insets tutorial --- documentation/modules/basemap.md | 2 - documentation/modules/colorbar.md | 9 +- documentation/modules/inset.md | 70 +++++++++++++- gallery/ex45.md | 6 +- tutorials.md | 11 +++ tutorials/insets.md | 3 + tutorials/insets/insets.md | 150 ++++++++++++++++++++++++++++++ tutorials/insets/tilelogo.jpg | Bin 0 -> 24101 bytes 8 files changed, 242 insertions(+), 9 deletions(-) create mode 100644 tutorials/insets.md create mode 100644 tutorials/insets/insets.md create mode 100644 tutorials/insets/tilelogo.jpg diff --git a/documentation/modules/basemap.md b/documentation/modules/basemap.md index e37314b97..7d0c4ce45 100644 --- a/documentation/modules/basemap.md +++ b/documentation/modules/basemap.md @@ -18,8 +18,6 @@ At least one of the options \myreflink{frame}, **map_scale**, or **rose** must b \textinput{common_opts/opt_R} -\textinput{common_opts/opt_R_3D} - - **A** or **polygon** : *polygon=true* or *polygon=fname*\ No plotting is performed. Instead, we determine the geographical coordinates of the polygon outline diff --git a/documentation/modules/colorbar.md b/documentation/modules/colorbar.md index d0e4154aa..5fe31e10d 100644 --- a/documentation/modules/colorbar.md +++ b/documentation/modules/colorbar.md @@ -28,7 +28,14 @@ Optional Arguments - **B** or **axes** or **frame**\ Set annotation, tick, and gridline interval for the colorbar. More at \myreflink{frame} - The x-axis label will plot beneath a horizontal bar (or vertically to the right of a vertical bar), except when using the **move\_annot** modifier of the **pos** option. As an option, use the y-axis label to plot the data unit to the right of a horizontal bar (and above a vertical bar). When using **frame=(annot=:auto,)** or **frame=(annot=:auto,ticks=:auto)** annotation and/or minor tick intervals are chosen automatically. If **frame** is omitted, or no annotation intervals are provided, the default is to annotate every color level based on the numerical entries in the CPT (which may be overridden by ULB flags in the CPT). To specify custom text annotations for intervals, you must append ; *annotation* to each z-slice in the CPT. + The x-axis label will plot beneath a horizontal bar (or vertically to the right of a vertical bar), except when using + the **move\_annot** modifier of the **pos** option. As an option, use the y-axis label to plot the data unit to the right + of a horizontal bar (and above a vertical bar). When using **frame=(annot=:auto,)** or **frame=(annot=:auto,ticks=:auto)** + annotation and/or minor tick intervals are chosen automatically. If **frame** is omitted, or no annotation intervals + are provided, the default is to annotate every color level based on the numerical entries in the CPT (which may be + overridden by ULB flags in the CPT). The exception to this rule is for CPT files that were scaled to fit the range + of a grid exactly and thus have arbitrary color levels; these will trigger an automatic **frame=(annot=:auto,ticks=:auto)** + setting. To specify custom text annotations for intervals, you must append ; *annotation* to each z-slice in the CPT. - **C** or **color** or **cmap** : *color=cpt*\ Note: If not given, the module will check if we have a valid *current\_cpt* stored in memory (*makecpt* does store it). If there is one, fine, otherwise **GMT** will error. diff --git a/documentation/modules/inset.md b/documentation/modules/inset.md index d031241d6..51ea3bff3 100644 --- a/documentation/modules/inset.md +++ b/documentation/modules/inset.md @@ -29,7 +29,7 @@ region and projection that will be used to draw in the inset, then give these ar Required Arguments ------------------ -- **D** or **inset** or **inset_box** or **insetbox** : -- *inset_box=(map=true, inside=true, outside=true, norm=true, paper=true, anchor=XX, size=XX, width=XX, justify=code, offset=XX)*\ +- **D** or **pos** or **position**or **inset_box** or **insetbox** : -- *position=(map=true, inside=true, outside=true, norm=true, paper=true, anchor=XX, size=XX, width=XX, justify=code, offset=XX)*\ Define the map inset rectangle on the map. Specify the rectangle in one of three ways: 1. Use `map=(lon,lat)` for map coordinates. Requires both **region** and **proj** to be set. @@ -43,7 +43,7 @@ Required Arguments by using **justify=??** where *??* stands for a 2-char justification code *justify* (see \myreflink{text}). Note: with the default **outside=true**, the *justify* defaults to the same as **anchor**, if **inside=true** is used then *justify* defaults to the mirror opposite of **anchor**. Specify inset box attributes via the **box** option [outline only]. - Alternatively, use **inset_box="west/east/south/north"** of geographic rectangle bounded by parallels and + Alternatively, use **position="west/east/south/north"** of geographic rectangle bounded by parallels and meridians; append **+r** if the coordinates instead are the lower left and upper right corners of the desired rectangle. (Or, give *xmin/xmax/ymin/ymax* of bounding rectangle in projected coordinates and optionally append **+u**unit [Default coordinate unit is meter (e)]. NOTE that this form requires passing the options @@ -94,6 +94,47 @@ The **inset(:end)** command finalizes the current inset, which returns the plott prior to the start of the inset. The previous region and map projection will be in effect going forward. +The nested call mode +-------------------- + +The options described above respect the _pure_ use of `inset` as a _modern_ mode function. But we can also use it +in a mix mode in _one-liners_ commands. It is mixed because the functioning relies in mixing the _classic_ and +_modern_ modes (in a way transparent to the user). And, as just said, this mix mode consists in calling the `inset` +function as an option to the `plot`, `basemap` and `grdimage` functions. Since we are doing a nested call, we need +to pass all options as argument to `inset` and this ofc reduces the number of possibilities but still, it offers +quite nice features that allow creating elaborated figures with very short commands. The \myreflink{Figure insets} +shows several examples of this usage. + +The inset windows are located according to an algorithm that tries to avoid overlapping lines in line plots (with +a moderate success), or in some corner position for insets with images. Inset windows sizes are also automatically +estimated from image sizes and projections (when they are geographical). However, user can manually control this +wth **position** option explained above. + +- **inset** -- *inset=(data, zoom=(...), coast=(...), position=(...), box=(...), clearance=(...))*\ + + - **data** An image, a grid a table (GMTdataset) or a file name that can be automatically read by + \myreflink{gmtread}. Depending on the data type an _x,y_ plot or an image is displayed inside the inset window. + + - **zoom** This refers to an area of the main window that we wish to make a zoom of. Its arguments depend + on whether we are zooming an _x,y_ plot or an image. In the first case we pass an _x_ location and a half-width. + For example `zoom=(10,2)` means that the zoom window covers the abscissa [8 12] range. The _y_ extent is whatever + the line has between those _x_ limits. But for the case of images we need one more argument because now we have 2 + dimensions. The syntax now is `zoom=(x0,y0,delta)`, an extension of the previous concept, which requires that the + units of _x_ and _y_ are the same and we get a square zoom window. The alternative is to use the usual way of GMT + specifying region limits. That is `zoom=(x_min, x_max, y_min, y_max)` + + - **pzoom** When adding insets to images we can provide an external image (or file name) that will be displayed + in the inset. But since in this case the inset does not have to share the same coordinates with main figure, we + only provide here the point coordinates of the interesting area. The syntax is hence `pzoom=(x0,y0)`. + + - **coast** With this argument we can call the \myreflink{coast} command with all of its normal arguments. And + furthermore, we can even call the \myreflink{plot} (or any of its avatars) to add line/symbol plots over the + inset map. A further option to this form of calling `coast` is the option `rect=?`. If `?` is `true`, it will + plot a 0.75 pt blue rectangle showing the main window limits. Alternatives is `rect=number`, `rect=color` or + `rect=(number, color)`, where `color` is a color name and `number` is the rectangle line thickness in points + + - **position, box, clearance** Have the same meaning/usage as explained above. + Examples -------- @@ -104,7 +145,7 @@ To make a simple basemap plot that demonstrates the inset module, try using GMT gmtbegin() basemap(region=(0,40,20,60), proj=:merc, frame=(annot=:afg, fill=:lightgreen)) - inset(inset_box=(anchor=:TR, width=6.4, offset=0.5), box=(fill=:pink, pen=0.5), margins=0.6) + inset(position=(anchor=:TR, width=6.4, offset=0.5), box=(fill=:pink, pen=0.5), margins=0.6) basemap(region=:global360, proj=(name=:laea, center=[20,20]), figsize=5, frame=:afg) text(text="INSET", font=18, region_justify=:TR, offset=(away=true, shift=-0.4), noclip=true) inset(:end) @@ -112,3 +153,26 @@ gmtbegin() gmtend(:show) ``` \end{examplefig} + +Make a zoom over a region of a synthetic plot. + +\begin{examplefig}{} +```julia +using GMT + +t = 0:0.01:2pi; +plot(t, cos.(t).+rand(length(t))*0.1, inset=(zoom=(pi,pi/4), box=(fill=:lightblue,)), show=true) +``` +\end{examplefig} + + +Add an inset to basemap image with a rectangle in the inset taken from main image limits. + +\begin{examplefig}{} +```julia +using GMT + +basemap(region=(-48,-43,-26,-20), J=:merc, + inset=(coast, R="-80/-28/-43/10", J=:merc, shore=true, rect=(2,:red)), show=true) +``` +\end{examplefig} \ No newline at end of file diff --git a/gallery/ex45.md b/gallery/ex45.md index a5fc0d4f8..c88e7312c 100644 --- a/gallery/ex45.md +++ b/gallery/ex45.md @@ -9,7 +9,7 @@ using GMT resetGMT() # hide # Basic LS line y = a + bx -model = trend1d("@MaunaLoa_CO2.txt", output=:xm, n_model=:p1) +model = trend1d("@MaunaLoa_CO2.txt", output=:xm, model=:p1) plot("@MaunaLoa_CO2.txt", region=(1958,2016,310,410), frame=(axes=:WSen, bg=:azure1), xaxis=(annot=:auto, ticks=:auto), yaxis=(annot=:auto, ticks=:auto, suffix=" ppm"), marker=:circle, ms=0.05, fill=:red, figsize=(15,5), xshift=4) @@ -18,14 +18,14 @@ text!(mat2ds("m@-2@-(t) = a + b@~\\327@~t"), font=12, region_justify=:TL, offset=(away=true, shift=0.25), fill=:lightyellow) # Basic LS line y = a + bx + cx^2 -model = trend1d("@MaunaLoa_CO2.txt", output=:xm, n_model=:p2) +model = trend1d("@MaunaLoa_CO2.txt", output=:xm, model=:p2) plot!("@MaunaLoa_CO2.txt", frame=:same, ms=0.05, fill=:red, yshift=6) plot!(model, pen=(0.5,:blue)) text!(mat2ds("m@-3@-(t) = a + b@~\\327@~t + c@~\\327@~t@+2@+"), font=12, region_justify=:TL, offset=(away=true, shift=0.25), fill=:lightyellow) # Basic LS line y = a + bx + cx^2 + seasonal change -model = trend1d("@MaunaLoa_CO2.txt", output=:xmr, n_model="p2,f1+o1958+l1") +model = trend1d("@MaunaLoa_CO2.txt", output=:xmr, model="p2,f1+o1958+l1") plot!("@MaunaLoa_CO2.txt", frame=:same, ms=0.05, fill=:red, yshift=6) plot!(model, pen=(0.25,:blue)) text!(mat2ds("m@-5@-(t) = a + b@~\\327@~t + c@~\\327@~t@+2@+ + d@~\\327@~cos(2@~p@~t) + e@~\\327@~sin(2@~p@~t)"), diff --git a/tutorials.md b/tutorials.md index de11fc6db..aa0d7385e 100644 --- a/tutorials.md +++ b/tutorials.md @@ -100,4 +100,15 @@ ~~~~~~ @@ + @@box + ~~~~~~ + @@title Insets in figures@@ + @@box-content + ~~~ + + ~~~ + @@ + ~~~~~~ + @@ + @@ diff --git a/tutorials/insets.md b/tutorials/insets.md new file mode 100644 index 000000000..a21d9ee5d --- /dev/null +++ b/tutorials/insets.md @@ -0,0 +1,3 @@ +# Figure insets + +{{list_folder_with_images insets}} \ No newline at end of file diff --git a/tutorials/insets/insets.md b/tutorials/insets/insets.md new file mode 100644 index 000000000..f2be2964f --- /dev/null +++ b/tutorials/insets/insets.md @@ -0,0 +1,150 @@ +# Figure insets + +The \myreflink{inset} function can be used as an option to the `plot`, `basemap` and `grdimage` +functions. While not all the possibilities offered by the `inset` function are available in this case, +because all functionalities must be requested via a nested call, it offers quite nice features that +allow creating elaborated figures with very short commands. + +First example shows how to make a zoom over a region of a synthetic plot. Notice how we use here +the `inset` command as if it was just another option of the `plot` function. The location of the inset +window is found with a heuristic that tries to place them above the zoom window (to avoid overlapping +the plotted line) or in one corner when previous condition is not possible. + +\begin{examplefig}{} +```julia +using GMT + +t = 0:0.01:2pi; +plot(t, cos.(t).+rand(length(t))*0.1, inset=(zoom=(pi,pi/4), box=(fill=:lightblue,)), show=true) +``` +\end{examplefig} + +If we select the zooming interval over a region where the zoom window has a different aspect ratio +(such that as in this case it would overlap the inset located above it) the inset location jumps +to another location. In case of need the inset size is scaled down such that it doesn't go out of +the main figure dimensions. But all of this can be manually controlled by using the `pos` or `position` +sub-options. + +\begin{examplefig}{} +```julia +using GMT + +t = 0:0.01:2pi; +plot(t, cos.(t).+rand(length(t))*0.1, inset=(zoom=(pi/2,pi/6), box=(fill=:lightblue,)), show=true) +``` +\end{examplefig} + + +We can make zooms on more than one line but for it to work we must plot them as a multi-column dataset. +That is, we must plot all the lines in one command like the next example. Lines existing in the figure +resulting from previous plot commands (case in which we should have used the `plot!` form) are ignored. + +\begin{examplefig}{} +```julia +using GMT + +t = 0:0.1:2pi; +plot([t cos.(t) cos.(t.+0.1)], multi=true, inset=(zoom=(pi,pi/4), box=(fill=:lightblue,)), show=true) +``` +\end{examplefig} + + +If we want to plot another curve instead of zooming a part of the one in the main figure we pass +the data of that second curve as argument to the `inset` option. Here, for simplicity, we will +show a sinusoid over the same domain. + + +\begin{examplefig}{} +```julia +using GMT + +t = 0:0.1:2pi; +plot(t, cos.(t), inset=([t sin.(t)]), lc=:red, ls=:dash, show=true) +``` +\end{examplefig} + + +In the above examples, selecting the zoom coordinates was simple but when the _xx_ axis represents time, +things get a bit more complicated because time is in fact stored as a number of seconds since a reference +epoch. And there are _lots_ of seconds in an interval. So, when _xx_ axis has time, we must provide the zooming +interval in a date or date-time format. Currently the program accepts time in the ISO "yyyy-mm-ddTHH:MM:SS", +"dd-o-yyyy" or "dd-o-yy" formats. When using the ISO format the _time_, that is the part that includes and +follows the `T....`, is optional + + +\begin{examplefig}{} +```julia +using GMT + +D = gmtread("@RHAT_price.csv", o="0,2", par=(FORMAT_DATE_IN="dd-o-yy",)) +viz(D, inset=(zoom=("2004-01-01","2005-01-01"),)) +``` +\end{examplefig} + + +For an inset with a rectangle showing the zone that is displayed in main figure, use the `rect` (or `rectangle`) +option. Arguments in this example mean a line thickness of 2 points and a red line color. `rect=true` would +have plotted a thinner (0.75 pt) blue rectangle. + +\begin{examplefig}{} +```julia +using GMT + +G = grdcut("@earth_relief_04m", R="-48/-43/-26/-20"); +viz(G, cmap=:world, J=:merc, inset=(coast, R="-80/-28/-43/10", J=:merc, shore=true, ocean=:blue, rect=(2,:red))) +``` +\end{examplefig} + + +But if instead of a rectangle we want to plot a symbol, let’s say, a red circle, we can call the `plot` function +inside `inset`. In next example we also ask to plot the inset at bottom right (:BR) instead of the default +top right (:TR) default position. If wished, things can be made more complex by passing a full featured GMTdataset +to the `plot` function. _e.g._, `plot=(data=D, ...)` + +\begin{examplefig}{} +```julia +using GMT + +G = grdcut("@earth_relief_04m", R="-48/-43/-26/-20"); +viz(G, J=:merc, + inset=(coast, R="-80/-28/-43/10", J=:merc, shore=true, pos=(anchor=:BR,), + plot=(data=[-45.5 -23], marker=:circ, fill=:red)) + ) +``` +\end{examplefig} + + +Next examples show how we can zoom out a region of an image and show it in the inset. We will use +as example the image containing the "Finger of God" Bok globule in the Carina Nebula. We download +the images directly from the Wikipedia site. The first example lets the inset location algorithm +choose where to put the inset window. In the second we decide that ourselves. + +\begin{examplefig}{} +```julia +using GMT + +im = gmtread("https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/NGC_3372a-full.jpg/2560px-NGC_3372a-full.jpg") +viz(im, inset=(zoom=(910,980,350,430),)) +``` +\end{examplefig} + + +Hmm, the above figure is nice, but the finger is a bit fuzzy. The issue is the image is somewhat low resolution. +The Wikipedia page has a high-resolution image but it's a 200 MB jpeg compressed image. Too big to use in these +examples. But we can download only the _finger_ and add it as the inset. In this case we don't have a rectangle +to zoom out (because we are using a different image in the inset) but still want to indicate what zone of the +base image is shown in higher resolution. For that, we use the `pzoom` option (that stands for _pseudo-zoom_), +which expects a _x,y_ location only. Since these images are not referenced, we use _rows_ and _column_ numbers +(counting from lower left corner) as coordinates. + + +\begin{examplefig}{} +```julia +using GMT + +im = gmtread("https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/NGC_3372a-full.jpg/2560px-NGC_3372a-full.jpg") +dedo = gdaltranslate("https://upload.wikimedia.org/wikipedia/commons/f/f8/NGC_3372a-full.jpg", srcwin=1, + limits=(10580, 11360, 9410, 10270)); +viz(im, inset=(dedo, pzoom=(945, 390), pos=(anchor=:MR,))) +``` +\end{examplefig} diff --git a/tutorials/insets/tilelogo.jpg b/tutorials/insets/tilelogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ec104be986a0e39504aead6064cb81c7becadc6 GIT binary patch literal 24101 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 O-O|HaqF$TuF#kWxM6<#G literal 0 HcmV?d00001