2017-07-26 24 views
2

highcharts-gridのx位置を取得する方法、またはHighchart xPositionから距離を取得する方法はありますか?React Highchartsでグリッド位置を取得する方法

highchars-grid

私は、実際のグリッドに自分のページ内の要素を合わせたいと思います。問題は、yAxis情報サイズが変更されることです。

次の例を参照してください

wide yAxis description と: narrow yAxis description

+0

をすることができますグリッドに配置しようとしている要素の例を表示しますか?私の経験上、他の要素とハイチャートの要素を整列するのはかなり難しいです –

+0

私はその上にamchartを配置し、そのxAxisを整列させたいと思います –

答えて

1

プロット領域のxの開始位置は、chart.plotLeftプロパティにあるため、固定マージンを設定していません。

APIリファレンス:
http://api.highcharts.com/highcharts/chart.margin

例:
http://jsfiddle.net/tcuthdra/

+0

申し訳ありませんが、私はAPIでplotLeftを見つけることができませんでした。指定したAPIリファレンスは、マージンを設定する方法であり、ダイナミックに計算されたものを取得する方法ではありません。 –

+0

plotLeftはAPIでは文書化されていませんが、marginLeft(チャートの左端とプロット領域の間の距離)と同じ値をとります。私の答えに載せた例を見てください。マージンが指定されていない場合は、凡例項目を切り替えるたびに距離が再計算されます(コンソールを開いて、再描画イベントの値を確認してください)。 –

+0

...それは動作します! –

0

あなたのチャートのためのマージンを設定することで開始する必要があり、これはx軸リフローを行うhighchartsによって行わ自動計算の一部を上書きしますあなたがシリーズの選択を解除するとき。私は上記のチャートのスタイルを模倣しようとしているシンプルなjsfiddleをした、ここを参照してください:http://jsfiddle.net/p6bog3pa/

チャートconfigオブジェクトは、次のとおりです。

Highcharts.chart('container', { 
    chart: { 
     type: 'column', 
     margin: [25, 15, 70, 400] // This fixes the chart margins 
    }, 
    xAxis: { 
     categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
    }, 
    plotOptions: { 
     column: { 
     grouping: true 
     } 
    }, 
    yAxis: [ 
    { title: { text: 'hello title' }}, 
    { title: { text: 'highcharts title' }}, 
    { title: { text: 'stuff title' }}], 
    series: [{ 
     name: 'hello', 
     yAxis: 0, 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 
    }, { 
     name: 'highcharts', 
     yAxis: 1, 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 
    }, { 
     name: 'stuff', 
     yAxis: 2, 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 
    }] 
}); 

そして、あなたはマージンを固定しているため、あなたが任意のコンポーネントのための固定オフセットを設定することができますグラフのx軸に合わせたいもちろん、より動的にしたい場合は、適切なマージンを決定するためにコード内でより多くの作業が行われますが、これはあまりにも難しい作業ではありません。

+0

しかし、左の余白の幅はどうやって決めますか? 下の2つの例を見てください - どちらの場合でも必要なマージン幅はどのように分かりますか? 私のグラフには1,2,3のような値があり、他の場合には0.000003の値を持つことがあります。それに応じて幅をどのように設定しますか? –

+0

yAxis目盛りのラベルに表示する必要がある長い値があります。目盛りのラベルをあふれさせずに省略記号にしたり、他の部分を重複させたくない場合は、実際に対応するのはもっと難しいでしょう。軸のラベル。あなたはいくつかのオプションがあります。角度で回転して余白に余分な幅を必要とするようにラベル上で回転を使用するか、整数のみが表示されるように小数点の値を許可しないでください。これは本当にyAxisのスタイリングに関するものです。ハイチャートのJsfiddleとapi docsはあなたの親友です。 http://api.highcharts。com/highcharts/yAxis –

0

私のソリューションは、Highchartの内部elemntsのものを見つけるウィンドウの左からの距離を見つけて、それに応じて自分自身の要素を移動することでした。

どうやら、チャートX軸要素はクラス名highcharts-axisで最初であり、その左上隅には私が必要なものに適しています:

const highchartInsideElement = document.getElementsByClassName("highcharts-axis"); 
    const myElement = document.getElementById("myElement"); 

    if (analCharts.length > 0) { 
     const highchartInsideElementTopLeft = this.getPageTopLeft(highchartInsideElement[0]).left; 
     const myElementTopLeft = this.getPageTopLeft(ganttWrapper).left; 

     padding = `${highchartInsideElementTopLeft - myElementTopLeft + 16}px`; // 16: cheating in order to match Highcharts extra x values 

     myElement.style.paddingLeft = amchartsWrapperMargin; 

    } 

は、ウィンドウ左からの距離を取得するには:

getPageTopLeft(el) { 
    const rect = el.getBoundingClientRect(); 
    const docEl = document.documentElement; 
    return { 
     left: rect.left + (window.pageXOffset || docEl.scrollLeft || 0), 
     top: rect.top + (window.pageYOffset || docEl.scrollTop || 0) 
    }; 
} 
関連する問題