作成日: 2022/05/17 最終更新日: 2022/05/17
文書種別
使用方法
詳細
対数グラフで非常にゼロに近い値を持つ点を表示する場合に、Y軸の最小値を「0」に設定すると、データ点は正しく描画されません。
軸のLogBaseを10にして常用対数を用いる場合、Y軸目盛りのラベルには対数値が表示されますが、実際の目盛り描画には「Log10(Y)」で計算された線形目盛り値※が使用されます。
※ 例:・・-2, -1, 0, 1, 2・・
そのため、Y軸の最小値(AxisY.Min)に「0」を設定すると Log10(0) = -∞ となって実際の目盛り描画ができず、Y=1未満のデータ点が描画されないといった現象が発生します。
この動作を避けるためには、0ではなく、実際のデータの中で予想される最小値に近い値(例:0.001)をY軸の最小値として設定してください。

◎サンプルコード(VB)
軸のLogBaseを10にして常用対数を用いる場合、Y軸目盛りのラベルには対数値が表示されますが、実際の目盛り描画には「Log10(Y)」で計算された線形目盛り値※が使用されます。
※ 例:・・-2, -1, 0, 1, 2・・
そのため、Y軸の最小値(AxisY.Min)に「0」を設定すると Log10(0) = -∞ となって実際の目盛り描画ができず、Y=1未満のデータ点が描画されないといった現象が発生します。
この動作を避けるためには、0ではなく、実際のデータの中で予想される最小値に近い値(例:0.001)をY軸の最小値として設定してください。

◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データテーブルの作成
Dim dt As New DataTable()
dt.Columns.Add("ContentID", GetType(Int32))
dt.Columns.Add("Value", GetType(Double))
dt.Rows.Add(1, 0.001)
dt.Rows.Add(2, 0.01)
dt.Rows.Add(3, 0.1)
dt.Rows.Add(4, 1)
dt.Rows.Add(5, 10)
dt.Rows.Add(6, 100)
dt.Rows.Add(7, 1000)
dt.AcceptChanges()
' 系列の作成
Dim Series1 As New Series()
Series1.BindingX = "ContentID"
Series1.Binding = "Value"
Series1.DataSource = dt
Series1.ChartType = ChartType.Line
' Y軸の設定
Series1.AxisY = New Axis()
Series1.AxisY.LogBase = 10
'Series1.AxisY.Min = 0 ' Y=1未満のデータポイントが表示されません
Series1.AxisY.Min = 0.001 ' すべてのデータポイントが表示されます
Series1.AxisY.Max = 1000
Series1.AxisY.Position = Position.Left
' チャートの設定
FlexChart1.Series.Clear()
FlexChart1.Series.Add(Series1)
End Sub
End Class
◎サンプルコード(C#)
using C1.Chart;
using C1.Win.Chart;
namespace prj_C1FlexChart
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// データテーブルの作成
DataTable dt = new DataTable();
dt.Columns.Add("ContentID", typeof(Int32));
dt.Columns.Add("Value", typeof(double));
dt.Rows.Add(1, 0.001);
dt.Rows.Add(2, 0.01);
dt.Rows.Add(3, 0.1);
dt.Rows.Add(4, 1);
dt.Rows.Add(5, 10);
dt.Rows.Add(6, 100);
dt.Rows.Add(7, 1000);
dt.AcceptChanges();
// 系列の作成
Series Series1 = new Series();
Series1.BindingX = "ContentID";
Series1.Binding = "Value";
Series1.DataSource = dt;
Series1.ChartType = ChartType.Line;
// Y軸の設定
Series1.AxisY = new Axis();
Series1.AxisY.LogBase = 10;
//Series1.AxisY.Min = 0; // Y=1未満のデータポイントが表示されません
Series1.AxisY.Min = 0.001; // すべてのデータポイントが表示されます
Series1.AxisY.Max = 1000;
Series1.AxisY.Position = Position.Left;
// チャートの設定
flexChart1.Series.Clear();
flexChart1.Series.Add(Series1);
}
}
}