Hi, I am thinking how to quickly visualize 2D matrix, given with matrices X, Y of coordinates of corresponding data points in Z matrix. It will be used in real-time visualization of action potential propagation in cardiac tissue (X, Y will represent coordinates of irregularly placed cells).

Analogous MATLAB function would be `contour(X, Y, Z): specifies the *x* and *y* coordinates for the values in Z`

.

Is it possible to do that in Makie.jl?

Or is it only possible by using Interpotations package and pre-constructing 2D interpolated matrix? (I am considering real-time visualisation performance)

Can you show a running mock up example in julia? I’m not 100% sure how you want your data to look! If you do that, I can help you better to figure out the right Makie command!

1 Like

In my simulation cardiac tissue is modeled using *brick-wall* architecture: rectangles represent cells, bold lines are junctions between cells (by which wave of excitation propagates):

I want each cell to be colored by its voltage.

Also I did test simulation using simpler, *columnar* (cells are arranged in a grid) architecture of cells network, that can be represented using heatmap:

Previously, I did quite similar visualization of neural network in MATLAB, but using

*columnar* architecture and contour:

http://jgp.rupress.org/content/suppl/2016/02/11/jgp.201511488.DC1/JGP_201511488_V1.mp4
I am experimenting with contour and heatmap, which could give better performance for real-time and good representation of the process for publishing. Also I am thinking how to visualize

*brick-wall* architecture, maybe using mesh or poly?

1 Like

Cool graphics!

Using mesh should be pretty straight forward, just have a look at e.g. : http://juliaplots.org/MakieReferenceImages/gallery//fem_mesh_2d/index.html

Thanks, I coded simple triangles mesh, it does show up. But when I try to animate it doesn’t update.

Here is the code:

```
using Makie
function run2()
s = Scene()
sizeX = 10
sizeY = 10
points = zeros(sizeY * sizeX, 2)
color = zeros(sizeY * sizeX)
conn = zeros(Int64, (sizeY - 1) * (sizeX - 1), 3)
conn2 = zeros(Int64, (sizeY - 1) * (sizeX - 1), 3)
for y = 1:sizeY
for x = 1:sizeX
points[(y-1)*sizeX+x, 1] = x
points[(y-1)*sizeX+x, 2] = y
color[(y-1)*sizeX+x] = rand()
end
end
for y = 1:sizeY-1
for x = 1:sizeX-1
# @infiltrate (y-1)*(sizeX-1)+x > 80
conn[(y-1)*(sizeX-1)+x, 1] = Int((y - 1) * (sizeX) + x)
conn[(y-1)*(sizeX-1)+x, 2] = Int((y - 1) * (sizeX) + x + 1)
conn[(y-1)*(sizeX-1)+x, 3] = Int((y + 1 - 1) * (sizeX) + x)
conn2[(y-1)*(sizeX-1)+x, 1] = Int((y + 1 - 1) * (sizeX) + x)
conn2[(y-1)*(sizeX-1)+x, 2] = Int((y + 1- 1) * (sizeX) + x + 1)
conn2[(y-1)*(sizeX-1)+x, 3] = Int((y - 1) * (sizeX) + x + 1)
end
end
s = scatter!(points)
mesh!(s, points, [conn; conn2], color = color, shading = false)
# wireframe!(s[end][1], color = (:black, 0.6), linewidth = 3)
for i = 1:100
s[end][:color] = rand(100);
update!(s)
update_limits!(s)
sleep(1/24)
end
end
run2()
```

Other code using similar for loop is updating if I use heatmap. Also command `s[end][:color] = rand(100);`

is updating mesh from REPL.

1 Like

For me it does update… Do you mean it doesn’t display?

Because you’re missing a `display(s)`

before the animation loop!

Really! It worked now. Thanks.