def test_dict_unflatten(self): """Test passing a spec as keywords.""" st._legacy_vega_lite_chart(df1, x="foo", boink_boop=100, baz={"boz": "booz"}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), True) self.assertDictEqual( json.loads(c.spec), merge_dicts( autosize_spec, { "baz": { "boz": "booz" }, "boink": { "boop": 100 }, "encoding": { "x": "foo" }, }, ), )
def test_datasets_in_spec(self): """Test passing datasets={foo: df} inside the spec.""" st._legacy_vega_lite_chart({"mark": "rect", "datasets": {"foo": df1}}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), False) self.assertDictEqual(json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect"}))
def test_spec_in_arg1(self): """Test that it can be called spec as the 1st arg.""" st._legacy_vega_lite_chart({"mark": "rect"}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), False) self.assertDictEqual(json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect"}))
def test_spec_but_no_data(self): """Test that it can be called with only data set to None.""" st._legacy_vega_lite_chart(None, {"mark": "rect"}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), False) self.assertDictEqual(json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect"}))
def test_width_inside_spec(self): """Test the width up to Vega-Lite.""" st._legacy_vega_lite_chart(df1, {"mark": "rect", "width": 200}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertDictEqual( json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect", "width": 200}), )
def test_use_container_width(self): """Test that use_container_width=True autosets to full width.""" st._legacy_vega_lite_chart(df1, {"mark": "rect"}, use_container_width=True) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertDictEqual( json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect"}) ) self.assertEqual(c.use_container_width, True)
def _get_unnamed_data_methods(self): """DeltaGenerator methods that do not produce named datasets.""" return [ lambda df: st._legacy_dataframe(df), lambda df: st._legacy_table(df), lambda df: st._legacy_vega_lite_chart( df, {"mark": "line", "encoding": {"x": "a", "y": "b"}} ), # TODO: _legacy_line_chart, _legacy_bar_chart, etc. ]
def test_no_args_add_rows(self): """Test that you can call _legacy_add_rows on a _legacy_vega_lite_chart(None).""" x = st._legacy_vega_lite_chart({"mark": "rect"}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), False) x._legacy_add_rows(df1) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(len(c.data.data.cols[0].strings.data), 4)
def _get_named_data_methods(self): """DeltaGenerator methods that produce named datasets.""" # These should always name the desired data "mydata1" return [ lambda df: st._legacy_vega_lite_chart( { "mark": "line", "datasets": {"mydata1": df}, "data": {"name": "mydata1"}, "encoding": {"x": "a", "y": "b"}, } ), # TODO: deck_gl_chart ]
def test_legacy_add_rows(self): """Test that you can call _legacy_add_rows on a _legacy_vega_lite_chart(data).""" x = st._legacy_vega_lite_chart(df1, {"mark": "rect"}) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(len(c.data.data.cols[0].strings.data), 4) x._legacy_add_rows(df2) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(len(c.data.data.cols[0].strings.data), 8) self.assertDictEqual(json.loads(c.spec), merge_dicts(autosize_spec, {"mark": "rect"})) c = self.get_delta_from_queue().new_element.vega_lite_chart self.assertEqual(c.HasField("data"), True)
"color": {"field": "c", "type": "quantitative"}, }, } spec_with_width = { "mark": "circle", "encoding": { "x": {"field": "a", "type": "quantitative"}, "y": {"field": "b", "type": "quantitative"}, "size": {"field": "c", "type": "quantitative"}, "color": {"field": "c", "type": "quantitative"}, }, "width": "500", } st._legacy_vega_lite_chart(df, spec, use_container_width=True) st._legacy_vega_lite_chart(df, spec, use_container_width=True) st._legacy_vega_lite_chart(df, spec) st._legacy_vega_lite_chart(df, spec_with_width) # Screenshot comparison st.header("Different ways to get the exact same plot") df = pd.DataFrame([["A", "B", "C", "D"], [28, 55, 43, 91]], index=["a", "b"]).T st.write("Using a top-level `df` and a `spec` dict:") st._legacy_vega_lite_chart( df, {
def test_pyarrow_table_data(self): """Test that an error is raised when called with `pyarrow.Table` data.""" with self.assertRaises(StreamlitAPIException): st._legacy_vega_lite_chart(pa.Table.from_pandas(df1), {"mark": "rect"})
def test_none_args(self): """Test that an error is raised when called with args set to None.""" with self.assertRaises(ValueError): st._legacy_vega_lite_chart(None, None)
def test_no_args(self): """Test that an error is raised when called with no args.""" with self.assertRaises(ValueError): st._legacy_vega_lite_chart()
import matplotlib.pyplot as plt import streamlit as st import pandas as pd data = pd.DataFrame({"a": [1, 2, 3, 4], "b": [1, 3, 2, 4]}) spec = { "mark": "line", "encoding": { "x": {"field": "a", "type": "quantitative"}, "y": {"field": "b", "type": "quantitative"}, }, } # 5 empty charts st._legacy_vega_lite_chart(spec, use_container_width=True) fig, ax = plt.subplots() st.pyplot(fig, use_container_width=True) st._legacy_line_chart() st._legacy_bar_chart() st._legacy_area_chart() # 1 empty map # comment this one out to avoid this Cypress-Mapbox related error. # ref: https://github.com/cypress-io/cypress/issues/4322 # st.pydeck_chart() # st.map() # 6 errors try: st._legacy_vega_lite_chart({}, use_container_width=True)
table_el = st._legacy_table(df1) dataframe_el = st._legacy_dataframe(df1) chart_el1 = st._legacy_line_chart() chart_el2 = st._legacy_line_chart(df1) # 4 identical charts, built in different ways. vega_el1 = st._legacy_vega_lite_chart( df1, { "mark": { "type": "line", "point": True }, "encoding": { "x": { "field": "a", "type": "quantitative" }, "y": { "field": "b", "type": "quantitative" }, }, }, use_container_width=True, ) vega_el2 = st._legacy_vega_lite_chart( { "datasets": { "foo": df1 }, "data": {