rust - 使用 rust 为第三列值绘制带有颜色的 2D 地图
问题描述
我有一个矢量Vec<(i32,i32,i32)>
,想创建一个 2D 彩虹或渐变图。向量的第三个元素是颜色的值。我正在使用绘图仪库。图像示例中的颜色图。任何想法或代码示例?
我实现了下面的代码,得到的结果非常接近我想要的。我不知道如何解决包含颜色条、作为颜色参考以及如何平滑字段的问题。
fn figura2(profun: Vec<(i32, i32, i32)>) -> Result<(), Box<dyn std::error::Error>> {
let root = BitMapBackend::new("plot_fold.png", (800, 600)).into_drawing_area();
root.fill(&WHITE)?;
let mut scatter_ctx = ChartBuilder::on(&root)
.top_x_label_area_size(40)
.y_label_area_size(55)
.build_cartesian_2d((1581001..1581542).step(1), 5500i32..0i32)?;
scatter_ctx
.configure_mesh()
.disable_x_mesh()
.disable_y_mesh()
.y_desc("OFFSET (m)")
.x_desc("ESTACAS (RP)")
.axis_desc_style(("sans-serif", 15))
.draw()?;
scatter_ctx.draw_series(profun.iter().map(|(x, y, v)| {
Rectangle::new(
[(*x, *y), (x + 1, y - 500)],
HSLColor(
240.0 / 360.0 - 240.0 / 360.0 * (*v as f64 / 150.0),
0.7,
0.1 + 0.4 * *v as f64 / 200.0,
)
.filled(),
)
}))?;
Ok(())
}
解决方案
我在 Y 轴上得到了更平滑的结果,将交互范围从 500 减少到 100。并且使用colorous 库进行了更好的颜色匹配。
代码发生了什么变化。
scatter_ctx.draw_series(profun.iter().map(|(x, y, v)| {
Rectangle::new(
[(*x, *y), (x + 1, y - 100)],
{
let cor = gradient.eval_rational(*v as usize, nfold as usize);
RGBColor(
cor.r,
cor.g,
cor.b,
)
.filled()
},
)
}))?;
颜色条作为分配给字段中每种颜色的值的参考的问题仍有待解决。
推荐阅读
- python - 满足第一级条件时更改第二级多索引标签
- php - ini_get_all('Zend OPcache') 回显无法找到扩展的警告
- flutter - 配置项目“:pdf_render”时出现问题
- c - C 编程语言中“%*d”的未定义行为
- r - 标记包含列表中字符串的变量
- javascript - 我如何将我的“输出”放入一种类型的表中,例如我所包含的表?
- ca - MKcert - 错误:添加证书:添加证书失败:访问被拒绝
- java - 在 Spring Batch 中使用 StaxEventItemWriter 时,ZipFileInputStream 读取方法正在延迟编组过程
- node.js - 如何将行索引作为值 Exceljs
- python - Folium 的 TimesliderChoropleth 上没有颜色