# Timeseries Chart: Perspective Component vs Reporting Module

**URL:** <https://forum.inductiveautomation.com/t/timeseries-chart-perspective-component-vs-reporting-module/109590>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [August 11, 2025, 3:06pm UTC](https://forum.inductiveautomation.com/t/timeseries-chart-perspective-component-vs-reporting-module/109590 "2025-08-11T15:06:25Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kemmone\_Botshoma](https://avatars.discourse-cdn.com/v4/letter/k/f0a364/32.png) [@Kemmone\_Botshoma](https://forum.inductiveautomation.com/u/Kemmone_Botshoma)\
**Post date:** [August 11, 2025, 3:06pm UTC](https://forum.inductiveautomation.com/t/timeseries-chart-perspective-component-vs-reporting-module/109590/1 "2025-08-11T15:06:25Z")

</div>

Hi everyone,

I'm new to Ignition and currently working on a project involving a hydrotester. I have a dataset tag that stores time-series data: the X-axis represents the timestamp when the start button is pressed, and the Y-axis records the testing pressure.

I’m using two Timeseries Charts:

- One in my **Perspective Template Overview**

- One in the **Reporting Module**

Both are bound to the same dataset tag. The chart in the Perspective Overview displays a **smooth curve** , which is ideal. However, the chart in the Reporting Module shows a **step/ramp function** , which doesn’t reflect the actual pressure behavior accurately.

Here’s a summary of my setup:

- The dataset tag is updated via a Gateway Timer Script.

- The script appends new data points (timestamp and pressure) to the dataset.

- I keep only the last 100 points to manage performance.

Here’s the relevant part of my Gateway Timer Script:

```python
“def handleTimerEvent():

```

```python
    # Tag paths

```

```python
    start_tag = "[TPDVHYDRO]DV-HydroTester/Start"

```

```python
    stop_tag = "[TPDVHYDRO]DV-HydroTester/Stop"

```

```python
    reset_tag = "[TPDVHYDRO]DV-HydroTester/Reset"

```

```python
    dataset_tag = "[TPDVHYDRO]DV-HydroTester/Dataset"

```

```python
    y_axis_tag = "[TPDVHYDRO]DV-HydroTester/YAxis"

```

```python
    reference_tag = "[TPDVHYDRO]DV-HydroTester/Value"

```

```python

```

```python
    # Read tag values

```

```python
    start = system.tag.readBlocking([start_tag])[0].value

```

```python
    stop = system.tag.readBlocking([stop_tag])[0].value

```

```python
    reset = system.tag.readBlocking([reset_tag])[0].value

```

```python

```

```python
    # Handle Reset

```

```python
    if reset:

```

```python
        empty_dataset = system.dataset.toDataSet(["Time", "Value"], [])

```

```python
        system.tag.writeBlocking([dataset_tag], [empty_dataset])

```

```python
        system.tag.writeBlocking([reference_tag], [0])

```

```python
        system.tag.writeBlocking([reset_tag], [False])

```

```python

```

```python
    # Stop disables Start

```

```python
    if stop:

```

```python
        system.tag.writeBlocking([start_tag], [False])

```

```python
        system.tag.writeBlocking([stop_tag], [False])

```

```python

```

```python
    # Main Recording Logic

```

```python
    if start:

```

```python
        x_axis = system.date.now()

```

```python
        y_axis = system.tag.readBlocking([y_axis_tag])[0].value

```

```python
        system.tag.writeBlocking([reference_tag], [y_axis])

```

```python

```

```python
        raw_dataset = system.tag.readBlocking([dataset_tag])[0].value

```

```python
        py_data = system.dataset.toPyDataSet(raw_dataset)

```

```python

```

```python
        data = [[row["Time"], row["Value"]] for row in py_data]

```

```python
        data.append([x_axis, y_axis])

```

```python

```

```python
        if len(data) > 100:

```

```python
            data = data[-100:]

```

```python

```

```python
        headers = ["Time", "Value"]

```

```python
        new_dataset = system.dataset.toDataSet(headers, data)

```

```python
        system.tag.writeBlocking([dataset_tag], [new_dataset])

```

Timeseries Chart: Overview

 ![Overview](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/6/f629931a4e18d55d65c5402ef5f6c1d5446255d0.jpeg)

Timeseries Chart: Report

 ![Report](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/0/3043ab5bc00d779cae03af06bbf0bd51d60717fc.jpeg)

**My question is:** Is there a way to make the Timeseries Chart in the Reporting Module display a **smooth curve** , similar to the Perspective component with interpolation? Or is there a workaround to achieve a similar visual effect?

Any guidance would be greatly appreciated!

Thanks in advance,  
Kemmone

---

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [August 11, 2025, 3:28pm UTC](https://forum.inductiveautomation.com/t/timeseries-chart-perspective-component-vs-reporting-module/109590/2 "2025-08-11T15:28:05Z")

</div>

Enable scripting on the chart:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/4/04c205834b59b58348f53cf5bcef295ab6b053fe.png)

Then:

```python
def configureChart(data, chart):
	from org.jfree.chart.renderer.xy import XYSplineRenderer

	plot = chart.getPlot()
	renderer = XYSplineRenderer(8)
	plot.setRenderer(0, renderer)

```

That will add shapes to each plot point, but you can remove those:

```python
for i in range(plot.getSeriesCount()):
	renderer.setSeriesShapesVisible(i, False)

```

---

<div class="post-metadata">

**Author:** ![Kemmone\_Botshoma](https://avatars.discourse-cdn.com/v4/letter/k/f0a364/32.png) [@Kemmone\_Botshoma](https://forum.inductiveautomation.com/u/Kemmone_Botshoma)\
**Post date:** [August 11, 2025, 3:49pm UTC](https://forum.inductiveautomation.com/t/timeseries-chart-perspective-component-vs-reporting-module/109590/3 "2025-08-11T15:49:34Z")

</div>

Using this script

> def configureChart(data, chart): from org.jfree.chart.renderer.xy import XYSplineRenderer plot = chart.getPlot() renderer = XYSplineRenderer(8) plot.setRenderer(0, renderer)

This is what I get. Thank you very much. This is much better.

 ![NewGraph](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/4/7403c8d7ba88bb8cc8f5cfed4b46769bf1f2e5e3.jpeg)
