File tree 2 files changed +35
-1
lines changed
packages/python/plotly/plotly
tests/test_optional/test_px
2 files changed +35
-1
lines changed Original file line number Diff line number Diff line change @@ -1419,9 +1419,17 @@ def build_dataframe(args, constructor):
1419
1419
else :
1420
1420
# Save precious resources by only interchanging columns that are
1421
1421
# actually going to be plotted.
1422
- columns = [
1422
+ necessary_columns = [
1423
1423
i for i in args .values () if isinstance (i , str ) and i in columns
1424
1424
]
1425
+ for field in args :
1426
+ if field in array_attrables and isinstance (
1427
+ args [field ], (list , dict )
1428
+ ):
1429
+ necessary_columns .extend (
1430
+ [i for i in args [field ] if i in columns ]
1431
+ )
1432
+ columns = list (dict .fromkeys (necessary_columns ))
1425
1433
args ["data_frame" ] = pd .api .interchange .from_dataframe (
1426
1434
args ["data_frame" ].select_columns_by_name (columns )
1427
1435
)
Original file line number Diff line number Diff line change @@ -327,6 +327,32 @@ def test_build_df_from_vaex_and_polars(test_lib):
327
327
)
328
328
329
329
330
+ @pytest .mark .skipif (
331
+ version .parse (pd .__version__ ) < version .parse ("2.0.2" ),
332
+ reason = "plotly doesn't use a dataframe interchange protocol for pandas < 2.0.2" ,
333
+ )
334
+ @pytest .mark .parametrize ("test_lib" , ["vaex" , "polars" ])
335
+ def test_build_df_with_hover_data_from_vaex_and_polars (test_lib ):
336
+ if test_lib == "vaex" :
337
+ import vaex as lib
338
+ else :
339
+ import polars as lib
340
+
341
+ # take out the 'species' columns since the vaex implementation does not cover strings yet
342
+ iris_pandas = px .data .iris ()[["petal_width" , "sepal_length" , "sepal_width" ]]
343
+ iris_vaex = lib .from_pandas (iris_pandas )
344
+ args = dict (
345
+ data_frame = iris_vaex ,
346
+ x = "petal_width" ,
347
+ y = "sepal_length" ,
348
+ hover_data = ["sepal_width" ],
349
+ )
350
+ out = build_dataframe (args , go .Scatter )
351
+ assert_frame_equal (
352
+ iris_pandas .reset_index ()[out ["data_frame" ].columns ], out ["data_frame" ]
353
+ )
354
+
355
+
330
356
def test_timezones ():
331
357
df = pd .DataFrame ({"date" : ["2015-04-04 19:31:30+1:00" ], "value" : [3 ]})
332
358
df ["date" ] = pd .to_datetime (df ["date" ])
You can’t perform that action at this time.
0 commit comments