私はlazy_high_charts ruby gemを使ってハイチャートチャートを作成しています。 x軸は連続した日付を表し、ラベルは3番目ごとに1つずつ表示されます。しかし、私はラベルの下に表示される日付とそれに伴って、グリッド線が現れる場所を制御することはできないようです。チャートが開始または終了する日付にかかわらず、特定の日付にティックを割り当てることは「ロック」されているように見え、変更する方法を見つけることができません。Highchartsのdatetime X軸上のティック/グリッド線を任意にデータ点と整列させる方法を教えてください。
私はstartOnTickとendOnTickをtrueに設定しているので、これは別の厄介な副作用があります:データ系列の行がグラフの左側に並んで表示されることがあります(この場合グリッド/ティック/ラベル)、時には最も左の値の右側に始まります。
私は考えることができるすべてを試してみましたが、見栄えの良い一貫性のあるソリューションが見つかりませんでした。私が望むのは、グラフの左右にグリッド/ティック/ラベルを付けることです。最初のラベルは、その日の何日かにかかわらず、最初のデータポイントと並んでいます。
(編集者:私は新しいユーザーであるため残念なことに下のスクリーンショットを投稿できません...アップロードすれば10ポイントを得ることができます) ここに2つの日付範囲を示すスクリーンショットがあります
いずれの場合も、ラベル/ティック/グリッド線は、時間範囲が異なっていても全く同じ日付になります。 (編集:上記参照)
以下は、私が使用しているグラフオプションです。彼らはルビー構文であるが、彼らはjavascriptに直接翻訳されることを謝ります。この問題以外のチャートは、私が望むのとまったく同じように表示されるため、外観の一部を損なうような変更を加えることは望ましくありません。ありがとう!
f.options[:title] = nil
f.options[:legend] = { :enabled => false }
f.options[:chart] = {
:defaultSeriesType => "line",
:height => 342,
:width => 760,
:opacity => 0.0,
:style => "{ width: 760px; height: 342px; }",
:borderColor => '#000000',
:plotBorderColor => '#000000',
:labels => "{ color: '#000000'; }",
:spacingLeft => 25,
:spacingRight => 25,
}
f.options[:xAxis] = {
:type => 'linear',
:gridLineWidth => 1,
:gridLineDashStyle => 'ShortDash',
:startOnTick => true,
:endOnTick => true,
:showLastLabel => true,
:tickInterval => 3.days * 1000,
:tickLength => 10,
:tickWidth => 1,
:tickPosition => 'inside',
:tickmarkPlacement => 'on',
:minorGridLineWidth => 0,
:minorGridLineDashStyle => 'Dot',
:minorTickInterval => 1.day * 1000,
:minorTickLength => 5,
:minorTickWidth => 1,
:offset => 15,
:minorTickPosition => 'inside',
:lineWidth => 0,
:labels => { :align => 'center', :step => 1 },
:min => "2012-01-09".to_datetime.to_i * 1000,
:max => "2012-01-09".to_datetime.to_i * 1000 + 29.days * 1000,
}
f.options[:yAxis] = {
:title => { :text => nil },
:type => 'linear',
:gridLineWidth => 0,
:min => 0,
:max => 100,
:labels => { :enabled => false }
}
f.series(:name=>'SeriesA', :data=>[29.9, 71.5, 54.4, 98, 2, 14.0, 23.6, 65.5, 34.4, 88.1], :color => "#D846AD", :pointStart => "2012-01-09".to_datetime.to_i * 1000, :pointInterval => 3.days * 1000)
f.series(:name=>'SeriesB', :data=> [40.9, 71.5, 32.4, 12.2, 12.0, 32.0, 43.6, 34.5, 56.4, 87.1], :color => "#0A96C9", :pointStart => "2012-01-09".to_datetime.to_i * 1000, :pointInterval => 3.days * 1000)