2016-06-14 31 views
1

凡例(see fiddle here)ではなくグラフにラベルを追加しました。 chart.renderer.textを使用してグラフにグラフを貼り付けたら、ボタンをクリックして追加の系列を追加することができます。系列は他の系列を抑制します(正常に)。しかし、どうやってこれらのラベルを今から取り除くことができますか?Highchartsでchart.rendererを使用して追加したテキストを削除する方法

例:これはラインとラベルのフルセットです。 enter image description here

を、これはボタンを同時に抑制する追加の行を表示するためにクリックされたときである他の4つのライン: enter image description here

は、私はこのようなラベルを追加:

chart.renderer.text('Volcanic', 1170, 360) 
    .css({ 
    fontSize: '13px', 
    color: '#7d7d7d' 
    }) 
.add(); 

は今、これらのラベルが残っている - しかし、離れて行く必要があります。私はこれを達成できる方法は何ですか? IDを追加して、chart.renderer.byID(xy).remove()などを呼び出すことは可能でしょうか?

+0

ので、あなたはセリエを削除したいですか? – chungtinhlakho

答えて

1

HCのドキュメントを見ると、リムーバブルであると思われる唯一のレンダリングされた要素はrendered.pathです。しかし、コードを見ることで、jqueryを使ってレンダリングされた要素を削除することができます。テキスト内のテキストまたはテキスト内のtspanで表示されるテキスト。

jquery、このように削除します。以下のコードは、私はあなたがハードjsfiddleまたは画面に表示するときに問題があるのx、レンダリングされたテキストのy座標をコード化されていることがわかり、自然はさらに

var natural = ['Volcanic','Solar','Ozone','Orbital Changes'] 
$(natural).each(function(i,d){ 
       chart.get(d).remove(); 
       $('tspan:contains("'+d+'")').closest('text').remove() 
       $('text:contains("'+d+'")').remove() 
      }) 

をクリックすると、すべての(テキストおよびシリーズ)を削除します大きすぎるか大きすぎます。 plotXとplotYを使って、行の終わりを特定し、そこにプロットすることができます。例:

var chart = $('#container').highcharts(); 
var point = chart.get('Land Use').points 'get all the plotted points 
    point[point.length-1].plotX ' length -1 is the last point, this is x, plotY will get you y. 

最後に、私はあなたが他のボタンがクリックされたときにこれらの(削除)シリーズを戻すことになるでしょうので、あなたが非表示関数の後だと思います。したがって、削除した場合は、シリーズを再レンダリングする必要があります。

+0

うわー、クール。 「コードとテキストを削除する」はすごく効果的です!本当にありがとう。そしてはい、それは "hide()"ではなく "remove()"でなければなりません。とても良い。ラベルの動的な配置は完全である。しかし、私はこれを実行することに成功しません。私はそれが最初にグラフをレンダリングし、その後ラベルを配置することの問題だと思いますか?しかし、それは対応するラベルの行を次々と表示することができないことを意味するでしょうか?または、各行の後にグラフをレンダリングする必要がありますか?あなたの助けをありがとう! [更新されたフィドルはこちらです](http://jsfiddle.net/luftikus143/6g5ttbfr/5/)。 – luftikus143

+0

あなたは2つの方法のうちの1つを行うことができます。ちょうどそれをやっているまったく同じエリアでプロットとyを試してみてください。それは動作しない場合。テキストレンダリング関数を作成し、チャートがレンダリングされた後にレンダリングします。私はあなたがそれ以外の必要があると思うあなたのテキストはほとんどの時間の場所になります。 – chungtinhlakho

5

レンダリングされたオブジェクトを削除するには、.destroy()を呼び出します。 変数にオブジェクトを割り当てるだけです。ここで

var objLabel; // assign the var so it is reachable in your scope 

objLabel = $('#container').highcharts().renderer.text('Volcanic', 100, 30) 
    .css({ 
    fontSize: '13px', 
    color: '#7d7d7d' 
    }) 
.add(); 

はポイントを証明するフィドルです:http://jsfiddle.net/jfpq6zcg/

+1

これは、すべてのカスタムレンダリングオブジェクトでうまく機能します。私はこれらの参照を保存するためにチャートオブジェクト自体を使用します – ratatosk

関連する問題