예제 #1
0
def test_output_nulls():
    dataframe, error, json_dict = render(
        pd.DataFrame({
            "A": ["foo", "bar", None],
            "B": [np.nan, 2, 3],
            "C": [2, 3, 4],
        }),
        P(
            x_column="A",
            y_columns=[
                {
                    "column": "B",
                    "color": "#bbbbbb"
                },
                {
                    "column": "C",
                    "color": "#cccccc"
                },
            ],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
            "C": Column("C", "number", "{:,f}"),
        },
    )
    # Check values
    assert json_dict["data"]["values"] == [
        dict(x="foo", y0=None, y1=2),
        dict(x="bar", y0=2, y1=3),
        # None row is removed
    ]
예제 #2
0
def test_y_axis_custom_title():
    _, __, json_dict = render(
        pd.DataFrame({
            "A": ["a"],
            "B": [1],
            "C": [2]
        }),
        P(
            x_column="A",
            y_columns=[
                {
                    "column": "B",
                    "color": "#bbbbbb"
                },
                {
                    "column": "C",
                    "color": "#cccccc"
                },
            ],
            y_axis_label="New label",
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{,r}"),
            "C": Column("C", "number", "{,r}"),
        },
    )
    assert json_dict["layer"][0]["encoding"]["y"]["title"] == "New label"
예제 #3
0
 def test_happy_path(self):
     dataframe, error, json_dict = render(
         pd.DataFrame({
             "A": ["foo", "bar"],
             "B": [1, 2],
             "C": [2, 3]
         }),
         P(
             x_column="A",
             y_columns=[
                 {
                     "column": "B",
                     "color": "#bbbbbb"
                 },
                 {
                     "column": "C",
                     "color": "#cccccc"
                 },
             ],
         ),
         input_columns={
             "A": Column("A", "text", None),
             "B": Column("B", "number", "{:,}"),
             "C": Column("C", "number", "{:,f}"),
         },
     )
     # Check values
     self.assertEqual(
         json_dict["data"][0]["values"],
         [
             {
                 "bar": "B",
                 "y": 1,
                 "group": 0
             },
             {
                 "bar": "C",
                 "y": 2,
                 "group": 0
             },
             {
                 "bar": "B",
                 "y": 2,
                 "group": 1
             },
             {
                 "bar": "C",
                 "y": 3,
                 "group": 1
             },
         ],
     )
     # Check axis format is first Y column's format
     self.assertEqual(json_dict["axes"][1]["format"], ",r")
예제 #4
0
 def test_happy_path(self):
     dataframe, error, json_dict = render(pd.DataFrame({
         'A': ['foo', 'bar'],
         'B': [1, 2],
         'C': [2, 3],
     }),
                                          P(x_column='A',
                                            y_columns=[
                                                {
                                                    'column': 'B',
                                                    'color': '#bbbbbb'
                                                },
                                                {
                                                    'column': 'C',
                                                    'color': '#cccccc'
                                                },
                                            ]),
                                          input_columns={
                                              'A':
                                              Column('A', 'text', None),
                                              'B':
                                              Column('B', 'number', '{:,}'),
                                              'C':
                                              Column(
                                                  'C', 'number', '{:,f}'),
                                          })
     # Check values
     self.assertEqual(json_dict['data'][0]['values'], [
         {
             'bar': 'B',
             'y': 1,
             'group': 0
         },
         {
             'bar': 'C',
             'y': 2,
             'group': 0
         },
         {
             'bar': 'B',
             'y': 2,
             'group': 1
         },
         {
             'bar': 'C',
             'y': 3,
             'group': 1
         },
     ])
     # Check axis format is first Y column's format
     self.assertEqual(json_dict['axes'][1]['format'], ',r')
예제 #5
0
def test_y_columns_missing():
    _, error, json_dict = render(
        pd.DataFrame({
            "A": ["foo", "bar", None],
            "B": [np.nan, 2, 3],
        }),
        P(
            x_column="A",
            y_columns=[],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
        },
    )
    assert error == i18n_message("noYAxisError.message")
    assert set(json_dict.keys()) == {"error"}
예제 #6
0
def test_default_title():
    _, __, json_dict = render(
        pd.DataFrame({
            "A": ["a"],
            "B": [1]
        }),
        P(
            x_column="A",
            y_columns=[{
                "column": "B",
                "color": "#bbbbbb"
            }],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{,r}"),
        },
    )
    assert json_dict["title"] == ""
예제 #7
0
def test_nix_null_x():
    _, __, json_dict = render(
        pd.DataFrame({
            "A": [None, None, "a", None],
            "B": [1, 2, 3, 4],
        }),
        P(
            x_column="A",
            y_columns=[{
                "column": "B",
                "color": "#bbbbbb"
            }],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
        },
    )
    # None row is removed
    assert json_dict["data"]["values"] == [dict(x="a", y0=3)]
예제 #8
0
def test_no_rows_with_non_null_x():
    _, error, json_dict = render(
        pd.DataFrame({
            "A": pd.Series([None], dtype=str),
            "B": [1],
        }),
        P(
            x_column="A",
            y_columns=[{
                "column": "B",
                "color": "#bbbbbb"
            }],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
        },
    )
    assert error == i18n_message("nothingToPlotError.message")
    assert set(json_dict.keys()) == {"error"}
예제 #9
0
def test_too_many_bars():
    _, error, json_dict = render(
        pd.DataFrame({
            "A": [f"a{i}" for i in range(MaxNBars + 1)],
            "B": list(range(MaxNBars + 1)),
        }),
        P(
            x_column="A",
            y_columns=[{
                "column": "B",
                "color": "#bbbbbb"
            }],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
        },
    )
    assert error == i18n_message("tooManyBarsError.message",
                                 {"MaxNBars": MaxNBars})
    assert set(json_dict.keys()) == {"error"}
예제 #10
0
def test_happy_path():
    dataframe, error, json_dict = render(
        pd.DataFrame({
            "A": ["foo", "bar"],
            "B": [1, 2],
            "C": [2, 3],
        }),
        P(
            x_column="A",
            y_columns=[
                {
                    "column": "B",
                    "color": "#bbbbbb"
                },
                {
                    "column": "C",
                    "color": "#cccccc"
                },
            ],
        ),
        input_columns={
            "A": Column("A", "text", None),
            "B": Column("B", "number", "{:,}"),
            "C": Column("C", "number", "{:,f}"),
        },
    )
    # Check values
    assert json_dict["data"]["values"] == [
        dict(x="foo", y0=1, y1=2),
        dict(x="bar", y0=2, y1=3),
    ]
    assert json_dict["transform"][1]["from"]["data"]["values"] == [
        dict(key="y0", series="B"),
        dict(key="y1", series="C"),
    ]
    # Check axis format is first Y column's format
    assert json_dict["config"]["axisY"]["format"] == ",r"