julia - Julia Plots.jl:从系列配方更改标记颜色
问题描述
我正在尝试整理一个Plots.jl
用户配方,这将创建几个散点图和排列在网格中的直方图。散点图应占据网格的下三角形。直方图在对角线上。每个散点图应该有几个系列,以不同的颜色显示。子图中的颜色应该是一致的。
我的问题是当我允许用户指定自定义颜色时,散点图中的系列颜色会变得混乱。
这是(删节的)配方代码。data
is 是一个大小为 的向量r
。的每个元素data
都是一个大小为 的矩阵n_r x d
。n_r
可能会有所不同,d
保持不变。应该有d x (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
我的问题是,每当我提供自定义颜色时,子图之间都会出现不一致:
plot(my_data, custom_colors=["blue", "green", "black"])
注意 subplot (2, 1) 的中间有黑点,而所有其他散点图的外面都有黑色
如果我在没有自定义颜色的情况下绘制:
plot(my_data)
我在所有散点图中得到一致的颜色:
任何线索为什么颜色在第一个情节上混合?
解决方案
好的,这里的技巧是每个散点图上的每个系列都应该用自己的宏来绘制。换句话说,@series ... end
应该进去for r in runs ... end
。代码的其他每个分支都有一个单独的@series
宏。
推荐阅读
- javascript - 如何在反应窗口中获取 VariableSizeList 的 itemSize?
- java - Spring Batch - 使用 SingleItemPeekableItemReader 从平面文件创建伪数据库
- r - 通过将计算应用于 R 中的行来计算新的数据框
- sql - 使用循环表达式求和
- python - 在 python 中使用 Niplas 算法 (PLS) 估算缺失数据
- r - 使用 ggplot 时,如何用字符串替换 p 值?
- c# - System.ArgumentNullException: '值不能为空。(参数'connectionString')'2
- swift - SwiftUI - fullScreenCover 不适用于 iOS 14.4.2
- javascript - Vue JS:Href链接与数据不同
- python - 如何重新排列 3D 图中的轴?