# Wafer map viewer

**URL:** <https://forum.inductiveautomation.com/t/wafer-map-viewer/109411>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [August 6, 2025, 2:21am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411 "2025-08-06T02:21:48Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jose\_Rodolfo\_Mutuc](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jose\_Rodolfo\_Mutuc](https://forum.inductiveautomation.com/u/Jose_Rodolfo_Mutuc)\
**Post date:** [August 6, 2025, 2:21am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/1 "2025-08-06T02:21:49Z")

</div>

I have created a component with parameter of x y and bins.

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

asking a question how can i create a wafermap viewer using this component ? the input is .json file for instance .  
[  
{  
"x": 0,  
"y": 0,  
"bin": 1  
},  
{  
"x": 1,  
"y": 0,  
"bin": 4  
},  
{  
"x": 2,  
"y": 0,  
"bin": 1  
},  
{  
"x": 3,  
"y": 0,  
"bin": 5  
},  
{  
"x": 0,  
"y": 1,  
"bin": 2  
},  
{  
"x": 1,  
"y": 1,  
"bin": 3  
},  
{  
"x": 2,  
"y": 1,  
"bin": 3  
},  
{  
"x": 3,  
"y": 1,  
"bin": 4  
},  
{  
"x": 0,  
"y": 2,  
"bin": 3  
},  
{  
"x": 1,  
"y": 2,  
"bin": 2  
},  
{  
"x": 2,  
"y": 2,  
"bin": 2  
},  
{  
"x": 3,  
"y": 2,  
"bin": 1  
},  
{  
"x": 0,  
"y": 3,  
"bin": 3  
},  
{  
"x": 1,  
"y": 3,  
"bin": 5  
},  
{  
"x": 2,  
"y": 3,  
"bin": 3  
},  
{  
"x": 3,  
"y": 3,  
"bin": 1  
}  
]

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [August 6, 2025, 6:29am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/2 "2025-08-06T06:29:26Z")

</div>

Please see [Wiki - how to post code on this forum](https://forum.inductiveautomation.com/t/wiki-how-to-post-code-on-this-forum/77831). It will format your code properly and limit the length of your post by putting it in a scrollable frame. You can edit to fix your post. Thanks.

---

<div class="post-metadata">

**Author:** ![Jose\_Rodolfo\_Mutuc](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jose\_Rodolfo\_Mutuc](https://forum.inductiveautomation.com/u/Jose_Rodolfo_Mutuc)\
**Post date:** [August 6, 2025, 6:31am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/3 "2025-08-06T06:31:16Z")

</div>

```python
[
{
"x": 0,
"y": 0,
"bin": 1
},
{
"x": 1,
"y": 0,
"bin": 4
},
{
"x": 2,
"y": 0,
"bin": 1
},
{
"x": 3,
"y": 0,
"bin": 5
},
{
"x": 0,
"y": 1,
"bin": 2
},
{
"x": 1,
"y": 1,
"bin": 3
},
{
"x": 2,
"y": 1,
"bin": 3
},
{
"x": 3,
"y": 1,
"bin": 4
},
{
"x": 0,
"y": 2,
"bin": 3
},
{
"x": 1,
"y": 2,
"bin": 2
},
{
"x": 2,
"y": 2,
"bin": 2
},
{
"x": 3,
"y": 2,
"bin": 1
},
{
"x": 0,
"y": 3,
"bin": 3
},
{
"x": 1,
"y": 3,
"bin": 5
},
{
"x": 2,
"y": 3,
"bin": 3
},
{
"x": 3,
"y": 3,
"bin": 1
}
]

```

---

<div class="post-metadata">

**Author:** ![danielps1818](https://avatars.discourse-cdn.com/v4/letter/d/ecae2f/32.png) [@danielps1818](https://forum.inductiveautomation.com/u/danielps1818)\
**Post date:** [August 6, 2025, 9:32am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/4 "2025-08-06T09:32:15Z")

</div>

You can't really do it easily. There is no native component in Ignition that allows that.  
However, there are 3rd modules that you can use to do that.

For example, you can use **vCortex** to paint charts.

> [@vCortex (i4Cortex Visualization Component Pack)](https://forum.inductiveautomation.com/t/vcortex-i4cortex-visualization-component-pack/100186):
>
> vCortex (i4Cortex Visualization Component Pack) We are happy to announce the release of our first module vCortex, an Ignition module that adds a collection of components to the Perspective Module. We invite everyone to test it, explore its features, and report any bugs or feedback to help us improve it. You can [download the demo module as a Public Beta here](https://i4cortex.com/product/vcortex-visual-component/) The module will not be limited to the current number of components and will grow based on community requests. Current Components: • Ri…

---

<div class="post-metadata">

**Author:** ![danielps1818](https://avatars.discourse-cdn.com/v4/letter/d/ecae2f/32.png) [@danielps1818](https://forum.inductiveautomation.com/u/danielps1818)\
**Post date:** [August 6, 2025, 9:51am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/5 "2025-08-06T09:51:46Z")

</div>

I just thought that you could also create one on your own.

⚠ _Note: All of this code is not test, you may have to change a few things_

Create a grid of embedded views that show color on a message received, using `system.perspective.sendMessage()`.

```python
for i in your_array:
    payload = {
        "x": i.get("x"),
        "i": i.get("y"),
        "bin": i.get("bin")
    }
    system.perspective.sendMessage("wafermap_spread", payload)

```

Inside of the messageHandler code you could do something like this:

```python
def onMessageReceived(self, payload):
    if view.params.x == payload.get("x") and view.params.y == payload.get("y"):
        custom.bin = payload.get("bin")

```

I'm not sure how efficient is flooding the system with messages and you would have to configure each view parameters on it's own.

I suposse you could also declare in custom properties of the view an array of all square components.  
Later you could do a `for` to fill all the values that you have in your array.

```python
for i in your_array:
    view.custom.bins[i.get("x")][i.get("y")] = i.get("bin")

```

All the custom properties would have to be linked with the correct square.

Hope this helps, but is some work. If I were you I would try looking at the module I mentioned (i tried and its pretty nice for showing data).

_Documentation:_

> **[Component Message Handlers | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/ignition-modules/perspective/scripting-in-perspective/component-message-handlers)**
>
> In Perspective, Component Message Handlers are the preferred way to pass parameters between components or Views. Doing this involves the system.perspective.sendMessage function. There are typically two steps involved:

> **[Perspective Component Properties | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/ignition-modules/perspective/working-with-perspective-components/perspective-component-properties)**
>
> Each Perspective component has a unique set of properties that can be set and modified within the Perspective Property Editor. A component property is simply a named variable with a distinct type that affects something about the component's behavior...

> **[Perspective - Embedded View | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/appendix/components/perspective-components/perspective-embedding-palette/perspective-embedded-view#example)**
>
> The Embedded View component allows you to include an entire view inside another.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [August 6, 2025, 3:16pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/6 "2025-08-06T15:16:46Z")

</div>

Can you give an example of how your "wafer map" is supposed to look? An image search for the term shows up circular semiconductor dies but your data is a rectangular grid.

Tip: you can **edit** previous posts to correct them rather than repost. That's what I requested in post #2.

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [August 6, 2025, 3:47pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/7 "2025-08-06T15:47:39Z")

</div>

I believe that's what it is....a circular wafer with a grid of the dies and a heat map showing what dies are good/bad. But that's just me guessing.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2025, 3:50pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/8 "2025-08-06T15:50:38Z")

</div>

Looks like a job for a view canvas component, in a coordinate container, using a transform to produce the instances from the given JSON. Different "bin" values would yield different view paths for customized visuals.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [August 6, 2025, 4:24pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/9 "2025-08-06T16:24:27Z")

</div>

I was thinking it might be as simple as the [https://docs.inductiveautomation.com/docs/8.1/appendix/components/perspective-components/perspective-chart-palette/perspective-xy-chart/xy-chart-example-heat-map](https://docs.inductiveautomation.com/docs/8.1/appendix/components/perspective-components/perspective-chart-palette/perspective-xy-chart/xy-chart-example-heat-map).

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

---

<div class="post-metadata">

**Author:** ![Jose\_Rodolfo\_Mutuc](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jose\_Rodolfo\_Mutuc](https://forum.inductiveautomation.com/u/Jose_Rodolfo_Mutuc)\
**Post date:** [August 6, 2025, 11:12pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/10 "2025-08-06T23:12:44Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/9/b913ec0725bfe85695fe52d7a69a779f3c36f65d.png)  
wafermaps sample

---

<div class="post-metadata">

**Author:** ![Jose\_Rodolfo\_Mutuc](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jose\_Rodolfo\_Mutuc](https://forum.inductiveautomation.com/u/Jose_Rodolfo_Mutuc)\
**Post date:** [August 6, 2025, 11:17pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/11 "2025-08-06T23:17:30Z")

</div>

i will explore how view canvas component works

---

<div class="post-metadata">

**Author:** ![Jose\_Rodolfo\_Mutuc](https://avatars.discourse-cdn.com/v4/letter/j/e0b2c6/32.png) [@Jose\_Rodolfo\_Mutuc](https://forum.inductiveautomation.com/u/Jose_Rodolfo_Mutuc)\
**Post date:** [August 7, 2025, 1:53am UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/12 "2025-08-07T01:53:44Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/9/499479f2dabfe2e87d61598a724450179b50e179.png)  
i already generate a wafermap viewer but its cpu consuming . it lost connection when more instance has been used.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 7, 2025, 3:50pm UTC](https://forum.inductiveautomation.com/t/wafer-map-viewer/109411/13 "2025-08-07T15:50:51Z")

</div>

Consider creating an SVG using code and rendering that to the page, as in this similar task:

> [@Reading values from database and converting it using python](https://forum.inductiveautomation.com/t/reading-values-from-database-and-converting-it-using-python/44508/11):
>
> Easysvg is a nice little wrapper to make svg files. Unzip and put in the gateway’s user-lib/pylib/site-packages folder. [easysvg.zip](https://forum.inductiveautomation.com/uploads/short-url/wY51CE88Fu5FMMVecxJajTF2wx2.zip) (6.7 KB) View attached using the csv data posted. The SVG can be converted to base64 to display in an image component. [heatmap\_test.zip](https://forum.inductiveautomation.com/uploads/short-url/DNp1RjLC9yUNKbbFzdiZdg5LHc.zip) (76.0 KB) Script: import easysvg import base64 class heatPalette: ''' Calculate the RGB value of a point on a gradient. Usage: heatPalette(minval, maxval, [colors]) minval - minimun value to sca…
