From 4c5261381769b42f6914dfd96893780a7c9bea31 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 08:09:40 +1200 Subject: [PATCH 01/16] Allow passing str type into angle argument of text So that we can set angle=True or angle="", and users can parse the angle from a textfile (in GMT it will be `-F+a`. Added a test case for this, and ensure that angle/font/justify=True (i.e. setting a boolean type) works. --- pygmt/base_plotting.py | 16 ++++++------ ..._text_angle_font_justify_from_textfile.png | Bin 0 -> 14130 bytes pygmt/tests/test_text.py | 23 ++++++++++++++++++ 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 pygmt/tests/baseline/test_text_angle_font_justify_from_textfile.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index c7c85813cdf..1ad5749b26f 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -855,23 +855,25 @@ def text( the text text : str or 1d array The text string, or an array of strings to plot on the figure - angle: int, float or bool + angle: int, float, str or bool Set the angle measured in degrees counter-clockwise from horizontal. E.g. 30 sets the text at 30 degrees. If no angle is - given then the input textfile(s) must have this as a column. + explicitly given (i.e. angle=True) then the input textfile(s) must + have this as a column. font : str or bool Set the font specification with format "size,font,color" where size is text size in points, font is the font to use, and color sets the font color. E.g. "12p,Helvetica-Bold,red" selects a 12p red - Helvetica-Bold font. If no font info is given then the input - textfile(s) must have this information in one of its columns. + Helvetica-Bold font. If no font info is explicitly given (i.e. + font=True), then the input textfile(s) must have this information + in one of its columns. justify: str or bool Set the alignment which refers to the part of the text string that will be mapped onto the (x,y) point. Choose a 2 character combination of L, C, R (for left, center, or right) and T, M, B for top, middle, or bottom. E.g., BL for lower left. If no - justification is given then the input textfile(s) must have this as - a column. + justification is explicitly given (i.e. justify=True), then the + input textfile(s) must have this as a column. {J} {R} """ @@ -888,7 +890,7 @@ def text( if angle is not None or font is not None or justify is not None: if "F" not in kwargs.keys(): kwargs.update({"F": ""}) - if angle is not None and isinstance(angle, (int, float)): + if angle is not None and isinstance(angle, (int, float, str)): kwargs["F"] += f"+a{str(angle)}" if font is not None and isinstance(font, str): kwargs["F"] += f"+f{font}" diff --git a/pygmt/tests/baseline/test_text_angle_font_justify_from_textfile.png b/pygmt/tests/baseline/test_text_angle_font_justify_from_textfile.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2449047847bf0730fa85044401c757aa35adcc GIT binary patch literal 14130 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 literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index fb3f54d9789..6dec18a3d21 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -8,6 +8,7 @@ from .. import Figure from ..exceptions import GMTInvalidInput +from ..helpers import GMTTempFile TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), "data") POINTS_DATA = os.path.join(TEST_DATA_DIR, "points.txt") @@ -172,3 +173,25 @@ def test_text_justify_parsed_from_textfile(): D="j0.45/0+vred", # draw red-line from xy point to text label (city name) ) return fig + + +@pytest.mark.mpl_image_compare +def test_text_angle_font_justify_from_textfile(region, projection): + """ + Print text with x, y, angle, font, justify, and text arguments parsed from + the textfile. + """ + fig = Figure() + with GMTTempFile(suffix=".txt") as tempfile: + with open(tempfile.name, "w") as tmpfile: + tmpfile.write("114 0.5 30 22p,Helvetica-Bold,black LM BORNEO") + fig.text( + region=[113, 117.5, -0.5, 3], + projection="M5c", + frame="a", + textfiles=tempfile.name, + angle=True, + font=True, + justify=True, + ) + return fig From 138617f4940f9d4192c19c6206e009b7883d27ac Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 09:16:43 +1200 Subject: [PATCH 02/16] Alias pen(W) for text --- pygmt/base_plotting.py | 8 ++++++-- pygmt/tests/baseline/test_text_pen.png | Bin 0 -> 2513 bytes pygmt/tests/test_text.py | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 pygmt/tests/baseline/test_text_pen.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 1ad5749b26f..dc076a39bba 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -813,7 +813,7 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg lib.call_module("legend", arg_str) @fmt_docstring - @use_alias(R="region", J="projection", B="frame") + @use_alias(R="region", J="projection", B="frame", W="pen") @kwargs_to_strings( R="sequence", textfiles="sequence_space", @@ -867,7 +867,7 @@ def text( Helvetica-Bold font. If no font info is explicitly given (i.e. font=True), then the input textfile(s) must have this information in one of its columns. - justify: str or bool + justify : str or bool Set the alignment which refers to the part of the text string that will be mapped onto the (x,y) point. Choose a 2 character combination of L, C, R (for left, center, or right) and T, M, B for @@ -876,6 +876,10 @@ def text( input textfile(s) must have this as a column. {J} {R} + pen : str + Sets the pen used to draw a rectangle around the text string + (see *clearance*) [Default is width = default, color = black, + style = solid]. """ kwargs = self._preprocess(**kwargs) diff --git a/pygmt/tests/baseline/test_text_pen.png b/pygmt/tests/baseline/test_text_pen.png new file mode 100644 index 0000000000000000000000000000000000000000..68ce614a7ea7b0a9ef47528114ce99c8f0ea66c5 GIT binary patch literal 2513 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 b Date: Sat, 20 Jun 2020 09:54:07 +1200 Subject: [PATCH 03/16] Alias clearance(C) for text --- pygmt/base_plotting.py | 14 +++++++++++++- .../baseline/test_text_round_clearance.png | Bin 0 -> 3579 bytes pygmt/tests/test_text.py | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 pygmt/tests/baseline/test_text_round_clearance.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index dc076a39bba..1b136e588c5 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -813,7 +813,7 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg lib.call_module("legend", arg_str) @fmt_docstring - @use_alias(R="region", J="projection", B="frame", W="pen") + @use_alias(R="region", J="projection", B="frame", C="clearance", W="pen") @kwargs_to_strings( R="sequence", textfiles="sequence_space", @@ -876,6 +876,18 @@ def text( input textfile(s) must have this as a column. {J} {R} + clearance : str + ``[dx/dy][+to|O|c|C]`` + Adjust the clearance between the text and the surrounding box + [15%]. Only used if *pen* or *fill* are specified. Append the unit + you want ('c' for cm, 'i' for inch, or 'p' for point; if not given + we consult 'PROJ_LENGTH_UNIT') or '%' for a percentage of the + font size. Optionally, use modifier '+t' to set the shape of the + textbox when using *fill* and/or *pen*. Append lower case 'o' to + get a straight rectangle [Default]. Append upper case 'O' to get a + rounded rectangle. In paragraph mode (*paragraph*) you can also + append lower case 'c' to get a concave rectangle or append upper + case 'C' to get a convex rectangle. pen : str Sets the pen used to draw a rectangle around the text string (see *clearance*) [Default is width = default, color = black, diff --git a/pygmt/tests/baseline/test_text_round_clearance.png b/pygmt/tests/baseline/test_text_round_clearance.png new file mode 100644 index 0000000000000000000000000000000000000000..c35e44a5d74e85791b2ba00b485c75a1ddd62657 GIT binary patch literal 3579 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 literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 88e7f8e9792..930a6d19f72 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -148,6 +148,24 @@ def test_text_pen(region, projection): return fig +@pytest.mark.mpl_image_compare +def test_text_round_clearance(region, projection): + """ + Print text with round rectangle box clearance + """ + fig = Figure() + fig.text( + region=region, + projection=projection, + x=1.2, + y=1.2, + text="clearance around text", + clearance="90%+tO", + pen="default,black,dashed", + ) + return fig + + @pytest.mark.mpl_image_compare def test_text_justify_bottom_right_and_top_left(region, projection): """ From 9b8e837572da8e560295abd52d810a30f4d14872 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 10:06:55 +1200 Subject: [PATCH 04/16] Alias fill(G) for text --- pygmt/base_plotting.py | 9 ++++++++- pygmt/tests/baseline/test_text_fill.png | Bin 0 -> 1916 bytes pygmt/tests/test_text.py | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 pygmt/tests/baseline/test_text_fill.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 1b136e588c5..8673b9d027b 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -813,7 +813,7 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg lib.call_module("legend", arg_str) @fmt_docstring - @use_alias(R="region", J="projection", B="frame", C="clearance", W="pen") + @use_alias(R="region", J="projection", B="frame", C="clearance", G="fill", W="pen") @kwargs_to_strings( R="sequence", textfiles="sequence_space", @@ -888,6 +888,13 @@ def text( rounded rectangle. In paragraph mode (*paragraph*) you can also append lower case 'c' to get a concave rectangle or append upper case 'C' to get a convex rectangle. + fill : str + Sets the shade or color used for filling the text box [Default is + no fill]. Alternatively, use fill='c' to plot the text and then use + the text dimensions (and *clearance*) to build clip paths and turn + clipping on. This clipping can then be turned off later with clip + -C. To not plot the text but activate clipping, use fill='C' + instead. pen : str Sets the pen used to draw a rectangle around the text string (see *clearance*) [Default is width = default, color = black, diff --git a/pygmt/tests/baseline/test_text_fill.png b/pygmt/tests/baseline/test_text_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f341828aaa0536f6aa626ed142035ac460b5da GIT binary patch literal 1916 zcmZvddpHvc8^DLysM#Do#G$$LEMz4s=8)^$BA0D)U9B+5ahuy{gqe>KopL0pkT@VE`9z5130t z3@L$hA^u`)0t|&XcI@m{Jp%v$%DXw)V^eO6D}q`-9omO3Vd&})!Gy2Owq~!=vs0q% zG=C8^e2?=&$QT;xwRq|dQK(RdXs#obR}6KSyZcrLMlHs$BV0jx`UNy9wDtKvQGaJ> zi9PM#z2i?@%Ys(9&eQ1qJ)Mn`hLAx{M((P~=4P6FplRfTX8 z1mX9ggksm5*Y#5yx*_qQtgmtLj*@Tpw}QPB2tk7y?w07taFSlpp5u_GN#&#CU)zCe z1Zrl@+~SIw_YPvRP(^MU=n+GSr-K_IbzRd2iyKm8S6Yr|v#AWx{Gb z2BWa6FJZlE)!@y|%0nqQLND8ng+$BAeTs9go>6sbv^Kd#&CEHwm38IE5!xowlb76s zS5v2g=E!eK`puACp8hpvUEA{QHmFSLZ2UZZb~V^F)QIdSAv-f*`Y6?dyMx`2h9>1F z)a438$A(mptlBDZD8Eiyg0>%5c zj7fszF<-Q+85!D2w*3HojE{kB6fdR*Y~&5Ug$Qpl&j ztuL%Zi%)w59Pae(=Rb`}l$x;3PEztj^5L7GgkgEGm{)7>)SXX0%f%`K+sJjjPKMh{cnwloXlj*%&9_)E`EQy>q2FP5=C3#Yd!bF<4@WwwN#t?IMqN2~W4+83A11V|fF z#}B6HrtwF{Vb9-H{MrdF8vXGrqB(9KnC-wb7`SCf4onQtN#E!egSbkkRf0!z*MPrd z@u06xWk1)paqSO+ev@7^Vtm8`&GoM+V2qB%ekdEgHy-r`=^;l<0rK83zw^J#4^A*q zlBpI;Pg8Ys(%553_5YHgt0J|EP)+25{FuIS(P48J&6}oeBkbPZ*ka;59UOc_$UAzs zbTQzOZTP|}{Qz_an-N|gqH453sT=gHzbaZ5Ue!7SCIuQw>|E?@|so3N!p`4|#(5b1_)O@?{JlN)x$pNf^rpK48 z%X{iLxNQem-8|NJ?hXZp5C?Ph1?aewC@_R|(aSVtFluj%vkf!a6(C{Dv~J zC5|V_mXDt1Zu52w`LbY3w1BCF%$xfSmo+Ln6zMz^0eDoG&3B)dw8u$+h|3*`Zlvoe z0gx$6Ip)*wRi#p?x>6K>w5RsE6SWz!D`(IHw136$} jNQHj*S3Uh-TAvSG;t(fP)T7gO%?WTrpLSw6oXh$f=VhL{ literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 930a6d19f72..759bb73a90b 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -131,6 +131,23 @@ def test_text_font_bold(region, projection): return fig +@pytest.mark.mpl_image_compare +def test_text_fill(region, projection): + """ + Print text with blue color fill + """ + fig = Figure() + fig.text( + region=region, + projection=projection, + x=1.2, + y=1.2, + text="blue fill around text", + fill="blue", + ) + return fig + + @pytest.mark.mpl_image_compare def test_text_pen(region, projection): """ From 46e98d7ca91144b1cb0f5eebb28fc90e595d83de Mon Sep 17 00:00:00 2001 From: Wei Ji <23487320+weiji14@users.noreply.github.com> Date: Sat, 20 Jun 2020 10:22:48 +1200 Subject: [PATCH 05/16] Remove documentation on clip for fill in text --- pygmt/base_plotting.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 8673b9d027b..a51970781f2 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -890,10 +890,7 @@ def text( case 'C' to get a convex rectangle. fill : str Sets the shade or color used for filling the text box [Default is - no fill]. Alternatively, use fill='c' to plot the text and then use - the text dimensions (and *clearance*) to build clip paths and turn - clipping on. This clipping can then be turned off later with clip - -C. To not plot the text but activate clipping, use fill='C' + no fill]. instead. pen : str Sets the pen used to draw a rectangle around the text string From 9e7a3534b2ba5f5668cdd94db1954a554308d6c0 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 12:12:05 +1200 Subject: [PATCH 06/16] Allow text placement using position argument instead of x/y pairs Equivalent to using `-F+c` in GMT. --- pygmt/base_plotting.py | 44 +++++++++++++++--- .../test_text_position_four_corners.png | Bin 0 -> 9237 bytes pygmt/tests/test_text.py | 24 ++++++++++ 3 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 pygmt/tests/baseline/test_text_position_four_corners.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index a51970781f2..168600ff491 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -826,6 +826,7 @@ def text( textfiles=None, x=None, y=None, + position=None, text=None, angle=None, font=None, @@ -833,13 +834,16 @@ def text( **kwargs, ): """ - Plot or typeset text on maps + Plot or typeset text strings of variable size, font type, and + orientation. Used to be pstext. - Takes in textfile(s) or (x,y,text) triples as input. + Must provide at least one of the following combinations as input: - Must provide at least *textfiles* or *x*, *y*, and *text*. + - *textfiles* + - *x*, *y*, and *text* + - *position* and *text* Full option list at :gmt-docs:`text.html` @@ -853,6 +857,17 @@ def text( x/y : float or 1d arrays The x and y coordinates, or an array of x and y coordinates to plot the text + position : str + Sets reference point on the map for the text by using x,y + coordinates extracted from *region* instead of providing them + through *x* and *y*. Specify with a two letter (order independent) + code, chosen from: + + * Horizontal: L(eft), C(entre), R(ight) + * Vertical: T(op), M(iddle), B(ottom) + + For example, position="TL" plots the text at the Upper Left corner + of the map. text : str or 1d array The text string, or an array of strings to plot on the figure angle: int, float, str or bool @@ -899,17 +914,34 @@ def text( """ kwargs = self._preprocess(**kwargs) - kind = data_kind(textfiles, x, y, text) + # Ensure inputs are either textfiles, x/y/text, or position/text + if position is None: + kind = data_kind(textfiles, x, y, text) + elif position is not None: + if x is not None or y is not None: + raise GMTInvalidInput( + "Provide either position only, or x/y pairs, not both" + ) + kind = "vectors" + if kind == "vectors" and text is None: - raise GMTInvalidInput("Must provide text with x and y.") + raise GMTInvalidInput("Must provide text with x/y pairs or position") if kind == "file": for textfile in textfiles.split(" "): # ensure that textfile(s) exist if not os.path.exists(textfile): raise GMTInvalidInput(f"Cannot find the file: {textfile}") - if angle is not None or font is not None or justify is not None: + # Build the `-F` argument in gmt text. + if ( + position is not None + or angle is not None + or font is not None + or justify is not None + ): if "F" not in kwargs.keys(): kwargs.update({"F": ""}) + if position is not None and isinstance(position, str): + kwargs["F"] += f"+c{position}" if angle is not None and isinstance(angle, (int, float, str)): kwargs["F"] += f"+a{str(angle)}" if font is not None and isinstance(font, str): diff --git a/pygmt/tests/baseline/test_text_position_four_corners.png b/pygmt/tests/baseline/test_text_position_four_corners.png new file mode 100644 index 0000000000000000000000000000000000000000..32315220c3c6f7a3316c02b486c0a86734cb86de GIT binary patch literal 9237 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 literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 759bb73a90b..5960ad1d794 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -97,6 +97,30 @@ def test_text_nonexistent_filename(): fig.text(region=[10, 70, -5, 10], textfiles=[POINTS_DATA, "notexist.txt"]) +@pytest.mark.mpl_image_compare +def test_text_position_four_corners(region): + """ + Print text at four corners (top left/right, bottom left/right) of map. + """ + fig = Figure() + for position in ("TL", "TR", "BL", "BR"): + fig.text( + region=region, projection="x1c", frame="a", position=position, text=position + ) + return fig + + +def test_text_xy_with_position_fails(region, projection): + """ + Run text by providing both x/y pairs and position arguments. + """ + fig = Figure() + with pytest.raises(GMTInvalidInput): + fig.text( + region=region, projection="x1c", x=1.2, y=2.4, position="MC", text="text" + ) + + @pytest.mark.mpl_image_compare def test_text_angle_30(region, projection): """ From 187a733d72fc552284bdad3d5c2b81ad5c6d878d Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 12:22:15 +1200 Subject: [PATCH 07/16] Alias offset(D) for text --- pygmt/base_plotting.py | 20 +++++++++++++++++- .../test_text_position_offset_with_line.png | Bin 0 -> 10139 bytes pygmt/tests/test_text.py | 19 +++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 pygmt/tests/baseline/test_text_position_offset_with_line.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 168600ff491..0c35a9fa7dd 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -813,7 +813,15 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg lib.call_module("legend", arg_str) @fmt_docstring - @use_alias(R="region", J="projection", B="frame", C="clearance", G="fill", W="pen") + @use_alias( + R="region", + J="projection", + B="frame", + C="clearance", + D="offset", + G="fill", + W="pen", + ) @kwargs_to_strings( R="sequence", textfiles="sequence_space", @@ -907,6 +915,16 @@ def text( Sets the shade or color used for filling the text box [Default is no fill]. instead. + offset : str + ``[j|J]dx[/dy][+v[pen]]`` + Offsets the text from the projected (x,y) point by dx,dy [0/0]. If + dy is not specified then it is set equal to dx. Use offset='j' to + offset the text away from the point instead (i.e., the text + justification will determine the direction of the shift). Using + offset='J' will shorten diagonal offsets at corners by sqrt(2). + Optionally, append '+v' which will draw a line from the original + point to the shifted point; append a pen to change the attributes + for this line. pen : str Sets the pen used to draw a rectangle around the text string (see *clearance*) [Default is width = default, color = black, diff --git a/pygmt/tests/baseline/test_text_position_offset_with_line.png b/pygmt/tests/baseline/test_text_position_offset_with_line.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4fec40454e5a76b3a2a528e7356362c5620d97 GIT binary patch literal 10139 zcmb_?c{J4T-}i?|_9a5uqY^^e>=i$0;PXMrGyU0+Yz z1cDApLl9ll5qeNkX1J;c{xG}hnIj?S+)3Im9XdzT0~89o>)dz0`^>@J^MRW^q1$uRhfZ4{8GB?m;11t;>91V=pz+>AtWtC8 z6+Y|eX*~00qf099V=nFj*QLB@pb~q^Q zew*O`vQ`D-eik)@VWBr_PuME$a@k-~e z828Mc3sL$?l8rBJ^7Il!6iVL+`{Jp;bkstU7`CN5YJ%FVi)U319Ti7mnS^3m7h|gS zGmP@?Rz2;$5M|I3cI^&N^}$q|8DVOZ&*rWSW-je>k@?W>u{@0E_Hdze(j#>- zmnWVdq&+QBk6Y96;5r$CPsEk%M2@k-wIx2bMVLvp`pS=`B90s8x?Q!ywLUU6W!+$C zQJlWgR?SkWsQc4|cF1f6_#l2`!Sjcjl269n-J~xo+B6++Cm%Cb9Bfl*gD)?ZKB*ojh88PfGIqD~9;hZhpilCOno3S9-2_OyUROr~$^_ zD+6XKg{Eu2L3$F~Guvyekb5RVJkzx98Fwn;qj3!@!aqV0YtoO}Y%P;bnqy8|Uy71L z$3>LMt~KK1@duXoU!oR5z1`!yBL|P3fJLmFDtcn{$M=xH*)vv*_QiGY8kXZV8WGoi z7>FN3NYBAJ1@^7ap790-`O^=R!$sV=vnk;=r^q>j!KUQam~PK?6>#IjZf201&lq?L zA=s_RTY+F&aw0+;q5F(6d(8=Ki(J8rn{==-dfB$*Nn4j<123v)K(XtT%foKrSAre0 zL6QPUNw*du(elxy!U7hNrz*IZom3`>zO4Ui=L)6OfWMgUw%V;e`mj*N)|EM&hDgkw z1#B8#3^lNq@k0&1ua)VccHIqnC^=@H5mFExV1*DGe{1aIp+IUI9D>&32oN-V(ueN< zs$t4iW8Tybhw=eg61TuN#demonDOj0n8hQzSO3S?E|C_RDbt$SmWcB`r;y64Wspn|8618YT0PIm>c&^gP0Qti9g&{xUZt#J_ci`8K!QTy47{Cv?;)uABq%@4d026I zKY3=>oh9f`g7og7*wc&eJ38dh%)s1-$N&k21k3S1|Q zG_hPaa37FqzFXfVXF?WmV6?+t{uI<5|H#}7V?Uy}oOq4U`H2I<4}x|X_5=R)nyB{S z;C;h$U7k(D|D-*OP)2S-f#@Q!ie23HOl)Paj9RPnX=2&r%5PFK-=T|x%OP*bV8vNoyFdN*art6m8j;ww#pMcM^ z`}=C6+i#7pL&=SjnS+OPPFRH0v0@`N8ZQ+V;MV^5i)Jh}^mWif38{bX?&!vaVy+<< zu+c7c4_o?Tv`X`Oq-Sm!^LBZ@mnAOF*NmU47ghnAKUk)-n>7_$vr#quMozU)J^6xX z0RQwnGlUOk)bxF(FI6#Ig($K5BAgT2gu~S8XKqyD~flpEE^Zs55;Jru=~!Z$OEC- zwp)ckwP8v2%BcF>tZl}t*G=-#IU*MOy#yTfdFS$#5?{U#q~E_bS+?JU+Fch$>=6n) zKNO=znQB!g>X8ahhsaCtd?1DIT)5aL4@o55Y?iUqq20_{grHLs+Icx%6!uR*K5&~# zpnk$#6WwgKX>rYwxx9boyh%Ovg*Dp*aZi?SXc#v>Aak@H3hRpD!zP!*va_VR>R?|} zK8Xy?Mvq0Q3UTNdGaT(HlP#p+4n{@SblCk4i_(SNysj0+FLOi=u#VF;Yl!;aO86Tn z%5>5I$@20!)j{;e9TMf%I%}W+8yoynAHj^vB0Kpbpc5{M?6w^6$&dbYrPaJL@Hn(a z#UIXM;}w;>p8SFW@k4-)R5_Up_W*ANJQwu$ar`Tc^-b0!X~V z){%x?5q9{eDCHaWR*vE4d~&AV&L@W3K|P~4wRLAg=pdKpX`oboA2bhG|OL?oz} zWWYLpga6>JhtTn3d`bf{H$eaQ%<#Abf`k<46g0-CIUoZEg`C{@crhOx!(DoWSfdPI z8EhVmHm$;ygHv|uV@0dURcX_ zLEW;}3CwdOVhm+qk!9ag>AZZ$y1#YulT(Un#~&{^X3D=lGq+z@$9ULj8?_K!KJav# zb7S;p(l+?n+wsKMXJ%#&EqHY1(j|A8G*afsZW&|%=$$UZ@egU%vse7jWtDMD%|8pO zg#~BhxA?R+zJpnQwk)0CLvGN(oCxP!_&V^?$L(V4FpvIjgrtxC1b>6KoNBLt^Ty4~ z6}zcReWRgjU2AI3R6G9?Ktp3*Tc3TSfRm(L;4KH$g*dt{<4#Tc(-p-l!(mdw7W;jK zAO_FVCpJ8{zTGsk?kBmB9;-NB4(S#)`fFwg!-q%U&wml(IpnBQf+YUo03$#Wxn?qM z#kEc<{@#!ENX>mdWqWm<6>*W)5;%ZANulTJMR*)`EPX!=jrO91EBwjd?9Dv_*fuh6 z?b6?8Y@|f@Y7sLPTU{1h5aNnwa-&Md)N$$ggX!8&ZKL_YCHTo_x*Xx!uDDKv{bR3( z85I{W2$(KxIfUF={>~>v7;CaeuXpbrFsXmt6y4B9?nY#M)UBV3lG(*R>G}S2AEdsF z@mZ3dFlO10?%_*OZd}CURyry z$e1xry++8qDYiiaF< z3YVp$;DB$b%D&`U#jybSU%*PkV#h89|GrNAiY=nx>NDnNhAcG8>jYzfiDgTm2^MKt zQ=h2tM)lWadAh!>*2~INUo7|L_4<=vsBr6~8k@MyqX?1-Gkn%x`v!0s4p>}COsnld z#<j)RH`7=MzvwixoT+3s972`6tOsLkL|afvtCkH#euS`5)C<8y6WT10FpTp|0L_ zzh+TQh~nDm3`mV1Wv5B-kO{NgWi5)A_h8?j-<8hyb|6S`XK!codl~HMPZqiUa+oo1 z=+`XGI~JyW6{-kpW@x0*rRr!sT(YLy&0c2j4|?Fm4_l?sO?nzIM{(SZkTnSgP*<6+Z=l%>Nb5W0}>CH z1Y{=9vA4d%uHxIL63Svs!f+xp1eZ+Sl8RE72ZZLd4~o@OX-Uho+g0zH%tyr=8o8{{ zEg6~_5_Yd3rKBCt>4o`S>-E#mgaXeLi&gv?_?h_OUCqws2J_+#mj>>@iu(=|`oJb1 zkj`|iJ$zGW=%P}hLH;>2HEP&1d^2uu#rjY*v|P!~Z+#P~_)oVZ&0Z4&D-j!>4MG?aHvWC{wOhU zQbkSB;^EuEy8j}?t-cqfAv^O*lFQ{(!>Sp3j0e0HoQkvt`o8Se6cs4QitmcRgveWq&?|M-#qtZ*xuSw=)IDNdWpF| z?SqnjLI>#!aD(qIF+znELkqyM|K#Ua{6&Dou5%W1{SbaPyx>twDsdj-caQi7uxf?2 z_n!+FJcbMr1vY7dNQS_qt?lhO%=Z?>FajHedro|fjOzN5|jbUhkwkh7&f2j za2~9*#&I$aJ-xKYM96`PZW!|#_Aqcx(?arNvt2A7|2yx`%o->>6S4M1Pkw>1 z45?dU2Ksjp(p9C{YME0Gi^=k+vcXIl4ADboVx;ae!SkB+svou^BDrh`d;K*kzteu5 zgBpZk@*=OPb>~+?kJ&~8K5ni7*dQt3j~jn`N%ond8+4GYeSCM>ZnAAvvX@Bh-t!Na zGEDLmb)jD!$+rEHS@u*M4Ayf&E4S^U;d|&XBlP+t<=%b}=GfnqVaP9tkbB>0N&2FpED6zYgq{b=Uxy#0)J zz?%Y}wYJ^dnSUMx07h^r6!__zq55{Ougn{bq3566@8LH zhsap_M};;;RJ74tC`MANu!tR!%o4STXH#rkNU&Ny0yX7>|Adh3b)HU*-~YXy$u$r? z*pXNvG2{P=^JMXLFwd0T<+#bQa}$lSm!QCJhI|&sGM;Fe_}w%M#OrHl$T0 z;6D^w7wrzlpEP-9&brY-h{JbZVXA|Ov5B}KvVbcCG<{j60VehT1gI)^ZO$7hRycj)=u2=OK=P zMSG^h8UYpAXMkd`KBU$~EE`_hlwbJj3Olf|**iwp@U+DL++Y0+TvjexxP-!HpUIdT zR6tpej)uw-Q*xDsI9L!+gXzlO%Eezc{Nkbo>}IBXTI&WR)Tl)HEZ2GB@suMkPUk6_VT*{%!EJc`d+*%sN%O*?WPJx~nkyoHsJ&hV-tV z&6@Jwz_tI*d>~pTt11#h5`C7a7_9D;(gGMJ8u{%N=Gg$n&C9Om!rJ^*4>`>dFE?`x zNi=wm2^!G`A^4Ehj`-2mQ<;^=?i~pj-hbZ}AdOt0yIntXVm z3n4^+fjmQDEzA3DEFR5G|9YY9-DCjQrmZBhaxu}xk=nPnUTlbWG2I`FVx15NE1wO) zTzgXJ;b}W~MA>E4Y}0fOn6t`{Uj&zM%?eq~QHp-K^&kW-zeYOhYXH2Hl+2#L_{WT(5}QIv}7PhW^(m6IYHX|sqTib`7y@vuBt@id#9 z@#}%~+j)x_G=)l|pC-)WVv_ASq4s%d_v#nL)_1)g_2>GR?0-dK8nF*QdK^bGAV?#2 z?aw>AdH(JY@VBO>%ZQ#IernSPZV-Z$!6x^~4m-b;v5TI4Xlfe750$=qbe;H4vGwiW zNNnemB1KNR_6or5B1<>hXr&Xt&9=jt|IeM}jskbKC<83-KgBEgPlEQfB$uk8=f!IO zTt_fETUf9gAT6@ z>fTNjK!-B^IG*}ISn8VEWLnFs`DUV@uW!X6UteDadEn1k)*HCi(jJ9e7*A`7v6FuY zNNAs?rJuk5xjs>Z-?UnnubLlCeZYa)3Vlc_Sxsq~3R7L9QfDh#-p=c|cjn2RmL5a3q(5pQaqIDAHV~+AkP*=N zM5XN7TKAWuqN_d+EnG^C+G4~mbmAy`9KrMd3mQn z^!LR@?Q!|QKce_;OkL`ts?shlL-&y_L-Cda^E3O9wOaw5zpm&T&s|6&0iE{|pus42Hj^_-2srq7YwPbTm`m&Lk1 z0(i9_J@+zf-ey#6k(UPgjK(b|nB_)Cx`7;tuQ4@cJfI8x`oL<RS6 zW>5jKt33a0S&ARvPynfbg0uXrx^&g^g6CfXfH2zj*~gDJDrGb}B7hS2IAtnLzG;qzl6p1>nVmF z2nCeJh6G&wo>bsOGLk@m>!WOMgsp{|dgtJZ@tTsgrP2fGYX^_GBtg zmz)~OU)A z_)q_lYjakm{t3gV=%lg4nM{?2?@cyfXH;5&tSotS=6lfEQwI6K-yh(66S{ld@iu-J z+#1;#td_659Ao4dUH~4+15c zeb`M!!;SdyY>+qkaD6wWbpptCWwK{ZaHMJQEqp1nIs%7)4&+}E)P4T^Hsj_B$8;P! z%)Nbd8^;WXqMsux2BO|LV_)x89<_^ULmmFm#d6 zu0ibmI;v{5z1nH>^H<7?yPxaKK&!cX^^1Dy6}tmBOV8|sq+xmDyWUIVv7@mPBNPi8 zrbbqTa1+)N*!2OARqV7&P8+Tyn8B0ca6`w~{h77@=g4b>#oM(>&Kyto)WM9NNcfZD z-5sg@>toR|053*et^2{BowhZq;>Z2;p@pSe*8O|pWJadclagql_xhUMRXGsu7Hy9%O|>GL>V!J4eWanK>sc>YA(mHLcxx?&Mbl9q0A8@hRWBj#Bc~5O zdV2!KwrCHCE@05RsC^(_2;x2?ddk6al1D8jVb^JbkNY@BR@;~*i;6}-V73#6&`!`!{(zMA!5dLthsdlYxU<(RX zcZb$EL%&WE2riAeWN;2#F&_$TXx^Y6h}|cic3IBm4(|B}sH6vVtfz`T_;;gJ?Mc|r ztf^7?=vLcJ{i?^|jngT)UjA&T#@t6I!613Of9t#6?{RtN^_9skxlb6gUQ#~+W|Ex4 zS5L$G=|Lu?S$`|3@gHQP>U`!@|B+bQ-GlV2Rn|4W)NJHGRs7ijK}-U)w*Vk-;N^@C zQ)SH_R^r1mre?etW4wCSB;Wtv34`_27Y{s|3~~oM?-^BW?AD!R7!e zc=zlFzuqumy|nijd_g(_zx_F=yUc0GWB7{Wrs?~WU<-{V%>MRrN}B5rIM^BeI0pwn z)MJMo$EMhwT)9mHT}GicJHEXp`_%3I&sY#|XIy zUS2JqkC=(u@-kO|pxo@mM0=1(o2ovcmXD!Z&Il=*>of&m-YU1D@~z@C*n^if8xTG( zN5dD!WzkE>B^N^9X5lsEPmK^4LRTWKgvY5}0sBe;MrM;RT7p^rqDLj7C*cYc+2F&) zSFzgG(c_FuJak4X{gN2M0JGA4kQu2LDjNG~2#pC#9=G6ipo6BB3^y!XT}jm%kiswx zUxA0FG5&3R7C+WYAf|r=Je1u(z*Kf@%`uae31&UeRkw$%a;alC3FV^L{#4gj#bBxt z6e0a|+hji1^vN9>Waj%Y3Mzy-`H|Swm0fTMS|?x=sRni@>MWjcO#tGvv>9CM*9^|( zdPiWda)>z{3R^`($E1CnekovR#w8^bu_n@BX!e;)!k)Pw3`Z_Nr4K=ZDFCYpbh-{< zj!^%vAhhNPT|Aj^>%L{F6C|b#strBEvJQHSl9qyO*yTTy0#+*wyV}w0`ACq7Z4nwZ zq=kI1Y1*5qX=(9afPCDTOBeX(!wHKo1N-ETy}zKCkeA7rdKijN_zQv$KmG;5a?4+q z{U|qJ=g}+2|0YCVE7z4*TqkzSH@j+7>CrYImZ10Qvp(3^e-!ft`HhJIJQ!d(b$vbpdY5#niceTBW7vneOD-q!f}N|DD1gF z!b^lPbGb%X8m|A&*GTxIYqP}ClSG#2hOsTY)K>TTdA*moV4nD6`gb;uKi2L*G#QNP z+<=t|wP=_4gk>bHKkw!NuWPOaVRsHaISk?NZT?9k*R1pE2hCq>Y0z8}*Gf=`0YoeM z1(u}_^-+|I?|qcyT>npDG=B-Vt@#{X(XG<4?C~Q!*$RiOHoI|W70MU0c@{@*ShRl@ zm8=f*Lf8+jQzhl@GmN&LSg8)UeW^dAjVhrU#;rAS6R-!JWkz`k?t6ARGV!)`{L6+4 zQK#-Ii=8J;mKPK-`p{1bAcgF#7>ANiI_1+$`miayG4dnZTe^qsac%iNbmqTy3S6g= zksk$|?S#RT7Ejn+*eNu(==-Rm;F^u)x=!RA7E?P|$%hY%keWAV2P<7w^UOafgOouf z+RxsN`u*B+hG|05NB!0jTgL51gE{a@>i8K>b#oWn=Vko(q2LD$*QsxU)^-jBnK3YyKyFd)~_ zkjP-2p>un)uL9EJg=2`lx?G929`EKjK+CMnAE!0aR{OtpgbUNtxx7e{$e>TlKYsh>1*;N m`mavtUo3;fnn7bB2TXP3vXh*UTQ+!D2kGnF)-Jh@2>K7pI^9G7 literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 5960ad1d794..97820b4c656 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -121,6 +121,25 @@ def test_text_xy_with_position_fails(region, projection): ) +@pytest.mark.mpl_image_compare +def test_text_position_offset_with_line(region): + """ + Print text at four corners (top left/right, bottom left/right) of map, + offset by 0.5 cm, with a line drawn from the original to the shifted point. + """ + fig = Figure() + for position in ("TL", "TR", "BL", "BR"): + fig.text( + region=region, + projection="x1c", + frame="a", + position=position, + text=position, + offset="j0.5c+v", + ) + return fig + + @pytest.mark.mpl_image_compare def test_text_angle_30(region, projection): """ From 9f42ce10cbbda8c09a86ba782461126c2db47f25 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 22:44:21 +1200 Subject: [PATCH 08/16] Remove some lines in docstring Co-Authored-By: Dongdong Tian --- pygmt/base_plotting.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 0c35a9fa7dd..44abee6cb1a 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -845,8 +845,6 @@ def text( Plot or typeset text strings of variable size, font type, and orientation. - Used to be pstext. - Must provide at least one of the following combinations as input: - *textfiles* @@ -914,7 +912,6 @@ def text( fill : str Sets the shade or color used for filling the text box [Default is no fill]. - instead. offset : str ``[j|J]dx[/dy][+v[pen]]`` Offsets the text from the projected (x,y) point by dx,dy [0/0]. If From ada1f6d0865ff9aa1c51f410cd7aeef006707ae5 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 23:06:43 +1200 Subject: [PATCH 09/16] Reorder as angle, font, justify instead of font, angle, justify --- pygmt/base_plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 44abee6cb1a..dc969b4a87a 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -859,7 +859,7 @@ def text( ---------- textfiles : str or list A text data file name, or a list of filenames containing 1 or more - records with (x, y[, font, angle, justify], text). + records with (x, y[, angle, font, justify], text). x/y : float or 1d arrays The x and y coordinates, or an array of x and y coordinates to plot the text From 0b8078611b27b5891d7d8b2365b2f853df731a70 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 23:26:35 +1200 Subject: [PATCH 10/16] Add centre-middle text to set up map frame first So that we don't plot the map frame four times in a loop. --- pygmt/tests/baseline/test_text_position.png | Bin 0 -> 8191 bytes .../test_text_position_four_corners.png | Bin 9237 -> 0 bytes .../test_text_position_offset_with_line.png | Bin 10139 -> 10195 bytes pygmt/tests/test_text.py | 25 +++++++----------- 4 files changed, 10 insertions(+), 15 deletions(-) create mode 100644 pygmt/tests/baseline/test_text_position.png delete mode 100644 pygmt/tests/baseline/test_text_position_four_corners.png diff --git a/pygmt/tests/baseline/test_text_position.png b/pygmt/tests/baseline/test_text_position.png new file mode 100644 index 0000000000000000000000000000000000000000..6875f65ac6a79a947d7e71765d481a5d210c8d95 GIT binary patch literal 8191 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 D0<0h& literal 0 HcmV?d00001 diff --git a/pygmt/tests/baseline/test_text_position_four_corners.png b/pygmt/tests/baseline/test_text_position_four_corners.png deleted file mode 100644 index 32315220c3c6f7a3316c02b486c0a86734cb86de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9237 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 diff --git a/pygmt/tests/baseline/test_text_position_offset_with_line.png b/pygmt/tests/baseline/test_text_position_offset_with_line.png index 9c4fec40454e5a76b3a2a528e7356362c5620d97..df62e7cab50f880a312202cf1f08d798750f0280 100644 GIT binary patch literal 10195 zcmb_?2{hDi`0tk}ODNG$wg~mJ6|yBu60)`Yn24c_E!i8}AgL&ckg+F{3e7OdGG;7U z#!jT6v5zHY?E8LS{qOys|Gnp)|2g-Z>l|lhp6~m8-sfGO=lwjN=Y4VA%z%sI1P25` zTt+I5`rq|& zgbc2mh#9ze`abk^@NxBeD5fs2sA#v7hlL<9$mojhzX9np1LxnS8U8+GKbHBVsjAR_ zt|%mu{jtN0ZWuaX_B_pNv2B^P_k@iY`;qGwe*(q*Re7I94|m+r_bx}^SRp8KowtH1 zFh39cwV3b3x>FlGV69yx?u9(mSL%^egsp`IqeSOV_Utz^3kzGyz?Pd824%a|o={NY zo|YR}$OH3pz+ceRN^+dK9R9Nr@v=?bbtN^|dr(|A7AM4PW;^!5ol3xZYX5$0^qTRl zcibnXs&HNZ{&7~^+pjP|cJ3dm2wo(SqDT|7z>Kea%yn(X3+FE+HAiexxboXfn%Zv|Oih+dLUP zG+E*v>G%Xo4_-3Tz0MmDY{ub7TWC3T)}1OpV-k5Ai7O9R@bj|fV6lCr>+<9b2ID}6 zA4PvVjF>oQd=)%(I!+3*uuykp5|T*%SKPy4_-vmWc0(VBxW3snV`x(&qP8Uedf0*> zY}8qJ>-!&hycl{$QqA~tc$HAWvIYgG#h@Zw`XPIH6Q5}^4hA#^CMSnc8=j4N|{xTnUsCH7#{t{mnBy& z70$}7BJ};wl>32L6e}N9Ao~(J9^T&Nm z2&oX@pYS>V2+=Th@M?R_ZFGR$PV#1x4`n5YpJ*60c-2gA!0ouwPhYLIn{Zo7`~4iL zM)_>zt$JvnyGzbu5qDLKW6hx(#UIx(Dm0 z#Ral#Fpk~I;jrqv!1!>b?pB{ty4=lU4==2a%kM-(23?b7Nn+T*<03y^Wxo2-uP=XG z`0}L#Z|iKa6gP&-*r_uDnmhd%c^NnR{mVfE{K1<-Phlf2BnEQsHmY8-&Ulioji)RYE zh*W^WXkd9EwHO8~)S(NxRscs%(0L4|sT}6~^%fAIg?~{Sd?(XXR2J zqiou(y7m|^o0cnB<@fEQ8<7&tMJ@dOWdZ1t>5EilJK@xTCSd6V ztZYk(JG?*y8rDyVz}PjQ+xjEYu=J8Vnw+%)G(WM(CAWvfEvUS46y)>V8e+*e$DZVe z)V>wywP=UL(A))*CN_syP7(u~rZ>M*MId`wdgtQ%S^m0ea!9s2^`P!zJzvUYHdYA# z8tt+XM+!$PW^!NUEJ4=tmCp_`LBpnFBG#>6I3TZdh58QeA87>aBvCOSF;ow-_mpOn zvy009^D&&HUa4CNd=}^0?crJB5{3CZbp&GX_i6xZ4dr z3k&@M6;rduAIfd(Do=Mkm{0LQgTL4>8?S4UH|QeT{{&~;CA(W;ctnnN?(O=N=PViK zKH8z%>EGDiSsSVq)z;Q_C}GEJt_t)acE zt{ogr&oC(Sc@b5|fh`-mP=Np&8EbB+d~1FEdB{P8m`m_-CqAGcgjzz|K>8CJ&pbM@ zcQ(#IkqK(Lrd%u=g|2y(QGa~pW798lY!LC%9g8ZHTps99?^wa5Tlg%;*^h;G%j|B}?-^gbi9J zlUPXA&MI}TYEPtszgv+_E_P{v6n?!wYgX5x%at7>K2awBp5(Qj{Y4UKg&z$Gjl|0y zQ&8KP)ZUw#OoPILL%{I2*5+tK`$N^LJkK-6Z=L&J>6(qgsW zV#Jxm94#zD_I7t@GzX!o_&fz9%vx$9S-?}z3IjaJ^JlbVoKt`I(Cr%()cqGnAgAeC z9V^TWbAh)GE*p~QZ|>-Fn+EFZ_Jhc*ynhxr!-5CG;myuP!FnwUeKN`HG>lNJdzavI zI|%vD%VCQ#A?w{Hgl>=g%duod(3&yEOT=@_X*c|i6;%psjnvvsp1_^I?X$wLLDOj< z`k`!32Jz^O`miJVA~6eZ1PsicoPW@^y>jqa0OR*}vXu6?eaf91%ZZWx%+=UUU;4U@ zrn;+Tzu;FN9(J)b< zaa*d7n|un`gLLF0M%{Xf@$%@w%TnAM*0mq_2=%X9054y4prB&O&98=(l63!V2xWTx zju;LXqjdTV{KK4T|hVm=V}$i zJw}}!pGw(m?Bvx(n|d_OTdeKAxg4CbapUj{J1EEAY@X1J=)fFCpyteL6L#yAp2bi~ zW=Io*CtEO{r5Qzb(3K<<+`$GHiBWiQI(e6U%-6%3@!mze4Pmg&ES4So1TOBp2h(eD z%wHU^+?+`X77Hvw{`1x0Fu8xAb=#0yGBfAjSQ>Fi#}9K5w@{n+^1w$W(|$r{yv=HJ zi%ehskt#^-S5#CI<6HUZ1~f@7BNh^p8p1Xt#F500foEaEiQIiMT41JZ*%3x@q>MA<$W^-&n4z)QR-h5lf; z&1`?6M#dWt&jv499wBx~qdyn};n5lyPCUE|2%UI|KBv$h%(j__&(_FD;Nb^>P~-@4 zQ5-$43tGkxCkpq;oCG?VYGe%Xa5M1Og9T^Ogh&Bho?*eIHz78_x54z`#0z~g#-p%m zDo`nn9>2ED9H19YVefB4xKk}HEG&8)-|e+A?G4rB@!au5)G36OiU$lN{6}2Ag&C*y zym9OU;piIg7=sPPs6{NOT2Wb4K=eL|ZBHN6;~L!36i0UAzmN!v*38 zacZ|WlU z2$8xi`CdBuC!S)l&8+s44_Ma3NCZ)SA(h`fwQ82^G(qO)6cwvsp!lnx#U#Udf>a6# zc+|qAC71PTnRZ29-Uu1Cywat#$|>g75FqK6(7EWi-JDX}`vm?)gs9SL?mKJ6mg-!U zemay1d2K#uKfW8E=kQMJXD-Zq7pO}s2aAK32)Kj_@8m7-IPa2>B2gj<+FqHz)^C|L zPM?MylIukpq@*BP@XB3oxmuw;C=d?1m0#G2LPWV5x7=e-F}V5;XPwHy=VzW4egq3w z$BtOa5GyWV_&%WeO?fGacWtn}maTE~{QL})*eCO8-Cfa4X4Bc*V-%(n&VoCTbKLs4 zGp@w_iM5>-CapieX%HyMVMCyem5PIHiyu-;bgebXB1)mBC#|^1p|&us2;nd;M`0oX zTVW$Fg9sS=EZx_sSUTGyO;#>_tiQSbArdBrEpgAd>K_jRy~SFpEa!)>T(~;}D`~FZ z9#o}W`DJ_XlFDFrgqwPIC|j$4>yL?gMBMH_Yc=Qp8LFj_$>hmNXNIMTv39X$6JpJ; zBBx{omH)L-#4Z$S&(eO3kWX4_n_Jr0NU=ZMC|TS;sG3#Q>O0AYYAy&d2s zdG_`|xB0o}go`6?VdyX z2-vGlUyFH;X>z@z6I#X>?XRR|!=Ne7&76m7Z);y>NhUIS%ynQ->(GHJ;}u3s?~;Rl zy)v3Hr`2~ZUdWifQ6*{Gtto#>#WcYzjVVABX9CTReS7gxs}_E_g|fq8C^J~TpAT+2 z+rOft=!3@~l_HOaah0iD84|@gU6X1*Jxv&v5TscoUK|`)$p#f#QcxkN(|&q}`cWta z$gne8P&|BV80?xJ$kHh`PwTDpE)c;&yJhFuDYfeK%ixF=}^rTBx~qgwYT=?qc< z>NP)7VuHJNY9Hwu{dY*$>qvM0%|^r+z?dyQ#+m9og}<{u>MU{t9cnRd+WQ}76x3VU z<%xZ*Kh#_U@ttW~Am<`x&{t0E2#5L4Zx-FlXHI;7TyOe+N7&9Dt6nDwu@I}L z7-`@9t9=K3JDDKkabAFI;6w1B-h(+q7dWAuvlaUr^V*0U073cK6_9ieAS zX%iHupfZ>Rpd&w~JL4@^Io@c$+5^!Lno1V6miK+Dr%ZITUy78AnKMXc+qGQGnO~3yK$B;CDg?TJKLk&hD-6~ec@$qP7{0o&GqMy{jr3Q zn6u_;ulJRAc*me(xeh^Uy=ukC6jHeSWmQdP$n``dM)qq`AuEKuD`bst1*@16|DSo1 z^x`(6)~s{GKmVXH_H70yWS{%xvhf(>n+N9S$gMg~y*Z|^9d~|fac3M}*7J_yqnP!P z_=(N%uO|?eD?^*qH4@ehW?NlT!Xf8+>6VLG)M4&24WSXFRHiPKGbYHvD%yK0RoH)sccK;;?VhGG)Cz z382-U7WrLwp>}+Xs?)Yk^Y;-RGZ45oKD&LQ6Hp6o^#qS_CZX!I-qXc(bG|~QI68qE zTU*%^<{+AWRg~CJl_}Jzt|he$TGsax;HD)^0f)evulMDb9pgdsl<0a&q}L+ngER%) zG^Gj@c13+}U-ypmUk%!y>0Wwl4uE8`EsH@U4usbU-TCP%nz_M^V)u*ky9%}|gvG?{ zi^OucUdx5^Ybv?2EujbE6*qLr9(-e`*DDovQage-0*ZRvh`XEhJcEH#cXT&rGu}9q z%COTf8}o+5=vi2NcCATsp{kUzySVy;Y`3;t#OYVjFRtmTFAJ-lOPt@+?!c^XPWiG7 zUhfPn^&nJ=L2X8!G^;z4-6L#7!&T<&J|qwpwY6TYtt)XM)vBC)$Ws8~g!hA$=qOWO zs)>fsV~V8eAZLI%?(i~E{!x4f!NWi}rkehf6sFeDk#wmy>OX!1s>4)n#_#6{+k?xi z%;LTG3n`ZF$=x%bYLE6lWw6%4+$^i~2V#Ie(?&$~R;ryRFyVpzD)S&^`>zH|py5j! z0)MzW9j;jfw!$KDcBPEdk zs(0W2O*Q)iT-ecmDouO#uSVll=Fzl0Wx5fL{Ql5?wiD9b8;B@!s=qTp|J%w8wCeS0 zq`Y+eIvQH~p4-6Q7Y{pPaKxX0y#wFm7<5LV?&GO9fKBRsoX@2ijnep1CbY8`YB;wV z_id}~X8;WO=)e!`7eVZ7Ny9GoLtdWE!|zQjcGFn8Wq-E7Lp5yW6MSCY-Rk>P%SZ|2 zKP#O+8O~FS`IjooWLxmAsU+&TAsNxLUL*v018j*N9LYbJjaznY(5tLBDrtSw_gcc_ z_{LE88SbrXSWdaG(+FyNov%4aO^thXC@7SzOjwO8OHb~o^9p^6Ld?s1hc1$Bf$><@ zCUVE>YY3f^n2N+aZ9w;+E-g7pE^xL3cktfMqZ4q{SlF!FR;=_pJJVL?i2%uB%?^aQ z!+=zSLGRs5UtLp&!^(oxhUP!4qYDuO?eih6)~d8tufB+Jp&V8YTiN3TYA z38CQAnarn=CcS5TPnE;x8+Jn3S>R9h4J+E(&~(Nr1Ho5o&633?6q1L;Di2$1{h#oa zK}jbsM`DnQn3(C#muD||Z(CtP6viUjI%n7dn-q!hPX=)n60#?a$sC^w;-;g?Fb1D}=fqYuq|l_}(?u!D$hKy5c^7{d|44vBHzd4_p9jc70fBnnut z({DiUW(r%34-{Ug@v`WC&>fb4k)nEXI)eq`F0pWF!p-tO*qHuY4nckw1g%G%ad$tC zq=#E}E7yur+FDql!kM5;oaeX|e{eZ|h0yp*c_?AkS%0G2EZh_`z|nMb660iymi&x=O{1PygIM z$b&Fc%4h$rHb!YjVlT!DCKyLD zH1jgbyTbEewvZNm9ueJy$T52%(o4mXQ^Y2X9R4S(Xb5PWqBJNyop#s&^pUZtSy&28 zYbX>)$EA;i=+M}GAjG7a-W5E|l^v^vVu8{wE~<5xd`UOZSrzBsPkQ-<0Fq@ssj;he ztY7zYZCv)5$_5X}b7U&ZU319Z3d4P~I{34&bNFj`^7+V2q=H}RLy<|mES+Gvz&vqr zLQTncqp3mJlva4vd{tb1=WdHGM{fs#)=H3O{ycgtKzZ71O14;R=9A%_tX^+O)CX+%FP`?rbwVX$-46{&pYkSbNFsrLn$-B6=ME}gq*_*zZE~LX;HdlVk*^s zrNnVjHrQMPAi)I$%}{OI3sCsG2U^ihB6)cntHn>{EyHf9O@L{f@sguQO#7PuO>{22 zMXv>sxZMgvj8?-kP@(fb`B9d;&W}m@>g{S}?vfzqF<(tpUz=5{ud0;(eE;0Uy`#NU zCUVL!pKDOh7o@OtC=#d7lg^RnN1Zi#i(-W|_t{p(zBlC0=l)2+6Cj8?;V=D)(Q>?G z7^hL#XTxE~Gu$uatOyeJKxN#{0bS?Gm;A($$mDi+wkv$W=a;V>Nb^k(6a`7I0!^jf zRJ&o|R&=ERuX>?6ImHCz$0k2XPL*-SEPlM2`B}2YFNAtAv{qL@U0ANFA4E(kiuzZS zxL*twa+%F#2i$3af_PL04Zsv!OoVz`xRf}b7S<6*bHu54_ z8A*RBdjh4sO2D@C_!e(^?Rj!a&zyo!Mgxd21?YOY<`o`d`qyOU-it?~!$`u9(!F^a6c36?lA@EttOtir+RbUet3b$A<82zclx+N_nsoP_&?T9`Cu=9w^K_5TkT4W6HyAXzM!h#ZR-igv_z7FTKba zp5OCo#dV@{{4S|Z_;(gN%7=+f5kqw=qO>us;zZk_?cr~btHv-}p~d6-_|H38>w{LY zvIU%Su8z2m750x*YrKp%4<%Lsl6I0z&Eor7B9z&j-Iil)Kqo z0+?--?M21R9<}1&lx_FXaQW{RaZMVOB5hQOYI2>7p+bp;7JjoT5Mb!&Ql;$j)Z+N>9pM zU~&_W#y#}I3(V;z%k5;AEg|xkW|?9>-{XW*u2_nOuTsO_XGg1;A#fTj#Pg`E3(yA6 z-^&LhycKn_s;d=2i*V$#jdL#Nm72_(0*}@D3eU)aDK(S5w|z|o zJ$`bZvMcL;_+zs2(<85`-qL+OEQJAPI2}>2p7>yu-~^fk&gAE%%D#CufUv%Sf7a||Q#Pz`4ox(-KdL{a^&R-C@@1k~$nq6XG*a-}_`e@kE~tJFso*XjQy8x?Vbf zsZe!6Mi>uA0wMWG74Io@{pkQEuhR=Mtg(1FIPWcNL#H2UPCSws&Eo-mcoDxg;Lg3%8Y`=w=OeDo zGm9yd*WvVUa?05?JW})7jCh_um^RF+6T=&82WoG}P`HHx{sbqpNrGXWg{LuSZ})zbX?VL)Bxs{K93v~sSp81WcDuB?$P#w0V5*4jWRs> zd?0XY?Q}Z@HLza*<$!wYOFf6~sb-zQbAieWOOz*o&go*se|%-5vOncb6gB|&DP623wi!29SYq7B|L{xaX21+gHPYWLdkiG?Mx=~e8leD z-fqXtc778=VPk#$Ow=eSjqMKY?fP#mEG;Sde6`Q=9I6B*ERq^!rh%ANDKSc;)#?V^ zc?8OSnU8h_w--%1veXAD*=L&Z(LMghy?fIBIH%L4Z;^J``pRc&<&jPBp`!qSyQ*rH z0#@0pV29mffCU=V&CRL@Y#K!FlR`Uc6v;yK9@(JsQt$GV+_Pfd$aUQwn!gq))1tDs6iYjNSeL=Yo*ZYn_V{XjZ}bDK0|o3aQug z#NXzCSl7nGUo$;PKF)SLw8#%^BA^7%BS*;$Kivyp%(cQ)ysR|rWYx&Fq@CSLjmJ#v z|ExIY_}#aMTSa0XHT*6GM|K4POBUWQ-ahtDXuefvaRBOT(kKq*+C9feW)Nn5$~6Tn zEde0X8<4=BfEvvjvc|n%FdlzI4Qz~8w82Bp?OYgZ2ZijMz;Jsws49Df0@@9bOhGW6 zZsj!X0_D*>rZ5Kbgta^+lfv zw&EiOwIh(H)vi#{Mz0qTEzwW@wZc#`Q*+O@_^eY##$i`fxe<<5+-oEBmEU_#WhNAq z{Hexp;Y8U_Xt{G=-w3A<+MwcMHY6W=U-K;x^G>*6YhcftGy4rJQLX4)NG7#J7{f)t zF11Os>KY9%sGse9MOKK+DR!?YRuaA!N1EWM?5%MPYM&=Upc8yiyVm4^*OxhVGLHjdfWjQ4;F>^?9w>j*QDVA(_HN3 zdGSj@C)E!*%#4JrI7~~o*iz^g^WtZLj0=UcYQ5gE(Qj-EU|N1$s{KuN*g>S}svx8#e3!hF*s>kDlGJpCXnAf0@FeyaS2W8a(i#fTj zNQLZ^F=1A1BjK_FbNZt{!37+8P%`On?W=aghF1QaRRJ2lx@w)9mzV1r-u#OcNVM@} zf|wj;V00PA8iz9AD0F62Q*`es+K Im+iy<2Xu4=D*ylh literal 10139 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 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 97820b4c656..a4ee4e375a5 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -98,15 +98,15 @@ def test_text_nonexistent_filename(): @pytest.mark.mpl_image_compare -def test_text_position_four_corners(region): +def test_text_position(region): """ - Print text at four corners (top left/right, bottom left/right) of map. + Print text at center middle and four corners (top left/right, bottom + left/right) of map. """ fig = Figure() + fig.text(region=region, projection="x1c", frame="a", position="CM", text="CM") for position in ("TL", "TR", "BL", "BR"): - fig.text( - region=region, projection="x1c", frame="a", position=position, text=position - ) + fig.text(frame="a", position=position, text=position) return fig @@ -124,19 +124,14 @@ def test_text_xy_with_position_fails(region, projection): @pytest.mark.mpl_image_compare def test_text_position_offset_with_line(region): """ - Print text at four corners (top left/right, bottom left/right) of map, - offset by 0.5 cm, with a line drawn from the original to the shifted point. + Print text at centre middle and four corners (top left/right, bottom + left/right) of map, offset by 0.5 cm, with a line drawn from the original + to the shifted point. """ fig = Figure() + fig.text(region=region, projection="x1c", frame="a", position="CM", text="CM") for position in ("TL", "TR", "BL", "BR"): - fig.text( - region=region, - projection="x1c", - frame="a", - position=position, - text=position, - offset="j0.5c+v", - ) + fig.text(position=position, text=position, offset="j0.5c+v") return fig From 1f1d323a9e6ac3fb5606e6cdbc07ad01d5f00e10 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 23:37:17 +1200 Subject: [PATCH 11/16] Remove check for missing file in textfiles Because it doesn't check for remote @... files. GMT will raise an appropriate GMTClibError if the file isn't found. --- pygmt/base_plotting.py | 5 ----- pygmt/tests/test_text.py | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index dc969b4a87a..3b708d3b2e4 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -4,7 +4,6 @@ """ import contextlib import csv -import os import numpy as np import pandas as pd @@ -941,10 +940,6 @@ def text( if kind == "vectors" and text is None: raise GMTInvalidInput("Must provide text with x/y pairs or position") - if kind == "file": - for textfile in textfiles.split(" "): # ensure that textfile(s) exist - if not os.path.exists(textfile): - raise GMTInvalidInput(f"Cannot find the file: {textfile}") # Build the `-F` argument in gmt text. if ( diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index a4ee4e375a5..3842cbfa3a9 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -7,7 +7,7 @@ import pytest from .. import Figure -from ..exceptions import GMTInvalidInput +from ..exceptions import GMTCLibError, GMTInvalidInput from ..helpers import GMTTempFile TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), "data") @@ -93,7 +93,7 @@ def test_text_nonexistent_filename(): Run text by passing in a list of filenames with one that does not exist """ fig = Figure() - with pytest.raises(GMTInvalidInput): + with pytest.raises(GMTCLibError): fig.text(region=[10, 70, -5, 10], textfiles=[POINTS_DATA, "notexist.txt"]) From 8b8a1ba5bd7450fa1fcfcd5dbec78b844707a808 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sat, 20 Jun 2020 23:41:28 +1200 Subject: [PATCH 12/16] Fix some pylint errors about unused arguments --- pygmt/tests/test_text.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 3842cbfa3a9..8bacf18fbac 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -110,7 +110,7 @@ def test_text_position(region): return fig -def test_text_xy_with_position_fails(region, projection): +def test_text_xy_with_position_fails(region): """ Run text by providing both x/y pairs and position arguments. """ @@ -266,7 +266,7 @@ def test_text_justify_parsed_from_textfile(): @pytest.mark.mpl_image_compare -def test_text_angle_font_justify_from_textfile(region, projection): +def test_text_angle_font_justify_from_textfile(): """ Print text with x, y, angle, font, justify, and text arguments parsed from the textfile. From d48bfb5e0b1d544be5db2432572859a8203bd8f1 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sun, 21 Jun 2020 01:49:40 +1200 Subject: [PATCH 13/16] Refactor text to use -F+t argument when position is set Fixes issue with having a blankspace offset in front of TL and BL before. The text can be directly given to the -F+t argument, and we skip using the temporary file. Also made sure that spaces in textstring will work properly. --- pygmt/base_plotting.py | 33 ++++++++++-------- pygmt/tests/baseline/test_text_position.png | Bin 8191 -> 8182 bytes .../test_text_position_offset_with_line.png | Bin 10195 -> 10198 bytes pygmt/tests/test_text.py | 4 +-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 3b708d3b2e4..fc9b8c9d3b0 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -950,33 +950,36 @@ def text( ): if "F" not in kwargs.keys(): kwargs.update({"F": ""}) - if position is not None and isinstance(position, str): - kwargs["F"] += f"+c{position}" if angle is not None and isinstance(angle, (int, float, str)): kwargs["F"] += f"+a{str(angle)}" if font is not None and isinstance(font, str): kwargs["F"] += f"+f{font}" if justify is not None and isinstance(justify, str): kwargs["F"] += f"+j{justify}" + if position is not None and isinstance(position, str): + kwargs["F"] += f'+c{position}+t"{text}"' with GMTTempFile(suffix=".txt") as tmpfile: with Session() as lib: if kind == "file": fname = textfiles elif kind == "vectors": - pd.DataFrame.from_dict( - { - "x": np.atleast_1d(x), - "y": np.atleast_1d(y), - "text": np.atleast_1d(text), - } - ).to_csv( - tmpfile.name, - sep="\t", - header=False, - index=False, - quoting=csv.QUOTE_NONE, - ) + if position is not None: + fname = "" + else: + pd.DataFrame.from_dict( + { + "x": np.atleast_1d(x), + "y": np.atleast_1d(y), + "text": np.atleast_1d(text), + } + ).to_csv( + tmpfile.name, + sep="\t", + header=False, + index=False, + quoting=csv.QUOTE_NONE, + ) fname = tmpfile.name arg_str = " ".join([fname, build_arg_string(kwargs)]) diff --git a/pygmt/tests/baseline/test_text_position.png b/pygmt/tests/baseline/test_text_position.png index 6875f65ac6a79a947d7e71765d481a5d210c8d95..6526f6d6077ac92715a80badf25337dd78b63ab5 100644 GIT binary patch literal 8182 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

wPD*!;Rf)FERLW;aWDEa0I@3XPyt} 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 D0<0h& diff --git a/pygmt/tests/baseline/test_text_position_offset_with_line.png b/pygmt/tests/baseline/test_text_position_offset_with_line.png index df62e7cab50f880a312202cf1f08d798750f0280..1d4696e7ee526da0b1d966d08a70ec126b473acd 100644 GIT binary patch delta 8873 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 delta 8820 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 AP5=M^ diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 8bacf18fbac..07e1318a824 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -104,7 +104,7 @@ def test_text_position(region): left/right) of map. """ fig = Figure() - fig.text(region=region, projection="x1c", frame="a", position="CM", text="CM") + fig.text(region=region, projection="x1c", frame="a", position="CM", text="C M") for position in ("TL", "TR", "BL", "BR"): fig.text(frame="a", position=position, text=position) return fig @@ -129,7 +129,7 @@ def test_text_position_offset_with_line(region): to the shifted point. """ fig = Figure() - fig.text(region=region, projection="x1c", frame="a", position="CM", text="CM") + fig.text(region=region, projection="x1c", frame="a", position="CM", text="C M") for position in ("TL", "TR", "BL", "BR"): fig.text(position=position, text=position, offset="j0.5c+v") return fig From 3d942d138adef490ff61009a895a18780e927eb6 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sun, 21 Jun 2020 13:24:42 +1200 Subject: [PATCH 14/16] Have test_text_position plot at all 9 possible positions Co-Authored-By: Dongdong Tian --- pygmt/tests/baseline/test_text_position.png | Bin 8182 -> 10545 bytes .../test_text_position_offset_with_line.png | Bin 10198 -> 11540 bytes pygmt/tests/test_text.py | 16 ++++++++-------- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pygmt/tests/baseline/test_text_position.png b/pygmt/tests/baseline/test_text_position.png index 6526f6d6077ac92715a80badf25337dd78b63ab5..165c6c3a1572b73f900be46d32b5a3edbca34ce9 100644 GIT binary patch literal 10545 zcmcI~c{o(z`}eVxokaE}sYrG)c9CpZQph$#2r>43Y)zI*mZGtX7D9}~*auBz8CzK< zJ2A?>8)Gc*(f7UH_q~39zhBqo%$(<(^UQPZ=YH&7Dhfs003AF4Q^Nf z0F49yP<^GR23x93HVwcJ244f4005A_aPm(T`d%v-Y!nRCyBB!J=RshIlfNsVZ+=Te z-`yu5Fu>X0!#7YwMOt1Sc34^g03v|ljq7(qb5|xbvfmnIpECbY{Cv0lV}9J6&?qhH z8WYv-i_a-oSBzHv_X48~##D~;PlOi)mL8xiXd7Zf$)fa&c%lUr!2YdvkVV{X3fjw>cHG5B9VXn5fbJ%5s#x6bi4L=)M47vEgP$p$)v9R8rX74L#h7z%1W z{Pvr>K1@8+B)3`IV4Z8_??v5tgvJBjciBbt2g9Vu0mZH8JXq9qfBf{2V$T5&)?RwR zXCBSl{^KI8o^OE#Z4mmj*Hzck#md$WbIu4u$E=?b)~WSF*%dyH^6yr6Vz6s}v?dq( zaI)R_Q?rmo@|=h`!?@OEx`d6*zVnheS#{M+){+jW9i5;WM2Zes_+6y>I!6l1Im7yl zTMcvmyeA3?UWH!`HyOnQ{iJ?!;oe%8?fUCQHS&V*tb<4!j5kU$wm+qN^}dK>cd+#KFg#q?E#OKne$NT)j54)FCJeB4}|Gl<1g zoF2|3@9gilWaK}sA(5oFmxOGs z=|pqPoVK@>x*@n}1uadfDcz?oGSeAOJo{L-(k3Lg&8H8vGTOV;rHg$Giq_z{+-Qeq zYV-6&c~OPYx~SGo{xFvLQ5+?Eeh`gnl+H+;*0Xx9v?)K>tn^7o1O3Npaj~J-CTW~D z(Wp+gz`crqi{aLyId488r-k+e*==2{&JG^)icEN75iuS-Hge6u9AQ8iD!PCzCYg0Su*7IvjnV; z22FnVPzL^D5PugtCo}e7Tqsf_w)rwTu-F*yV2NrVbm&Pzx4))aSME!52bo{A4{N_m;4Aiwdc!Cf2*V|0h^J?TYQaFq4{KJ zicPbL*AbHV+c0tp4;52>P4zhk&GgI>%bj(H6n={kw6%OK+1Y`xwP260`9dcHOdIWn z-x|Y2PMv;LZnqR#KS>Qx&yQ+(J%hm}8{Er%Hw*U|Q`xqfclqNB*C<30XICS6!1wVo z9l)Lr;;dX=|2SN!ywVFzN7}bE>I0n8L-^%?zehNFapK#(5=+cJ* z?MpH_MJ1)BOR6-Bfc7OuCaH`#>{{{sMX*7cackth9<7f+Xt?Z3vA@1MBl$ zEK<>KXriW~$yrXH;wjpkK5rf_Ak;%I0oBqjkU^=u+GEnf5WKhka)?N()Bsv7eiRa| zCnTRdBDLR0aH2=frAf#qurmUjh1>m`k_bAIOOy())UPy}J9AjXX&^@VcDVZ|%oRXe zeX4Yd=8d%j0ZztGqo4Cr18#^%{hQ^br5+N$%Jx{Yt&f$Wo&c@<;g9-XPGr8_=LO7T zBMXU$8s!?gF}zFpJzzSnS=*fqwX__=FqD~;G5K#twluLgHRNb_(8Sd4P#0c|$e-PX z%LsE}`y!?>9@%Os^qEmGLXc*P%l;p&V;jq%=%cOI

3HVTm!?6w1Lt?h&p)>pl1- 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 literal 8182 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

wPD*!;Rf)FERLW;aWDEa0I@3XPyt} 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 literal 10198 zcmcI~XH=70x9&?5>B3e~nn)GtAiX092*?&idO+#YI}(~8ARq`LK`9~%xCKlg^b&zh z?+8MGPy&%63BC8T@H^w&asJ#f?vI->GLp=--c@Gidgh$ZTycNj(_x@xqlF-dK~Go9 z7=kE-Ac(BxJUNh{4L5Yb2aT7mxi18X@t(cOg7Vb@fRNKq+syBQr=wrsV;=`d=WhdU z9cNEpKVLf^7cW0<1u-cpo8v+x1aU)pS{e_7vX&<$KV<5TQ``Q^iRx@930y4=jiq^R zx2zEX4_c8Vcy07Pau1oW+J}dQro)*hN6O?*gcjyvS&qw;MHw( z{MsGY=E2%CSm|EEgiBP2#lfsiOh}dLi=S31?wOcaV5LfU^L~|6wKvJ-@zprLqffFB$tf>Wmav6KCaT=dOEC}B9(j0wX}OqD*W+! z!cP%en2M9Q6br|vWei_O5XzxVqfn%qXk<9_) z@0&%gg4PW4ttAtaxjZVbSGLA+)rrr)*rRIZSuw#HzxAtly{X{%o;vkN)87Gn8qN1; zKG$_bk}A^iBKchRteUuPXnV6Y)6rBRQmMvV5qPaRB13ZIOjC`BKI8CTLddzX1^ zorpd!Mz^JwF2>drn|a%KOZJV>7?E4^iublrN75wisDZ@Hr}qT(usRY>u=q^O}ROn@>n8SpQT_Nf7o?cy5ItoX}%A!$DO~4j(L{CNx($d zP&PZ$etxId<8^u~lu6+YCgR$7rF(|JKO3|#zScaJtOyd-#a0xBvj?U4n@?3KzR4K; zq+tP4bB#wOm|cO|Zh0nj+ipp)+ZszWS>q7`G6sK?dC%Yd`xE-s{?AW9rq4jSdlFftYdA1GnqIdhP0pd0Lx4qA&zlEn$%V;Q`molR`JLaU4`K-f zhFgkDj{Ru6w&iPCt4!+6eo`OTJ?C>+Wt~m=+c!(NdMWt8Az((^IPz1vrii)-8f(?` z?p^zXo78kl{mj-S?Q8_93kmBmI(jFw<=T}g?z#1U*cKGtpo4RM22!jk5-^DO^@eWM zjX@iE1upjDpV*Tk%zI}dMXs!B&;G<9z7m7qVQP_eR$|RFR)m^=sl*}togIsU!omWV z$gUC0vwAB}GKkD>nUzSu4q3AHUb?4v(S~gBaXmKp?9@oF*o)BXor6}AF%XpWxt|%r z%cEJLMsIs@D1y)dgP``5vld=B8N{KpLk`I&k*FXqjxoCbr;gZjg@v_NV(H!d0k>`W z4 zE8Xj!Y(tQE*RAp+sVUca*$F@EDico6AHif1a_OGV`-1Sqs$7xok3qOo0kcq_$$y~6 zuMV6RC%=6;Je#X;VNV4{@xA(wusM@E5M*Z_i@4^G;y$Ok@)ywJ`8VPP9TzokK*`Y) zx4U1HE={EF`$<@o@Us_m`0p}8kSEXXz!MJ>pwSSauz;6SKmAn}(wd64*vTQdl7{oX z@kMR5OQha)2DV41j$tpMMs`IFXFX*9{bPElxtlbQ5&F@ z!kbSjTzoW>3S8Q%u5ShYb^aN&R(bD&#lH&*eKxy$_h*RoN*>+lkhPZ)C%ZuN**a3k zM4Qu_@w2N9r(7p{`}7=Me`v3P z?e0(2tP`W=Zui48+>U=0w&Ti7w!7^QAg>6+zHw=Oc8mEi+C%Leyvj9G z@^<$i3|Xot9pvVbTDJ2bE*4>Kw=5X@W?2%Cami>;Yy2K0?`B|Pf|9e_eu2zXW8{Pe zcX6H#$0vuYrIwPSQ3D(D)04vITRE4wZV6-~phhKK-{MfQ+&Pa)VpGVa9}9sux~0}5 zhr&-bbHcvUKpj}H`|shWswc+{r^l-V_DywIu7e_cvIslupZ)J-w7<3I)N=JVwUa%9 zix3NB{K#Z@cXe7#Rkdwh`0IgYK(51+q_}n2|JdW5UNaV#HkISVOa9hh5a-Ek3smXf zI=tU|F$3(;25pL~Oz(E6XZY==ez~xar2)(?8k8S$xm&LM=nW?Fy@W^S`lvwm^F1o{ z0`z&9c3~!Lt6W?auaW6miCsd?Ud)}-mt^~PxzyFIuQ1Bt z&9WBtC(;+| z3mNtQ)QLgtjk)^h$DnF=ZG>9VLC<8MA=-ILR1s<0trKsud*T{2m=jbmus&Xi!A`*K z#x|BKrNOL==#{6hh}#1j{3(<}YR^OZ3=={x8s?1=U)n%gZ#~!U{vw?|ajtPQ`Hs8W zppweOCyp?12zWK~t}gTaH5Xjv@iF86$QsnqH;9)BGxPVx`xV4lvRb_9hCO@655F|a z3bk9@Uw?yYT8RpoCoM>PM!4F^e~P3=J&^@aMu>+n{=FtQTiCSf78DNBnu6u=Xd ze`n`z^d40s*Z^fGjE1=Z8coKh35*Ggf`>9M)W6|}^XnXuVfH9xuvG(= zdNeQG;r0g>PN8~}4k)|v5 zC@V0er|z2K^SZGjcidTAR!hItpnzZHEIugNp4SE)g(I;l@1qe!-Jx3!=BhBmGe7#u z=CHQCXvz~q>^ag69BxN_y7A_~9vXcV9wyQ))fL?Sg%FkLZIqPDPfu$kXWQ^Ptgjub zFKBNdySnEH7QAp-ILLaa5B46Mn#g}YxsQhEU;ZYSk}Nq^c|#QFtMBHMwOWBJ%m#z# z>8sr(cuJJOxo@O!X{!QaZDAq8<7jlxFs6v>OLr~O#^(3?D~D8GciVytyOhc&^u3tS zGx9FTq{OO6edhipQx`RNf93E!fjha?pSc3yefBqt{AesW&?s>hrvvEr z<1rHx2DR@WQRyFmeVa?S37coWK!_7e`#9RT>Yr}oD;|es`1WfKC?C%8tDc-c!N{CV#IJw7Ky-vAX=L_rl!}7Bypg7}m9(NZrVaAWO#(_? zJzExt{1lk<_IeSLSc}Xo&^tPS@a{A)>1^)u5YaGIijD0%TGwBw@Q0D{-CN68rOb73 z$g#s!>c?g>r}XJW*wet^`l98`d(*{KjRhe2N))mT^ zNmrUpvRrb=W)<;kCiN4-gEn)j@+)(2-J`v|y`!U7lkqOUV-bR5#3_&TpR)BH+YCkU zkbN@w*b~a&8mm6JhW>>Gr$|Ze^Z}o${!$dyP@tW-o$*r^Qtw)-RW;waYxoE7w=sE5 z|3UFecH5uK(CSB`;<~HgSTrI|wcXoCq~u;&=m zA=!5h)lo+7@&An6}xA%tLTLOK#AdpE=ov==D;bh z6g$Ud5oV8iJhOs#zq0bym)1ff@y9)S$dmuSQ9MdmuW9K+Sfs|!$$Udd{SAl+zF#ao z6LL*cu!s~lGe^|(;gk>wz?!_mP-qdXds~oG1_!m={y191Q(yJniTy-FQ8P0%^{60s z&UM{YL!?XeMbl?!sg}#r7gwo~rvHO3q9xI&k(u3>5g4n{hy2iYco)bTYb};e%{zV( z1L@if2u2v|^-49Snod4&9tzoxCj$HmU z)%M&lyC+rT5I*iw?p*h#HWX1&izF8Dma=Q!G%kjdsYhP!y}&#{jrE`04xY@t{|m&h z5$1>yWTYjhNyFlAU&;t;kcMsj=&q*#F)ib#6>SiaHiku(I0T!}o<+I3|F>{BBI+G1 zO><{f7wjEjc@Pp5ktY&N%eSfyW+7C6&^r6@vtH=b^t=bYaweuC1nDp}s8V+IB_!6h zC7q&p=V0Bbh&+w=`t7Cv9c(*!>;S;cadW|rKv4aS^#Lh4__E5S)nz*=q5!lOe|Bg{ z{Id{buB%p_CpFd0i-aOX>aSRQa6%OpQu0FFq2@0Tg1$v}#?JW;kU{!$EEWZ2rqiau zqv!IbW$2(hp}K(${hhlr9zAFgJ2^5)*ZMn9X(@{d?|QI%&9a`In|nz*n|FCP+EW)A`53dB`gZ_~|T5TxE8Mv9XCs;S)$*1V9~F z0M|#C3|s?_@OT;lR{F* z18=M*i(E1~<$=8bGtDwMHJ^hT&A-u!uD6df$rx@{3zjxy+Fq$S=!JV@iUj>Goj^gi zuU)&Alao_w$vn0+z|zp~9sO~ZwNx+luj>3YX0k>BfkTc5AH2BF2G1dI5V_bHA+Hi| z=T0d&mGujcAWCTP7Ne-SqxfSw5UIUcjk2dDpSfbRqQvkh#b>ncu&(Z&E>|?r2#a-?69yU^s=TG4UvlvliK&HcTbyeU|@LcI`lNkd(+nvQ?c2^+@2Tsv)`{U`SjbzM&Kd4dbtAaZANew?k zkH)v3KHWZSc!P^b9pfu+>4&vu2aUo@7~*yxG#u;DVquqtvMcAUQTTjFJrMEIJpQ~<0_l4a>!n@s_@tg_pBBzV4-XqiAFp;;CRkKW$i;$WQZ~=TfR`VeuUio z?M1o64JRYIOHIR)M`ewao87AZiEjQTy~s5hPogR=AHFTH!{u0le5}avJeyB$imv0Q zF!NIF!sfFPf2Aca%79NRRK;(9JXkjM`}30rPPR~0j=LYrTXJoT&djc;3D#~lzWh%! z^XO|5l^gf5%l_p*5AJ|W+w*al!#&Vbc#JNHZnKWlU!J@UkR^eVWq$@Z6SFpZw8Qho zIg=Wv?8WicloiO%3^Pb; zS4B^fvm7OOv|F+8CCiM_jW!-RJv363+EQK&_&IZ)17N@-+Tb}^df~eH5Aew(uv5DZ zSmRxG#{J+@x5^HThYpxt(q7y)pSuNQ(@5B*`hGH*FP;A*$8Za}8!Kj<;#&Bu zy&umz0&qGwd>!E4>*Zf1vm>Vhh^@O9jsFS}u0vV|CpK^9zA`HlJ7>lWjLa6Lm00hAk6q*6>%PoJuc=uNy9e8hl7! z2=DzYPlDHqmG>0FIlZo0T-3%@5`^*USbu+O;Rp@INH*j3vV-j{xP^(y00vl~q)z56 zHhyxgv_H4t5rSATP-rBo^l>~X##4fff`=Y>@p$;&=Sgu3uia&d4c+ZR2CdY}o z6?(B^QzHRNQeMMjulwY}-RRZm36#leESCeOF=m5KwE2~+Q(EZ;AwHVPt4D`Y;b!*+ z4E_65_$wUo9RB7Te2(2hta+sWJ&oP`NFS?TuWIONe)sCrjlU9be9-8?uk(f9pK#`@ z$bo=mZ&yJKQ>S#L}2Tp@`~7v50asmR2wAG8we;`?mfLaI4(BG!Eh_agh3D z7>#I3SvuEkh?@=|CGVVwuF-y)g^^AYo+}`K$wB5eQd0;^He=s{m zc&z9~m@0W_D_xoqkOLt9@VhEQRR=IF08!`D0KZ*g;;i@2iUa8)U}sD<^)=6Y`WCt$ z7A#5@A+nXr@3TX@^5)&MvfL>>2yY9PaI^$#LZCim&_TAQsbD8NYyoV2Le4UV(nsEt z^;Qt1e+Gw6sE=OTe#pw10yaR1aX6+9u&BYQqKmk%tHR7;c_FWNKxIi|fX$xy+C`X^T4U9h+HZ}tx&iNRNx z>du%wraR?A!DP^V;M+pO1H>7?ML{fYQ9Pnd=GRD8ug{_GW zdbyZ3-~+hHIvKb8O83lyt5{thKFe%2uGeWtL{D6>C$bqYahm2DB{R?^|B=HRPI!JJQXc$WQG z`Tc5CdkqC?=^X_&%S2vx<1MN6E;wpTVunL4PnjAYfbIvs`=V?Vb&We<^*5?x>UR0= zNBD6B;FqrL2lmuE6+uja6CviN(OWn9UmSD=@iM!hGM3Kx*EynW(6Qt)=`i}=w-f9O0 zplf`%$i@=V#w))S-jpv`^rAElIC?Hz9c3KLt9?HtaS}4#+S0xCfvZGBzx^Wjr=N^g z8Xdw0P0dDV*4+Fdv2+J>Y(+flg&&gC$oJhwvIQ<|?RvpzR@BmKsU#uwJ0qOcBPz_g zRnT)C0_H5aUfOtY`kC`(DUx`g!WVEGn)ksgzJI0J?KkNP=5vkM>(NZC|Vm zNRLn4<(qPfiM95De)tJvRj=(L30XTekg-UBG!1vFmk>w-5Tt006_h=d_*uEUw&S)= z_i`?R0{iJIPmI&xN&PbnY@s1b!G}Q@Hb6aqQQnK{i|$a72S4Dyc;TYK_=kU2-~x;`iiIKkbC8Uu zcNQq$i`I~<;h_cx?+*uCu_Z**i2wQAkQOf8$iry$zDuQCIRkt0{A1Z>EA71 zKz){@`W|ol02=)_~Np z$TBZO(f8xDb_`Sg>G7P;`uSy0uL!KM8o>n2R}gAV_Ub5hIlS-|-$e9Nh_^ss{CHB> z<32JRKbO^dv5|$3oor0uq;c-3BG&+HmuH5>`HW?4LH)dC$QwlV45)A1{^@pLK+J%T z_2G>@)|{0v>9K?LCxqB1Vo#UtaOV~bGs>&*-YZ3NmDBz6#p~Nl0Yz$ZUX0Wn)d7k_ zlOtRl@k4LNg?u(rt!gi279VS{bHyU|2pDq1A%n~1g*h?L<;K=Bt557WR&J*r4plOm zQLQ~H440V}fBz@S{{RnB2aQj$6OsDf6@QOzH&(%|WzGoEfCt1bA4dN_oh>U^IiWp>Ol}r0{V; zGqw*!?NPB)X1q?`k=@r$?ZYIhhBp0s*ezqesg9D)b97GbOLgt^c)!LPxjgkc@dN30 zHzs2gqv%u;&GgixiG9ja%6X1(u++1w-1Cc?vs9&)jqIL4@Pb`rXcFPk+$D>61-eOG zOuK7#%~gWhQ*#8N%00ue{#O)(YFkj?tI?ZHbojTkZKzvi*y_huqY*r2ejA$@^Q|BK zsQW65A)#wFLa)@b+|1r0KxItuvSb*4<{9Vq`0tNo1bdcek4oUCSr!c4of|B zPyEr*U0Jww8H4Cd{f>!=;pMKjRrK;eL#6vdan;_w_q&Z>ZTR4bK-fS?E1be&@rHUrI34=W6_LfY${85?pn%#53g6b0Ob3Rv3H%eYVY^B39Y*U{$ zJ7QK%S&s(4E?mMX>t_c>;7P|7I^OQs*ps z0O_3Cwi?$aHokhP8H~ZPTD&g&WxyvJWYJOne+m!3=xkWMhlP7ibt#S=5e_whbY!;0 zY7D&!`S(7grz(a!uv+~4aR7J(x!SQ1eI8_RMd!RqXd0eM-A|fe+BGITG{AB$T45DE zgwV3uewykIKVku^(dvn_5pqHSyb(Y1Pr++5NxU#?Y{JN~dW*@m&MV^3V9NF=>ecOT zuOIMLsf&+2hkig1^@Fp!0QHjsopQ5Q0K!Rba$OJAgi0Rg-oA|m?PfK4e!4T zbv9?49T9Dqv2?Fq!WxE+G)V!Yv44y{NVAB7zdl>ID*$?bZXsZ4G`qDXU6oy1 z^WG2Dh_QGNa%$~xNK-hsw+~yz5KjW(c)|YWrqlP!)-Ok|r`7Ars$N{Ld1CE4G zHvr9E%u+W4U1$QertJR?fd5L`4K^zJvN+&G+sJ;fTs0kbdb~UOts{+Oa#8!f$#9Rk zB6-&rs6O}fu;J8K>GUZYtFNl68vkkU5S06N8%`&~jsRaeA!4?O14XZfaPdC>I?2_7 z)t7)s^|~-MViSJ6y^s@ru0eUo*Ewmo;zm4Rg|@S`t+oXYt}YyOKJ--64DdKCp)=nY z4%7nRJ)YRVOqt8i;Tj%kDMuC&nC#;0odakc@5)Zt`+FjEP<`g&pUTmU$3Y#6L>?&zl$w0~3KQ%$gRHnG0w=>3Yh(6p(PT|p(2?aC;5c8-5rg1JL zIBLZ!RD37%&Y$l8sj%8Nau-lVM%xrmYX6Y}Y~23BO(SdQo6S;OAky90+U6-A-ib90 zEwMbblcRiuX7VNfn$0$9au#Bg?zrO^r;$jacdRpDifkwHHZFP(L+Sx&;7X!SuLKwb zoH=JMdST&ipQ7BAKPwj`3~W?u?KBS6t{iPl&KCiql+DNK+C1f;vPMaf!EJr{22+4~ zL&_LBKzQ|Dd&Kr_XnKYew6%1WJ|fKIi5AQ_?Hl ziM8L4ov8&h(AX!SPVhazv_fkk{)Q~av z;!}D}cCFHK4yEt$qeTvDQnBVzpjD=9ak!|kOOFnJ1>An|W~VUfg!%T02X99XrhDkj z((W|A4}4CE8eG9iO5cP;%Ejg_y7N6iV>Mn#%r505bJkrdd2jo# z_9U~tRt~R(`;YpYUL`XZ?ihLUiUT$Fsn^GSO#X;eSB%u-rxf1+3;xueTs2s^9K;gx zMUI8}p*_PUk5U_)tl@mjkBfICQ{T;;xEyf#@WIK{%0U)k_&2EB>c;Ew%ae`K-H5lL z9+)@}_WK;1RD3P>>jXM+T|l-Gw%qS5fIdweMVB{)a13`>DNnkT^kzk2abTjb0=l9hRbz znj&&LHVZO0ou5OCWEKGD%E$}vWyyN)h^VvnOv(6IR4N|$+lf;CjcPlF(z~~8?WM<& zo7g-X9?qnS#rL4T!p&+T~DDbfrs$eVf%Z*O&z z{!PfE)E196i!cLssv;#NUw?VXcsbw$Z>{ZXnKnA^%LL5jD}5#7{*xGuF2a48K3_hE zZPl-<=kWe*a8c=JnWJ9M*MI354t2n^<*ke>EEEu^Mx Date: Sun, 21 Jun 2020 13:38:26 +1200 Subject: [PATCH 15/16] Check that plotting text from an external file (@Table_5_11.txt) works --- .../test_text_input_external_filename.png | Bin 0 -> 48868 bytes pygmt/tests/test_text.py | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 pygmt/tests/baseline/test_text_input_external_filename.png diff --git a/pygmt/tests/baseline/test_text_input_external_filename.png b/pygmt/tests/baseline/test_text_input_external_filename.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c680568ca93cb606b1c5b0773f9466537b7a82 GIT binary patch literal 48868 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 biBc(hs-~OaZ2hkw|6W(szLtOW?vwul0cXNO literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 6786106f120..93697397ec7 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -78,6 +78,16 @@ def test_text_input_single_filename(): return fig +@pytest.mark.mpl_image_compare +def test_text_input_external_filename(): + """ + Run text by passing in an external filename to textfiles + """ + fig = Figure() + fig.text(region=[0, 6.5, 0, 6.5], textfiles="@Table_5_11.txt") + return fig + + @pytest.mark.mpl_image_compare def test_text_input_multiple_filenames(): """ From f92beb241c10102f5e74f53ac9006acda70e4d73 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sun, 21 Jun 2020 14:10:07 +1200 Subject: [PATCH 16/16] Change test name from external to remote Co-Authored-By: Dongdong Tian --- ...name.png => test_text_input_remote_filename.png} | Bin pygmt/tests/test_text.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename pygmt/tests/baseline/{test_text_input_external_filename.png => test_text_input_remote_filename.png} (100%) diff --git a/pygmt/tests/baseline/test_text_input_external_filename.png b/pygmt/tests/baseline/test_text_input_remote_filename.png similarity index 100% rename from pygmt/tests/baseline/test_text_input_external_filename.png rename to pygmt/tests/baseline/test_text_input_remote_filename.png diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 93697397ec7..26e45f8f4fc 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -79,9 +79,9 @@ def test_text_input_single_filename(): @pytest.mark.mpl_image_compare -def test_text_input_external_filename(): +def test_text_input_remote_filename(): """ - Run text by passing in an external filename to textfiles + Run text by passing in a remote filename to textfiles """ fig = Figure() fig.text(region=[0, 6.5, 0, 6.5], textfiles="@Table_5_11.txt")