# Perspective TimeSeries Chart axis scaling

**URL:** <https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [November 18, 2025, 9:50am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247 "2025-11-18T09:50:53Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 18, 2025, 9:50am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/1 "2025-11-18T09:50:54Z")

</div>

Hi Everyone.  
I have a question.  
When I am trying to put min/max to axis like -150/150, so the axis looks like -200/200  
When I put -140/140, so the axis looks that way what I need it looks like - -140/140  
So… what’s wrong with -150/150 limits?  
Thanx in Advance 🙂

GOOD (-140/140):

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/5/f5a274337a9ee9bbb40016720d14fb28254fcf3b.png)

NOT GOOD (-150-150):

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/9/29fc69a213db4d45b1cc216fc9d671a90c927705.png)

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 18, 2025, 9:52am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/2 "2025-11-18T09:52:31Z")

</div>

What are those custom props bound to on the chart?

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 18, 2025, 9:54am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/3 "2025-11-18T09:54:07Z")

</div>

Hi. Thanx for replay  
I have 3 axes  
To all of these axes I bound these limits

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/b/8b9161dbde01256651ddf6b68ddb04b3840afec4.png)

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 18, 2025, 10:41am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/4 "2025-11-18T10:41:47Z")

</div>

what’s your `plots[x].axes[y].tick.count` set to? this will determine the values you see. It seems like if this is set to `Auto`, that’s when the max can go above the max you set. If you set a fixed tick count, then it honours it

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 18, 2025, 10:44am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/5 "2025-11-18T10:44:18Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/f/6f0c83d2f2a2374459d1bb3d763dfd698b683d06.png)

But if i put not Auto, so I get ugly numbers

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 18, 2025, 10:44am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/6 "2025-11-18T10:44:41Z")

</div>

you can set the format under `label` e.g. to integer (`d`)

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

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 18, 2025, 10:46am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/7 "2025-11-18T10:46:02Z")

</div>

For another Object I get these:

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/d/9da6d272c24a2a55c27dc407c83aa5a2cc563525.png)

It does not look pretty

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 18, 2025, 10:47am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/8 "2025-11-18T10:47:57Z")

</div>

That’s because the tick count you set isn’t divisible by your range. If it’s dynamic, then you need to bind the tick count and calculate the number of ticks so that it gives round tick numbers.

E.g. if you have -150 to 150 and want it to increment by 50, 150- -150 = 300, 300/50 = 6. You have to add 1 to get 7 ticks.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/7/67f656c52ced58b1ec64fd222c2569081aaf104c.png)

It’s not as nice as just setting it to Auto…

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 18, 2025, 10:51am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/9 "2025-11-18T10:51:50Z")

</div>

Thanx! I will do as You recommended.  
It’s the best solution to get what Client wants!  
🥰

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 18, 2025, 11:04am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/10 "2025-11-18T11:04:17Z")

</div>

This seems to work ok for a number of ranges. Copy the JSON below and paste it into a View and have a look at the custom props and the bindings on the axes

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/1/0/10fe975a3241223837089772140f7510ee82e5da.png)

```json
[
  {
    "type": "ia.chart.timeseries",
    "version": 0,
    "props": {
      "series": [
        {
          "name": "Boiler",
          "data": [
            {
              "time": 1560469431423,
              "Temperature": 52,
              "Pressure": 12
            },
            {
              "time": 1560469432423,
              "Temperature": 18,
              "Pressure": 42
            },
            {
              "time": 1560469433423,
              "Temperature": 26,
              "Pressure": 81
            },
            {
              "time": 1560469434423,
              "Temperature": 63,
              "Pressure": 11
            },
            {
              "time": 1560469435423,
              "Temperature": 65,
              "Pressure": 23
            },
            {
              "time": 1560469436423,
              "Temperature": 12,
              "Pressure": 43
            },
            {
              "time": 1560469437423,
              "Temperature": 61,
              "Pressure": 71
            },
            {
              "time": 1560469438423,
              "Temperature": 60,
              "Pressure": 89
            },
            {
              "time": 1560469439423,
              "Temperature": 58,
              "Pressure": 66
            },
            {
              "time": 1560469440423,
              "Temperature": 1,
              "Pressure": 33
            }
          ]
        }
      ],
      "plots": [
        {
          "relativeWeight": 1,
          "trends": [
            {
              "visible": true,
              "type": "line",
              "series": "Boiler",
              "interpolation": "curveLinear",
              "breakLine": true,
              "stack": true,
              "radius": 2,
              "axis": "default",
              "columns": [],
              "baselines": []
            }
          ],
          "axes": [
            {
              "name": "default",
              "alignment": "left",
              "width": 60,
              "label": {
                "visible": true,
                "text": "",
                "offset": 0,
                "font": {
                  "color": "",
                  "size": 10
                },
                "style": {
                  "classes": ""
                }
              },
              "tick": {
                "color": "",
                "label": {
                  "format": "d",
                  "font": {
                    "color": "",
                    "size": 10
                  },
                  "style": {
                    "classes": ""
                  }
                },
                "style": {
                  "classes": ""
                }
              },
              "grid": {
                "visible": true,
                "color": "#2b2b2b",
                "opacity": 0.1,
                "dashArray": 0,
                "style": {
                  "classes": ""
                }
              },
              "style": {
                "classes": ""
              }
            }
          ],
          "markers": []
        }
      ]
    },
    "meta": {
      "name": "TimeSeriesChart"
    },
    "position": {
      "basis": "400px"
    },
    "custom": {
      "min": -2000,
      "max": 2000,
      "calc": {}
    },
    "propConfig": {
      "props.plots[0].axes[0].tick.count": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "{this.custom.calc.tickCount}"
          }
        }
      },
      "custom.range": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "{this.custom.max} - {this.custom.min}"
          }
        }
      },
      "props.plots[0].axes[0].min": {
        "binding": {
          "type": "property",
          "config": {
            "path": "this.custom.min"
          }
        }
      },
      "props.plots[0].axes[0].max": {
        "binding": {
          "type": "property",
          "config": {
            "path": "this.custom.max"
          }
        }
      },
      "custom.calc.roughInterval": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "{this.custom.range} / 7"
          }
        }
      },
      "custom.calc.magnitude": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "pow(10, floor(log10({this.custom.calc.roughInterval})))"
          }
        }
      },
      "custom.calc.normalised": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "{this.custom.calc.roughInterval} / {this.custom.calc.magnitude}"
          }
        }
      },
      "custom.calc.niceFactor": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "if({this.custom.calc.normalised} <= 1.5, 1,\r\nif({this.custom.calc.normalised} <= 3.0, 2,\r\nif({this.custom.calc.normalised} <= 7.0, 5,\r\n10)))"
          }
        }
      },
      "custom.calc.tickCount": {
        "binding": {
          "type": "expr",
          "config": {
            "expression": "floor({this.custom.range} / ({this.custom.calc.niceFactor} * {this.custom.calc.magnitude})) + 1"
          }
        }
      }
    }
  }
]

```

Claude helped a bit - see the original below

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/5/65c830b9a4b7f51dd9cda869c41c910f0d64d7e1.png)

It could do with some tweaking for some ranges like 150, 75

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 19, 2025, 7:35am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/11 "2025-11-19T07:35:39Z")

</div>

where should I paste this JS script?  
Oh I seee. This JSON imitates this JS script? or?

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 19, 2025, 9:57am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/12 "2025-11-19T09:57:40Z")

</div>

The JSON I copied in is the JSON of the XY Chart component itself. If you copy any component in a View, it will copy its JSON to the clipboard, which is what I did with the XY Chart. So if you just copy that JSON and paste it into a View, it will paste in my example XY Chart

---

<div class="post-metadata">

**Author:** ![iscrac](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/iscrac/32/49757_2.png) [@iscrac](https://forum.inductiveautomation.com/u/iscrac)\
**Post date:** [November 19, 2025, 9:59am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/13 "2025-11-19T09:59:16Z")

</div>

ok. thanx.

---

<div class="post-metadata">

**Author:** ![andrew.budaiev](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/andrew.budaiev/32/72921_2.png) [@andrew.budaiev](https://forum.inductiveautomation.com/u/andrew.budaiev)\
**Post date:** [November 19, 2025, 11:22am UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/14 "2025-11-19T11:22:15Z")

</div>

Don’t forget to Shift + right click on the view node to make Paste JSON option visible.

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [November 19, 2025, 8:28pm UTC](https://forum.inductiveautomation.com/t/perspective-timeseries-chart-axis-scaling/112247/15 "2025-11-19T20:28:57Z")

</div>

That’s only if you want to replace the entire view's definition, not add to a view
