我使用highcharts时遇到了一个大问题,因为如果很长时间,我已经花了好几个小时来包装传奇项目。
我试图设置图例和图例项目宽度,但我的文字仍然从图例中删除。我发现只有改变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>
答案 0 :(得分:41)
您可以使用:
legend: {
itemStyle: {
width: 90 // or whatever
},
}
Highcharts会为你包装物品。
答案 1 :(得分:7)
编辑:实际设置项目宽度确实有效,可能是更好的解决方案。
设置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/。
答案 2 :(得分:3)
包装长图例名称的方法
legend: {
enabled: true,
width:555,
itemWidth:500,
itemStyle: {
width:500
}
}
答案 3 :(得分:3)
作为备注,2017年您可以使用textOverflow
选项
legend.itemStyle
每个图例项目的CSS样式。仅支持CSS的子集, 特别是那些与文本相关的选项。 默认
textOverflow
属性使长文本截断。将其设置为null
以包装文本 相反。
答案 4 :(得分:1)
在图例上设置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
}
答案 5 :(得分:1)
如果您想要自己的所有项目,可以使用
legend: {
layout: "vertical"
}
答案 6 :(得分:0)
您可以使用
labelFormatter: function() {
return this.name; // insert your formatter function here
}
在您的标签中,您可以在格式化程序中添加html标记。在这种情况下,您可以添加<br>
标记以手动断行。
答案 7 :(得分:0)
对于其他使用useHTML
选项的人,您会遇到默认textOverflow: "ellipsis"
设置弄乱包装的问题。
如上所述,在textOverflow: null
内设置itemStyle
并将useHTML
设置为{{1} }}。
如果没有此设置,则默认的截断不适用于您的HTML(例如,不是字符串),而就像您设置了legendFormatter()
一样。