(随時更新)
公式サンプルコードが豊富なので嬉しい
対数目盛
公式サンプルコード
plotters/two-scales.rs at 5612152a3ffe1e2273a4fc6291993927d41eeea6 · plotters-rs/plotters · GitHub
ポイントは14行目にある.log_scale()
.build_cartesian_2d(0f32..10f32, (0.1f32..1e10f32).log_scale())?
冗長になるのですが一応別の方法として、IntoLogRange::log_scale
にレンジを渡すことでも対数目盛が得られます。
使用例
以下は y = exp(x) のグラフを表示します。
[dependencies] plotters = "0.3.3"
use plotters::prelude::*; fn main() -> Result<(), Box<dyn std::error::Error>> { let root = BitMapBackend::new("0.png", (640, 480)).into_drawing_area(); root.fill(&WHITE)?; let mut chart = ChartBuilder::on(&root) .caption("y=exp(x)", ("sans-serif", 50).into_font()) .margin(50) .x_label_area_size(30) .y_label_area_size(30) .build_cartesian_2d(0..20, IntoLogRange::log_scale(1f64..10e8))?; // y軸を対数目盛にする。 chart.configure_mesh().draw()?; chart.draw_series(LineSeries::new( (0..=20).map(|x| (x, (x as f64).exp())), &RED, ))? .label("y = exp(x)") .legend(|(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], &RED)); chart.configure_series_labels() .background_style(&WHITE.mix(0.8)) .border_style(&BLACK) .draw()?; root.present()?; Ok(()) }
参考
ChartBuilder in plotters::prelude - Rust
AsRangedCoord in plotters::coord::ranged1d - Rust
IntoLogRange in plotters::prelude - Rust
ヒストグラム
整数値のヒストグラム
公式サンプルコード
plotters/histogram.rs at 1dc3cd5438e45c9b4ef7fc350feaa99a69de5c5f · plotters-rs/plotters · GitHub
ポイントは13行目の
.build_cartesian_2d((0u32..10u32).into_segmented(), 0u32..10u32)?;
と
29~31行目の
Histogram::vertical(&chart) .style(RED.mix(0.5).filled()) .data(data.iter().map(|x: &u32| (*x, 1))),
少数値のヒストグラム
公式サンプルコード
plotters/normal-dist2.rs at 1dc3cd5438e45c9b4ef7fc350feaa99a69de5c5f · plotters-rs/plotters · GitHub
ポイントは31~34行目の
.set_secondary_coord( (-4f64..4f64).step(0.1).use_round().into_segmented(), 0u32..500u32, );
個人的に嵌まったのは、ステップを増やしたりして表示するバーが増えると、バーがどんどん細くなっていって次第に見えなくなってしまうことがありました。
回避には46~49行目にある
let actual = Histogram::vertical(chart.borrow_secondary()) .style(GREEN.filled()) .margin(3) .data(random_points.iter().map(|x| (*x, 1)));
の.margin(3)
の値を小さくすればOK。バー間の空白を設定できます。