Skip to content

Visual bugs and data misrepresentation due to smoothing [BUG] #37

@EdwardvanRaak

Description

@EdwardvanRaak

Describe the bug
Great lib, love the simple designs.

It's however possible with certain datasets and configurations to get some quite strange looking graphs.

As an example take (over-exaggerated) dataset:

Dataset(
     mutableListOf(
         DataPoint(0f, 0f),
         DataPoint(1f, 3.7f),
         DataPoint(2f, 3.6f),
         DataPoint(3f, 3.5f),
         DataPoint(4f, 0f),
         DataPoint(5f, 3.2f),
         DataPoint(6f, 0f),
         DataPoint(7f, 3.3f),
         DataPoint(8f, 0f)
     )
)

With XML

    <com.yabu.livechart.view.LiveChart
        android:id="@+id/dimensions_live_chart"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:layout_marginStart="36dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="36dp"
        android:layout_marginBottom="32dp"
        app:layout_constraintBottom_toBottomOf="..."
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="..." />

And code

        holder.dimensionsLiveChart.setDataset(it)
                .drawSmoothPath()
                .drawFill(false)
                .drawHorizontalGuidelines(steps = 3)
                .drawBaselineConditionalColor()
                .setBaselineManually(3f)
                .setOnTouchCallbackListener(object : LiveChart.OnTouchCallback {
                    @SuppressLint("SetTextI18n")
                    override fun onTouchCallback(point: DataPoint) {
                        //ommited
                    }

                    override fun onTouchFinished() {
                        //omitted
                    }
                })
                .drawDataset()
        }

This results in:

Screenshot from 2021-01-20 14-18-44

The bugs I discovered:

  • Due to line smoothing, datapoints can incorrectly return values that are higher or lower than the min/max values that were provided in the dataset. For example: using the provided dataset above you can retrieve data point 3.88 which is a point provided by smoothing but not a real value. As smoothing is a pure "visual" feature, I find it strange that datapoints are not accurately returned in this case.
  • It appears line smoothing does not work in conjunctions with the fill color in extreme cases, as fill color is not smoothed. As you can see in the screenshot, "pyramid shapes" are formed of the fill color.
  • I'm having problems where the lines are cropped off above or below the chart. This is especially clear when using smoothing, as the large bend artificially makes the graph bigger. I'm wondering how I can fix this, as including padding in XML breaks the graph even further and is clearly not supported.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions