对于这个超级基本的问题,我深表歉意,但我在绘图方面没有经验,而且 Julia 绘图的许多文档都假设比我拥有更多的知识!
我正在使用 Plots 创建一个散点图,其中每个标记都是根据空间位置绘制的,我想按每个标记所持有的值的大小来缩放颜色。我这样创建了一个颜色渐变:
C(g::ColorGradient) = RGB[g[z] for z = LinRange(0,1,M)]
g = :inferno
cgrad(g,[0.01,0.99]) |> C
M 与标记的数量有关,这样我可以根据我拥有的标记数量创建合适的颜色比例。
我假设我正在创建某种结构,该结构将根据从 0.01 到 0.99 的值从该渐变中分配颜色。但是,我想我不明白结构 C 是什么。当我分配 color = C(v),其中 v 介于 0 和 1.00 之间时,我收到一条错误消息,指出 C 不接受 Float64 类型。
有没有办法可以根据它的值从这个渐变中为标记分配一些颜色?我将每个位置的所有值都存储在另一个数组中。
更新:我也尝试过对 C 进行索引。我将值转换为 Int64,范围为 1-99,并尝试设置 color=C[v],但 C 也不采用 Int64 类型。
更新 2:好的,所以我意识到我的问题是我不理解 |> 功能,所以我将代码重写为:
C(g::ColorGradient) = RGB[g[z] for z = LinRange(0,1,M)]
g = :inferno
myGrad = (cgrad(g,[0.00,1.00]) |> C)
现在我可以索引我的颜色渐变了!但是,我仍然在将颜色设置为存储在 myGradient 数组中的值时遇到问题。
for i = 1:M
X,Y = find_coords(i,pd)
colors = myGrad[c_index[i]]
outline = rand(Float64,3)
plt = plot!(X,Y,colors, markerstrokecolor = outline)
end
当我在 REPL 中键入 myGrad[c_index[i]] 时,它会绘制一种颜色。但是我从上面的代码中得到一个错误,它指出
“无法将 RGB{Float64} 转换为用于绘图的系列数据”
如果我按如下方式更改情节线,我会得到一个稍微不同的错误:
plt = plot!(X,Y,markercolor = colors, markerstrokecolor = outline)
错误:LoadError:MethodError:没有方法匹配 plot_color(::Float64)
所以由于某种原因,我不能存储这种颜色,作为我的情节的颜色变量。