From 93807e58b7df1afa3ca299348faf5b7c52dc60b7 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Wed, 21 Aug 2019 01:19:11 +1200 Subject: [PATCH 1/4] Wrap text Initial commit for wrapping the text/pstext function raised at https://github.com/GenericMappingTools/pygmt/issues/122, to be implemented under base_plotting.py alongside the other mapping related stuff. Original GMT `text` documentation can be found at https://gmt.soest.hawaii.edu/doc/latest/text.html. Storing sample test cases at test_text.py. Current implementation takes in either a text filename or x,y,text triples as input. --- doc/api/index.rst | 1 + pygmt/base_plotting.py | 68 +++++++++++++ .../baseline/test_multiple_lines_of_text.png | Bin 0 -> 4229 bytes .../baseline/test_single_line_of_text.png | Bin 0 -> 1832 bytes pygmt/tests/baseline/test_text_input_file.png | Bin 0 -> 25384 bytes pygmt/tests/test_text.py | 90 ++++++++++++++++++ 6 files changed, 159 insertions(+) create mode 100644 pygmt/tests/baseline/test_multiple_lines_of_text.png create mode 100644 pygmt/tests/baseline/test_single_line_of_text.png create mode 100644 pygmt/tests/baseline/test_text_input_file.png create mode 100644 pygmt/tests/test_text.py diff --git a/doc/api/index.rst b/doc/api/index.rst index 3b2a4aeab6d..d45a68b3973 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -31,6 +31,7 @@ Plotting data and laying out the map: Figure.logo Figure.image Figure.shift_origin + Figure.text Saving and displaying the figure: diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 6c739ff690e..1b69629ddd0 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -2,6 +2,10 @@ Base class with plot generating commands. Does not define any special non-GMT methods (savefig, show, etc). """ +import csv +import numpy as np +import pandas as pd + from .clib import Session from .exceptions import GMTInvalidInput from .helpers import ( @@ -9,6 +13,7 @@ dummy_context, data_kind, fmt_docstring, + GMTTempFile, use_alias, kwargs_to_strings, ) @@ -530,3 +535,66 @@ def image(self, imagefile, **kwargs): with Session() as lib: arg_str = " ".join([imagefile, build_arg_string(kwargs)]) lib.call_module("image", arg_str) + + @fmt_docstring + @use_alias(R="region", J="projection") + @kwargs_to_strings(R="sequence") + def text(self, textfile=None, x=None, y=None, text=None, **kwargs): + """ + Places text on a map. + + Used to be pstext. + + Takes in a textfile or (x,y,text) triples as input. + + Must provide either *textfile* or *x*, *y*, and *text*. + + Full option list at :gmt-docs:`text.html` + + {aliases} + + Parameters + ---------- + textfile : str + A text data file name + x, y : float or 1d arrays + The x and y coordinates, or an array of x and y coordinates to plot the text + text : str or 1d array + The text string, or an array of strings to plot on the figure + {J} + {R} + """ + kwargs = self._preprocess(**kwargs) + + kind = data_kind(textfile, x, y, text) + if kind == "vectors" and text is None: + raise GMTInvalidInput("Must provide text with x and y.") + + with GMTTempFile(suffix=".txt") as tmpfile: + with Session() as lib: + if kind == "file": + file_context = dummy_context(textfile) + elif kind == "vectors": + dataframe = pd.DataFrame.from_dict( + { + "x": np.atleast_1d(x), + "y": np.atleast_1d(y), + "text": np.atleast_1d(text), + } + ) + dataframe.to_csv( + tmpfile.name, + sep="\t", + header=False, + index=False, + quoting=csv.QUOTE_NONE, + ) + file_context = dummy_context(tmpfile.name) + else: + raise GMTInvalidInput( + "Unrecognized data type: {}".format(type(textfile)) + ) + + with file_context as fname: + arg_str = " ".join([fname, build_arg_string(kwargs)]) + lib.call_module("text", arg_str) diff --git a/pygmt/tests/baseline/test_multiple_lines_of_text.png b/pygmt/tests/baseline/test_multiple_lines_of_text.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f123855837d557bc3801ae6bbcda8be1d83841 GIT binary patch literal 4229 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 a=sJt4af7GYid;Sbm>XLeRo{N}_y literal 0 HcmV?d00001 diff --git a/pygmt/tests/baseline/test_single_line_of_text.png b/pygmt/tests/baseline/test_single_line_of_text.png new file mode 100644 index 0000000000000000000000000000000000000000..932ac478cfc1bc84c587dcf5cc0dc4e60d33a025 GIT binary patch literal 1832 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 iR75#04uxe*ph>cRLT Date: Thu, 22 Aug 2019 16:57:14 +1200 Subject: [PATCH 2/4] Allow setting angle, font and justify arguments in text Extra angle, font, justify arguments to fine-tune how the text looks. These arguments all fall under the '-F' parameter, and are set by appending '+a', '+f' or '+j' respectively. Also reduce number of local variables to avoid "R0914: Too many local variables" lint error. --- pygmt/base_plotting.py | 61 ++++++++++++++---- .../baseline/test_text_with_angle_30.png | Bin 0 -> 5521 bytes .../baseline/test_text_with_font_bold.png | Bin 0 -> 1344 bytes ...with_justify_bottom_right_and_top_left.png | Bin 0 -> 4659 bytes pygmt/tests/test_text.py | 60 ++++++++++++++++- 5 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 pygmt/tests/baseline/test_text_with_angle_30.png create mode 100644 pygmt/tests/baseline/test_text_with_font_bold.png create mode 100644 pygmt/tests/baseline/test_text_with_justify_bottom_right_and_top_left.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 1b69629ddd0..eba680f72f8 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -538,8 +538,23 @@ def image(self, imagefile, **kwargs): @fmt_docstring @use_alias(R="region", J="projection") - @kwargs_to_strings(R="sequence") - def text(self, textfile=None, x=None, y=None, text=None, **kwargs): + @kwargs_to_strings( + R="sequence", + angle="sequence_comma", + font="sequence_comma", + justify="sequence_comma", + ) + def text( + self, + textfile=None, + x=None, + y=None, + text=None, + angle=None, + font=None, + justify=None, + **kwargs, + ): """ Places text on a map. @@ -547,7 +562,7 @@ def text(self, textfile=None, x=None, y=None, text=None, **kwargs): Takes in a textfile or (x,y,text) triples as input. - Must provide either *textfile* or *x*, *y*, and *text*. + Must provide at least *textfile* or *x*, *y*, and *text*. Full option list at :gmt-docs:`text.html` @@ -561,6 +576,22 @@ def text(self, textfile=None, x=None, y=None, text=None, **kwargs): The x and y coordinates, or an array of x and y coordinates to plot 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 + 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 + 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 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 must + have this as a column. {J} {R} """ @@ -570,31 +601,39 @@ def text(self, textfile=None, x=None, y=None, text=None, **kwargs): if kind == "vectors" and text is None: raise GMTInvalidInput("Must provide text with x and y.") + 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)): + 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}" + with GMTTempFile(suffix=".txt") as tmpfile: with Session() as lib: if kind == "file": - file_context = dummy_context(textfile) + fname = textfile elif kind == "vectors": - dataframe = pd.DataFrame.from_dict( + pd.DataFrame.from_dict( { "x": np.atleast_1d(x), "y": np.atleast_1d(y), "text": np.atleast_1d(text), } - ) - dataframe.to_csv( + ).to_csv( tmpfile.name, sep="\t", header=False, index=False, quoting=csv.QUOTE_NONE, ) - file_context = dummy_context(tmpfile.name) + fname = tmpfile.name else: raise GMTInvalidInput( "Unrecognized data type: {}".format(type(textfile)) ) - with file_context as fname: - arg_str = " ".join([fname, build_arg_string(kwargs)]) - lib.call_module("text", arg_str) + arg_str = " ".join([fname, build_arg_string(kwargs)]) + lib.call_module("text", arg_str) diff --git a/pygmt/tests/baseline/test_text_with_angle_30.png b/pygmt/tests/baseline/test_text_with_angle_30.png new file mode 100644 index 0000000000000000000000000000000000000000..a859ddd371caf67415b14046994a640980993115 GIT binary patch literal 5521 zcmV;C6>jQ@P)h4l7AJu;!uT7<@$>mCKgMxfzxDZil=vHl;YAGypd+u> z%m3x)^O>eeyvBV+&%VD;BLM;QVw$G!_q+Zw8h=GdKmgtF3&8F1H!u$fpci6PyFLB} z5)eQyKA%tXXOe&bZfKt8X_}^Kdi|KDDO?+29uPn`{CU9WMn5++_E$>;@h%b&KsUr% zu)p!+YG~Z#_{R`kO5U^71%O{-OLJ23# zLaZaZ=;KTXfFp=uY&Op3c^2FKwhV+t{H;$W0RbG%z836L)=%6SIOV%y7vXRIZXa3$ zK$ags*-5?6=M$#nIF9-&qc6~>6qyGEa0Gu6P>-GHdU5KMh-ewD?1Fa0vN8z>;0Trk zjBXXwx55MJ$-4L?1N_%mV^AM3_g8eadh7nbb>t zJ(YdRv?B=!pvE|ke(tzmDp@059DY#`EO7^B_<}G=_0QvwfB*_aOSaMo8xk90N&|E| z<^cg%P1E##zx9=e@AvzDzrzjBVn?23%I^RqAOMr1Ro8Iy$}~;Uy3b|b#uIPVNI(F2 z(LH+WXf!%B{(iqA*F+iU#>>X+D{81!pw)01z+E-$=^|cW?D!%+K!e}X4{AUF8KS3v zatJrvohQOel!3-8fc=-%oheRgn5F>kC)!-T=q+ODR{w7HX-yghuBZV4ST*VC5^Z}G zoegxwrsxvbcDH=NZ($w~c(UztYSlem)-Q_l#X`}Z z!3uwNdM<#=N^NJ!PV@Oo7WOH>;b%kj5}RlA@5zjQYhOFnmH;lu9o|?6m1_g1cf*mqtiH;D%D6mMZA7PZQ_ZjBgBYH7fnldm{mXTUpQ2ra~|r z^IC%Gay?yIIeRf0Kr_ZZdZpc2>fW_$PnT9mK;Tx4Hwx8NLdMJ3qSv-n{(g2wZy2Cs zVyNrJs{V*IwFNKiI%S-syGl=&R?d!K05ww6YWCu*E($Kv)1?&>5a>+y#$LhLpQ)K%gh#{GAAz=(*k0 zOq|HmiV3^Zdb+f7ZV3v&&OUApN2$hFUUSdNe%KKWbVF<~R!Xh#)=K4m%hZo}0um7D zhCjT`_OlYv_WgcSi78IJ^)!avj06PwAcD!*k5Bn!>dD4lf%iZH0)41BV;gofNY!^D z9IwBI+X@K?+?lbytM2~NI}#A+PfeJ9$4M@I2Xry_TCNHy-0n?R<8xy#9IK zR!BgghD))EH`;5fFr>De-v~pt;=|t$2?&(&E4b1#WTivPFsG_h%#yGVL;?b3sxv5z zzi}MbC!~hPBB!d$Kuf$n5D5sBsmq|SsewKdm--RmxsIZr{_s8sArcTMR#8b6y+!Zy zTyX`5KWwjFPPru#5GYpKU0Gz7XsTt`{4xI?^fQ=!)O_Z9Mun4{W4FOzLH+*I2f~gzO=x{J1BthcF5T>NV-EJkRs% z^$Lf*%d&{Ub@=>gnwH!~Yxk&%5B3NrCos@C|6fz8m`c4Sx(hn>5cf*uleqoW;!&1e zhfiJ(CINv>EIVVOLr(jY-yUg28RY!Q)rbIoiEF~wPAcnHvP-LO=Sui8V>7-cJ^TD8 zJf#a(%GnVN^ueAKVHv2eR}^ii-o9$Vj%Xh%AwWiSr9u%diHJ?eD;HMxS0i)j% zI|RpZynPqwjI$#cxU^LHHvUL`SAUMOMiJ7VEPl%Rk;E&*RhK7kf?1J(fF_K#Y~xa= zRew_vokgEkLHs$4f`KG4LLA32I>4Ogd5Hy_c$qk$X57qNbWO1FneI1YdFB0`9l^kL z`TtUinoy!-lNGSaT5)g>18?yhNpgl{^n0cO+9fiZs6e01qE6xR@WB$gJ_xs)Uc!Pi1x77Rn_TQU2%0ZON(lNR+7tL1jv4D#LRMnAgTd@IF$zXc);ly()tS34qe<2j-2@U6!`r7{$8l98 zAiCi;npmRb{eEu`!R9Rkp5BAtl1M=GLF}`0l=cKorUjcc!Eg8kG)DrW57Ac4^N%HV zh(ftV*Qo9!uj1jC^Ip-ZyAc5sdsEM_9^BXgwEAe8|CWZI2W^pn=s;1E zhfDCHo`5(835X7qR$*;hftE&Uw4)!{cTFT9IuHg**4`nQdZ6X%I9vxiqR|0=cd_wr zY`Av3@s_pd1#jaxu8YpmecJr{x;PRL9jHjaA;_%lr!vB>R=OrPTVhx2hCyfSnc`Xx ztiRm8Ic6!jGn4r10ttva69eJxN7F>AM!7X#;;#>9PD0|5+}36PQpeH_E=50Xrz;{; z_y4ly+ZW~mah&L4!b+K^6K^c7u*Ccwf9J7c6pSORJzbR7DD!k1Pp64`jqxc~)PUGs zw5dT#suFD5t&hLaA9fk9E%AG;}SE41}#_2qKpdfA!4oznRxj4Veg}+&QHKP?UP_0Yey-_>HcgXwc#{i)@jxUXj-Z!m?$ogVm6s=4 zKZaWfEg|SHPm`D!2D)QmPyXMuRNE-yQbzRcMRyn#T{wq_AOW!>7dpzNLPaCxFx{f* z8U1lw+KVX8gkVQ*q?uX+^E`h(pJ?9~|6*TYMFOG&rEOipxx!sO z7Wzj5q679a5GcZqXmo(lD|SKx0(dSG5WsVhfB>G01Vjf|+r>^uK%B$%gE3~AxN>B- z4~571bM^@O z!?8BBMFQT(niq9%w~sFO2tg5T(JUtZ&>RVP6C2xqmQJp152K-Adyw`Js5+I1>?OT+Q0>+UzO;TZ>F9`IJgB^yQC_v&^U zm(DpV+y-gl4@V*aZ$;dqn~f*`1=*d(?i5G3W>Wq!fvX?^??wcfy$sAA%y_@wV*LC0 zd??w_HRb_tNK|Udu`_?(F!eVfto!t50v(|SydhBr7VW(A&GYcjO^im;}-5E1YQ|d(8vMda2aerq| zM52-yb*5gHT@tZ(MhJ;F*8gUJlTZWpN|bNLGBBL26VI`qauXFI1tWSy0(N8i*F4XD zx}_TSg#j17tZx6H|1!?Tp;u=Yp~y?+i@jG>_GP7Quj)E+0arr;URw6*BEi_))EI)% zr*V4`?u2u}*Cocet8pBa*}BvpsHGL4e@uA&S>h|g7-`v}Oxeg1vb51J z-PKI>hu)EZ7iGWqBg{eLEA97z5P!HU)`Bleth6d4O>y>P*swFkf1r|sbOyw2Fb{Z9 z{*;`h8K0QKOTES3I&knV?hs$pKMBwg67Y(|8i?i3NW4WU8%u9f0&a{^@D){THn!}1 z4j)*0n-Xv{B;b9B$V=UPRC=2daAPFk)fFXF-I54pARdc(z~h7q3(6dv>!_$50NpmEPcyRdHCjs3R6|Cyau37hb#Jd%xe&O0ZS8mF$v;TMniG#6z7O z!8d0Nvakf((tJfcoWmPH3N_%4!n?-DAL5nSjmKN=AyUdf;OWke;M)?JC5pIkX0Txy z82%|!1_DteU}I}et@%~mxHPQ$j2~cqU|oO$&%r3T8MmIW2GBbGRYstG#)Zc-!i(H2 z>lN!W-|x5ocJA{9BF>KBoA9&7Z7x~=xBZRLKMwKdr9aS*xg|Fe2S5$j-uL@mqbIur zkv*OvQcO9?>o-Sm!78dq%0NImJA&^cy78srjoB-G9lsb5JRI|Y8rRP%JlXbszm?&nu|HMF za;0wt<^h2eYQQ+Ry*b*`<@^1n8oD?Y+nAj_8khPHY1MBAxR0|Ip|7mEp-bus)jxXU z9%gn#13GFzDQxJHqRjDCS97H;VU*T>u7+KIIgTR>!GLsj1Yb+|-^cHtY-#ASs;=gY zZ}dNmI4Y-XkOtr*0e?kTSF;o)Fz-1|4y0vG`0rPPp2QASFz+p%9FcfY@ zjy5S!?%UmIpEH2%*bO7;n*mcjTK3o(17L3?prmXD40qW1?^0^OZ0i>Qryv1`;omYX z)t*lbW?dTs5p9;|5AJ}?n zEwj$^EY>}W+Wbw^G)>d%^9)H=uW%nO&SzRWeaxZ0*8qnY4lI<7m_i+hdTr_+JaIimTe}Ed% zjLTkNw9_Y9%TM>Invcf;?5Dp3Om(r}DgKm`9{w5OwfZCVfR6Mx3Qk2*!=q-FUIwB? z0>KCLsDlI)mjU@_LU!sn5cV?gKfrpC=K2-R`2xKfJb*QNIZ`uprspHqxR8?HZCuFYh*1L#`!2{`Q8gjor}Q9eMC$d2*B=yQLyV}Uy*~xhqELC!05DATBFC+Tt(s4DhEZ+7=dGR0EVH_ zC^$Qe^*j0*ZGTksBUOA70C&|O0kgNMt%{;Yf0QxEq7#Au;A|ZQTiS?<3^LBa`Hf+Q z#P(*(xY!M=>E#C?VoQ96)t|e&!+ke3G&WX({xg-Q4Ge4n)T&QFvCmG4q3Av0`A_z5 z03p33`tZf693%t*6dC+9u`d)<+|X7Of_efvA_vJn z0Hyx(H{aErqP4FD`?fc3@z2#Q%fdnjfMQGGc-HaXk}bZXgI0SDXijqgDD&Tt?l13J znP#g(z4%(2q59e9?po6y3jn)wK^V^K>63%u6GB_I!cYSOIKbb0(Oc4oA*d%{^l8x~ zO$DMQVF6&H-+WQ_*+t%#ctO#WpRxsq1O#w^za3JevvSIWT{JH3Q-0GlyvQv{T}`+*Vl`$gga)K0R(U^Edj-dRoS|%U(OpM{s3G-=B_vq zf<-S*A^redM0_P=Wn2<*=6M!-ss%a&0=Sg?eZfU#pyQg?hhMDtd;qYYd;*F&KE|*B zZX+`a9%7sRNI(GhkWauN7{H1VE|;_c=#(h|hu}6PmwN6rF;yXePUYtTSITA=CIKR_jKma`|NI<14s<9zH09;DJDA*BWVaC4z`c<5O!_S6i<2_0Ma9RHYMa3gF Tw>i&?00000NkvXXu0mjfNSuD* literal 0 HcmV?d00001 diff --git a/pygmt/tests/baseline/test_text_with_font_bold.png b/pygmt/tests/baseline/test_text_with_font_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..957056ba43cfac65b63f08c456af44cff983eb5c GIT binary patch literal 1344 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 Date: Fri, 23 Aug 2019 11:45:19 +1200 Subject: [PATCH 3/4] Add test for text justified based on column in textfile Checks that pygmt.text can justify the text when setting justify=True (using a boolean instead of string ""), reading the option from a column inside a textfile. Example is adapted from the "All great-circle paths lead to Rome" gallery example at https://gmt.soest.hawaii.edu/doc/latest/gallery/ex23.html. --- ...test_text_justify_parsed_from_textfile.png | Bin 0 -> 11239 bytes pygmt/tests/data/cities.txt | 5 +++++ pygmt/tests/test_text.py | 19 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 pygmt/tests/baseline/test_text_justify_parsed_from_textfile.png create mode 100644 pygmt/tests/data/cities.txt diff --git a/pygmt/tests/baseline/test_text_justify_parsed_from_textfile.png b/pygmt/tests/baseline/test_text_justify_parsed_from_textfile.png new file mode 100644 index 0000000000000000000000000000000000000000..34b89b39bad43af5799124e7ec1628a0f1f080ab GIT binary patch literal 11239 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 Kpj7YHKmP;Z3j>w_ literal 0 HcmV?d00001 diff --git a/pygmt/tests/data/cities.txt b/pygmt/tests/data/cities.txt new file mode 100644 index 00000000000..895ab6beda3 --- /dev/null +++ b/pygmt/tests/data/cities.txt @@ -0,0 +1,5 @@ +105.87 21.02 LM HANOI +282.95 -12.1 LM LIMA +178.42 -18.13 LM SUVA +237.67 47.58 RM SEATTLE +28.20 -25.75 LM PRETORIA diff --git a/pygmt/tests/test_text.py b/pygmt/tests/test_text.py index 20ee3c31af8..ed4dd6d7a00 100644 --- a/pygmt/tests/test_text.py +++ b/pygmt/tests/test_text.py @@ -13,6 +13,7 @@ TEST_DATA_DIR = os.path.join(os.path.dirname(__file__), "data") POINTS_DATA = os.path.join(TEST_DATA_DIR, "points.txt") +CITIES_DATA = os.path.join(TEST_DATA_DIR, "cities.txt") @pytest.fixture(scope="module") @@ -146,3 +147,21 @@ def test_text_justify_bottom_right_and_top_left(region, projection): justify="TL", ) return fig + + +@pytest.mark.mpl_image_compare +def test_text_justify_parsed_from_textfile(): + """ + Print text justified based on a column from textfile, using justify=True boolean + operation. Loosely based on "All great-circle paths lead to Rome" gallery example at + https://gmt.soest.hawaii.edu/doc/latest/gallery/ex23.html + """ + fig = Figure() + fig.text( + region="g", + projection="H90/9i", + justify=True, + textfile=CITIES_DATA, + D="j0.45/0+vred", # draw red-line from xy point to text label (city name) + ) + return fig From 7a08ebd7a5d1b185f31b84265617d1816d2d8610 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Fri, 25 Oct 2019 17:19:25 +1300 Subject: [PATCH 4/4] Enable multiple textfile input to text Using the sequence_space processor in #325 to allow for passing in a list of textfiles to be plotted! Problem with that `text` would consider a numpy matrix as a list to be parsed, so the code was updated to fix that. Unit tests and docstrings updated. Strangely enough, the 'projection'/'-J' argument doesn't seem to be required anymore? Also regenerated baseline plots to use their rightful name... --- pygmt/base_plotting.py | 37 ++++++++++-------- .../baseline/test_multiple_lines_of_text.png | Bin 4229 -> 0 bytes ...th_angle_30.png => test_text_angle_30.png} | Bin ..._font_bold.png => test_text_font_bold.png} | Bin pygmt/tests/baseline/test_text_input_file.png | Bin 25384 -> 0 bytes .../test_text_input_multiple_filenames.png | Bin 0 -> 32603 bytes .../test_text_input_single_filename.png | Bin 0 -> 30680 bytes ...ext_justify_bottom_right_and_top_left.png} | Bin .../test_text_multiple_lines_of_text.png | Bin 0 -> 6040 bytes ....png => test_text_single_line_of_text.png} | Bin pygmt/tests/test_text.py | 28 +++++++------ 11 files changed, 37 insertions(+), 28 deletions(-) delete mode 100644 pygmt/tests/baseline/test_multiple_lines_of_text.png rename pygmt/tests/baseline/{test_text_with_angle_30.png => test_text_angle_30.png} (100%) rename pygmt/tests/baseline/{test_text_with_font_bold.png => test_text_font_bold.png} (100%) delete mode 100644 pygmt/tests/baseline/test_text_input_file.png create mode 100644 pygmt/tests/baseline/test_text_input_multiple_filenames.png create mode 100644 pygmt/tests/baseline/test_text_input_single_filename.png rename pygmt/tests/baseline/{test_text_with_justify_bottom_right_and_top_left.png => test_text_justify_bottom_right_and_top_left.png} (100%) create mode 100644 pygmt/tests/baseline/test_text_multiple_lines_of_text.png rename pygmt/tests/baseline/{test_single_line_of_text.png => test_text_single_line_of_text.png} (100%) diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index eba680f72f8..df48d33569c 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -3,6 +3,7 @@ Does not define any special non-GMT methods (savefig, show, etc). """ import csv +import os import numpy as np import pandas as pd @@ -540,13 +541,14 @@ def image(self, imagefile, **kwargs): @use_alias(R="region", J="projection") @kwargs_to_strings( R="sequence", + textfiles="sequence_space", angle="sequence_comma", font="sequence_comma", justify="sequence_comma", ) def text( self, - textfile=None, + textfiles=None, x=None, y=None, text=None, @@ -556,13 +558,13 @@ def text( **kwargs, ): """ - Places text on a map. + Plot or typeset text on maps Used to be pstext. - Takes in a textfile or (x,y,text) triples as input. + Takes in textfile(s) or (x,y,text) triples as input. - Must provide at least *textfile* or *x*, *y*, and *text*. + Must provide at least *textfiles* or *x*, *y*, and *text*. Full option list at :gmt-docs:`text.html` @@ -570,36 +572,41 @@ def text( Parameters ---------- - textfile : str - A text data file name + 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). x, y : float or 1d arrays The x and y coordinates, or an array of x and y coordinates to plot 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 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 + sets the text at 30 degrees. If no angle is given 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 must have this information in one of - its columns. + info is given 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 must - have this as a column. + BL for lower left. If no justification is given then the input textfile(s) + must have this as a column. {J} {R} """ kwargs = self._preprocess(**kwargs) - kind = data_kind(textfile, x, y, text) + kind = data_kind(textfiles, x, y, text) if kind == "vectors" and text is None: raise GMTInvalidInput("Must provide text with x and y.") + 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: if "F" not in kwargs.keys(): @@ -614,7 +621,7 @@ def text( with GMTTempFile(suffix=".txt") as tmpfile: with Session() as lib: if kind == "file": - fname = textfile + fname = textfiles elif kind == "vectors": pd.DataFrame.from_dict( { @@ -630,10 +637,6 @@ def text( quoting=csv.QUOTE_NONE, ) fname = tmpfile.name - else: - raise GMTInvalidInput( - "Unrecognized data type: {}".format(type(textfile)) - ) arg_str = " ".join([fname, build_arg_string(kwargs)]) lib.call_module("text", arg_str) diff --git a/pygmt/tests/baseline/test_multiple_lines_of_text.png b/pygmt/tests/baseline/test_multiple_lines_of_text.png deleted file mode 100644 index d5f123855837d557bc3801ae6bbcda8be1d83841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4229 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 a=sJt4af7GYid;Sbm>XLeRo{N}_y diff --git a/pygmt/tests/baseline/test_text_with_angle_30.png b/pygmt/tests/baseline/test_text_angle_30.png similarity index 100% rename from pygmt/tests/baseline/test_text_with_angle_30.png rename to pygmt/tests/baseline/test_text_angle_30.png diff --git a/pygmt/tests/baseline/test_text_with_font_bold.png b/pygmt/tests/baseline/test_text_font_bold.png similarity index 100% rename from pygmt/tests/baseline/test_text_with_font_bold.png rename to pygmt/tests/baseline/test_text_font_bold.png diff --git a/pygmt/tests/baseline/test_text_input_file.png b/pygmt/tests/baseline/test_text_input_file.png deleted file mode 100644 index bfdd652270e63307f5ce4fd8af3dddf33f2a919f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25384 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