@@ -184,48 +184,51 @@ def plot3d( # noqa: PLR0912
184
184
kwargs = self ._preprocess (** kwargs )
185
185
186
186
kind = data_kind (data , x , y , z )
187
-
188
187
extra_arrays = []
189
- if kwargs .get ("S" ) is not None and kwargs ["S" ][0 ] in "vV" and direction is not None :
190
- extra_arrays .extend (direction )
191
- elif (
192
- kwargs .get ("S" ) is None
193
- and kind == "geojson"
194
- and data .geom_type .isin (["Point" , "MultiPoint" ]).all ()
195
- ): # checking if the geometry of a geoDataFrame is Point or MultiPoint
196
- kwargs ["S" ] = "u0.2c"
197
- elif kwargs .get ("S" ) is None and kind == "file" and str (data ).endswith (".gmt" ):
198
- # checking that the data is a file path to set default style
199
- try :
200
- with Path (which (data )).open (encoding = "utf8" ) as file :
201
- line = file .readline ()
202
- if "@GMULTIPOINT" in line or "@GPOINT" in line :
203
- # if the file is gmt style and geometry is set to Point
204
- kwargs ["S" ] = "u0.2c"
205
- except FileNotFoundError :
206
- pass
207
- if is_nonstr_iter (kwargs .get ("G" )):
208
- if kind != "vectors" :
209
- raise GMTInvalidInput (
210
- "Can't use arrays for fill if data is matrix or file."
211
- )
212
- extra_arrays .append (kwargs ["G" ])
213
- del kwargs ["G" ]
214
- if size is not None :
215
- if kind != "vectors" :
216
- raise GMTInvalidInput (
217
- "Can't use arrays for 'size' if data is a matrix or a file."
218
- )
219
- extra_arrays .append (size )
220
-
221
- for flag in ["I" , "t" ]:
222
- if is_nonstr_iter (kwargs .get (flag )):
223
- if kind != "vectors" :
224
- raise GMTInvalidInput (
225
- f"Can't use arrays for { plot3d .aliases [flag ]} if data is matrix or file."
226
- )
227
- extra_arrays .append (kwargs [flag ])
228
- kwargs [flag ] = ""
188
+
189
+ if kind == "vectors" : # Add more columns for vectors input
190
+ # Parameters for vector styles
191
+ if (
192
+ kwargs .get ("S" ) is not None
193
+ and kwargs ["S" ][0 ] in "vV"
194
+ and is_nonstr_iter (direction )
195
+ ):
196
+ extra_arrays .extend (direction )
197
+ # Fill
198
+ if is_nonstr_iter (kwargs .get ("G" )):
199
+ extra_arrays .append (kwargs .get ("G" ))
200
+ del kwargs ["G" ]
201
+ # Size
202
+ if is_nonstr_iter (size ):
203
+ extra_arrays .append (size )
204
+ # Intensity and transparency
205
+ for flag in ["I" , "t" ]:
206
+ if is_nonstr_iter (kwargs .get (flag )):
207
+ extra_arrays .append (kwargs .get (flag ))
208
+ kwargs [flag ] = ""
209
+ else :
210
+ for name , value in [
211
+ ("direction" , direction ),
212
+ ("fill" , kwargs .get ("G" )),
213
+ ("size" , size ),
214
+ ("intensity" , kwargs .get ("I" )),
215
+ ("transparency" , kwargs .get ("t" )),
216
+ ]:
217
+ if is_nonstr_iter (value ):
218
+ raise GMTInvalidInput (f"'{ name } ' can't be 1-D array if 'data' is used." )
219
+
220
+ # Set the default style if data has a geometry of Point or MultiPoint
221
+ if kwargs .get ("S" ) is None :
222
+ if kind == "geojson" and data .geom_type .isin (["Point" , "MultiPoint" ]).all ():
223
+ kwargs ["S" ] = "u0.2c"
224
+ elif kind == "file" and str (data ).endswith (".gmt" ): # OGR_GMT file
225
+ try :
226
+ with Path (which (data )).open () as file :
227
+ line = file .readline ()
228
+ if "@GMULTIPOINT" in line or "@GPOINT" in line :
229
+ kwargs ["S" ] = "u0.2c"
230
+ except FileNotFoundError :
231
+ pass
229
232
230
233
with Session () as lib :
231
234
with lib .virtualfile_in (
0 commit comments