在Julia中的常规二维栅格上打印值

在Julia中的常规二维栅格上打印值,julia,julia-plots,Julia,Julia Plots,在规则2D晶格上设置了特定的参数值。我希望以规则网格的单元格形式显示它们,并根据参数的值填充颜色。单个栅格节点中可能存在间隙。以下是数据示例和所需的打印结果: a = [1, 2, 3, 1, 2, 3, 1, 2] b = [1, 1, 1, 2, 2, 2, 3, 3] c = [1, 5, 4, 3, 4, 2, 1, 3] plot(a, b, zcolor = c, aspect_ratio = 1, xlim = (0.5, 3.5), ylim = (0.5, 3.5), cli

在规则2D晶格上设置了特定的参数值。我希望以规则网格的单元格形式显示它们,并根据参数的值填充颜色。单个栅格节点中可能存在间隙。以下是数据示例和所需的打印结果:

a = [1, 2, 3, 1, 2, 3, 1, 2]
b = [1, 1, 1, 2, 2, 2, 3, 3]
c = [1, 5, 4, 3, 4, 2, 1, 3]

plot(a, b, zcolor = c, aspect_ratio = 1, xlim = (0.5, 3.5), ylim = (0.5, 3.5), clim = (0, 5),
seriestype = :scatter, markersize = 82, markershape = :square, markerstrokewidth = 0.5,
legend = false, colorbar = true)


这种方法是可行的,但在这种情况下,每次都需要调整正方形的大小,这样单元格之间就不会有间隙,也不会相互重叠。这需要不断的手动干预,看起来不是正确的解决方案。在这种情况下,什么是最正确的方法?我考虑过heatmap(),但据我所知,在Julia中,它不知道如何显示单元格边界。也许有什么方法可以在plot()中以绝对画布单位设置图标大小?还是在这种情况下使用其他方法更好?

热图对我来说似乎是一种选择。如果你的
a
b
跨越了整个晶格,我就用
restrape
来重塑
c
。这里的情况不是这样的,所以一种解决方案是用没有值的
NaN
s填充晶格。例如:

using Plots
a = [1, 2, 3, 1, 2, 3, 1, 2]
b = [1, 1, 1, 2, 2, 2, 3, 3]
c = [1, 5, 4, 3, 4, 2, 1, 3]
x, y = sort(unique(a)), sort(unique(b)) # the lattice x and y
C = fill(NaN, length(y), length(x)) # make a 2D C with NaNs
for (i,j,v) in zip(a,b,c) # fill C with c values
    C[j,i] = v
end
heatmap(x, y, C, clims=(0,5)) # success!
给予


编辑:如果要指定单元格的边缘,可以使用
热图
,如果需要线条,可以手动添加,例如使用
vline
hline

ex, ey = [0, 1.5, 2.3, 4], [0.5, 1.5, 2.5, 3.5]
heatmap(ex, ey, C, clims=(0,5)) 
vline!(ex, c=:black)
hline!(ey, c=:black)
将给予


谢谢!这是一个将数据转换为显示在热图上的好例子。但是细胞轮廓呢?我还没有找到这种类型的可视化的选项,可能没有提供。这是使用
plot
的主要原因之一,我不太明白。你能澄清一下遗漏了什么吗?我认为在我的例子中使用
vline
hline
的解决方案将完全解决问题,因为可以通过设置绘图限制来隐藏线条的突出部分。谢谢