GenericMappingTools / pygmt

A Python interface for the Generic Mapping Tools.
https://www.pygmt.org
BSD 3-Clause "New" or "Revised" License
749 stars 217 forks source link

Figure.legend: Support passing a StringIO object as the legend specification #3438

Closed seisman closed 1 week ago

seisman commented 2 weeks ago

Description of proposed changes

This PR adds StringIO support to Figure.legend, so that we can pass a StringIO object containing the legend specification to Figure.legend.

Need to wait for #3326.

Closes #571 and #576.

Example

import io
import pygmt

spec = io.StringIO(
"""
G -0.1i
H 24p,Times-Roman My Map Legend
D 0.2i 1p
N 2
V 0 1p
S 0.1i c 0.15i p300/12 0.25p 0.3i This circle is hachured
S 0.1i e 0.15i yellow 0.25p 0.3i This ellipse is yellow
S 0.1i w 0.15i green 0.25p 0.3i This wedge is green
S 0.1i f 0.25i blue 0.25p 0.3i This is a fault
S 0.1i - 0.15i - 0.25p,- 0.3i A contour
S 0.1i v 0.25i magenta 0.5p 0.3i This is a vector
S 0.1i i 0.15i cyan 0.25p 0.3i This triangle is boring
D 0.2i 1p
V 0 1p
N 1
M 5 5 600+u+f
G 0.05i
I @SOEST_block4.png 3i CT
G 0.05i
G 0.05i
L 9p,Times-Roman R Smith et al., @%5%J. Geophys. Res., 99@%%, 2000
G 0.1i
T Let us just try some simple text that can go on a few lines.
T There is no easy way to predetermine how many lines may be required
T so we may have to adjust the height to get the right size box.
""")

fig = pygmt.Figure()
fig.legend(spec, region=[0, 10, 0, 10], projection="M6i", position="x0.5i/0.5i+w5i+jBL+l1.2")
fig.show()

legend