ハイチャートを使用するのに大きな問題があります。なぜなら、凡例アイテムが非常に長い場合、何時間もラップしようとしてきたからです。
凡例と凡例アイテムの幅を設定しようとしましたが、テキストが凡例から出ています。私が見つけたのはhighcharts.src.js
を変更することだけですが、それはこの問題を解決する方法ではないと思います。
ここに私のコード:
<script type="text/javascript">
var chart;
$(document).ready(function() {
chart = new Highcharts.Chart({
chart: {
renderTo: 'graph_container',
defaultSeriesType: 'line',
zoomType: 'y',
marginRight: 130,
marginBottom: $ {
marginBottom
}
},
title: {
x: -10,
text: null
},
xAxis: {
title: {
text: '<fmt:message key="html.time" bundle="${msg}"/>',
align: 'high'
},
categories: [$ {
years
}]
},
yAxis: {
title: {
text: '<fmt:message key="html.value" bundle="${msg}"/>',
align: 'high'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
style: {
fontSize: '9pt',
width: '400px', //,
wrap: 'hard'
},
formatter: function() {
return '<b>' + this.series.name + '<br>' +
+this.x + ': ' + this.y + '</b>';
}
},
legend: {
layout: 'vertical',
width: 600,
floating: true,
align: 'center',
verticalAlign: 'bottom',
borderWidth: 1,
itemWidth: '500px'
},
credits: {
enabled: false
},
exporting: {
enabled: false
},
series: [ <
c: forEach items = "${graphValues}"
var = "value"
varStatus = "counter" >
<
c: if test = "${counter.count != 1}" > , < /c:if> {
name: '${value.name}',
data: $ {
value.jsonData
}
} <
/c:forEach>
]
});
});
</script>
編集:実際にアイテムの幅を設定することはうまくいきました、おそらくより良い解決策です。
ItemWidthの設定が機能しませんただし、次のようなことができます。
labelFormatter: function() {
var words = this.name.split(/[\s]+/);
var numWordsPerLine = 4;
var str = [];
for (var Word in words) {
if (Word > 0 && Word % numWordsPerLine == 0)
str.Push('<br>');
str.Push(words[Word]);
}
return str.join(' ');
}
例については、 http://jsfiddle.net/ArmRM/13520/ を参照してください。
次を使用できます。
legend: {
itemStyle: {
width: 90 // or whatever
},
}
そしてHighchartsはあなたのためにアイテムを包みます。
注意として、2017年にはtextOverflow
オプションを使用できます
legend.itemStyle
各凡例アイテムのCSSスタイル。 CSSのサブセット、特にテキストに関連するオプションのみがサポートされています。 デフォルトの
textOverflow
プロパティでは、長いテキストが切り捨てられます。代わりにテキストを折り返すには、null
に設定してください。
長い凡例名を折り返す方法
legend: {
enabled: true,
width:555,
itemWidth:500,
itemStyle: {
width:500
}
}
すべてのアイテムを独自の行に配置する場合は、次を使用できます。
legend: {
layout: "vertical"
}
凡例にitemStyleを設定すると、バグが発生します。スペースのない長いラベルはまだ折り返されません。
これは、特定の文字数にラップし(20をハードコーディングしました)、それより長い単語を強制的に中断するラベルレンダラー関数です。
function hcLabelRender(){
var s = this.name;
var r = "";
var lastAppended = 0;
var lastSpace = -1;
for (var i = 0; i < s.length; i++) {
if (s.charAt(i) == ' ') lastSpace = i;
if (i - lastAppended > 20) {
if (lastSpace == -1) lastSpace = i;
r += s.substring(lastAppended, lastSpace);
lastAppended = lastSpace;
lastSpace = -1;
r += "<br>";
}
}
r += s.substring(lastAppended, s.length);
return r;
}
次のように使用できます。
legend:{
labelFormatter: hcLabelRender
}
useHTML
オプションを使用している他の人にとっては、デフォルトの_textOverflow: "Ellipsis"
_設定がラッピングを台無しにする問題が発生します。
上記のteranのように、itemStyle
内に_textOverflow: null
_を設定すると、useHTML
が有効になっていて、legendFormatter()
内に記述したカスタムHTMLをラップしようとしているときに、ラップが即座に修正されます。
これがないと、デフォルトの切り捨てはHTMLに適用されず(文字列ではないなど)、_overflow: hidden
_が設定されているように機能します。
使用できます
labelFormatter: function() {
return this.name; // insert your formatter function here
}
ラベルに、フォーマッタにhtmlタグを追加できます。この場合、<br>
タグを追加して、手動で改行することができます。
参照してください: http://www.highcharts.com/ref/#legend--labelFormatter