Julia Plots.jl:从系列配方更改标记颜色

Julia Plots.jl:从系列配方更改标记颜色,julia,plots.jl,Julia,Plots.jl,我正在尝试组合一个Plots.jl用户配方,它将创建几个散点图和排列在网格中的直方图。散点图应占据网格的下部三角形。直方图在对角线上。每个散点图应有几个系列,以不同的颜色显示。子地块的颜色应一致 我的问题是,当我允许用户指定自定义颜色时,散射子图中的系列颜色会弄乱 这是(简略的)配方代码数据是大小为r的向量。数据的每个元素都是一个大小为n\r x d的矩阵n\u r可能会有所不同,d保持不变。应该有dx(d-1)/2个散点图,每个图上都有r系列,每个系列都有n\r点 @recipe functi

我正在尝试组合一个
Plots.jl
用户配方,它将创建几个散点图和排列在网格中的直方图。散点图应占据网格的下部三角形。直方图在对角线上。每个散点图应有几个系列,以不同的颜色显示。子地块的颜色应一致

我的问题是,当我允许用户指定自定义颜色时,散射子图中的系列颜色会弄乱

这是(简略的)配方代码<代码>数据是大小为
r
的向量。
数据的每个元素都是一个大小为
n\r x d
的矩阵<代码>n\u r
可能会有所不同,
d
保持不变。应该有
dx(d-1)/2个
散点图,每个图上都有
r
系列,每个系列都有
n\r

@recipe function my_func(data::my_type; custom_colors=nothing)
    # get d, r, ...
    for i in i:d
        for j in 1:d
            @series begin
                subplot := (i - 1) * d + j
                if i == j
                    seriestype := :histogram
                    plot_data = # ... prepare data for histograms
                elseif j < i
                    # scatter subplot recipe
                    seriestype := :scatter
                    if custom_colors !== nothing
                        color := reshape(custom_colors, (1, r))
                    end
                    x = Vector()
                    y = Vector()
                    for r in runs
                        ser = data[r]
                        append!(x, [ser[:, j]])
                        append!(y, [ser[:, i]])
                    end # for r
                    plot_data = (x, y)
                else
                    # leave empty
                    plot_data = [0]
                end #  if/else
                plot_data  # return from the macro function
            end # @series
        end # for j
    end # for i
end # @recipe

注意子情节(2, 1)中间有黑点,而其他散点子图在外部

有黑色。 如果我不使用自定义颜色进行打印:

plot(my_data)
我在所有散射子图中获得一致的颜色:

plot(my_data, custom_colors=["blue", "green", "black"])


有什么线索可以解释为什么第一个图上的颜色是混在一起的吗?

好的,这里的技巧是每个散点图上的每个系列都应该用自己的宏来绘制。换句话说,
@系列。。。结束
应该进入运行中的r的
内部。。。结束
。以及一个单独的
@series
宏,用于代码的每个其他分支。

相关注释。您正在定义的绘图配方称为角点绘图。我自己写了一个作为一个包来分享,但既然你已经准备好了一个好的,那就更好了。请注意,StatPlots.jl中有一个绘图配方