8

回転した x 軸ラベルに苦労しています。それらが 5 ~ 6 文字より長い場合は、次のようにグラフに重なって表示されます: http://jsfiddle.net/kmfT9/215/ これが表示されない場合は、jsfiddle にコードの下に貼り付けてエラーを再現できます窓。

var chart = new Highcharts.Chart({

chart: {
renderTo: 'container',
marginLeft: 120
},

xAxis: {
categories: ['Jan', '02/03/2011', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], labels : { y : 20, rotation: -45 }
},

yAxis: {
lineWidth: 1,
offset: 0,
labels : { x: -20 },
title: {
text: 'Primary Axis'
},
tickWidth: 1
},

series: [{
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]
}]

});

ラベル プロパティに y 値を設定しても、これは小さなラベルでのみ考慮されます。

誰かが解決策または私が間違っていることを知っていますか?

4

2 に答える 2

18

align: 'right' を x 軸のラベル オブジェクトに追加してみてください。

例えば

xAxis: { カテゴリ: ['Jan', '02/03/2011', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', '11 月', '12 月'], ラベル: { y : 20, 回転: -45, 整列: '右' } },
于 2011-03-17T12:58:10.797 に答える
0

顧客が望むことをしなければならないこともありますが、以下の方法が最善の方法ではないことはわかっていますが、誰かの助けになるかもしれません)。私が知っているように、HighCharts は 2 つの方法でグラフを視覚化します。これは、 SVG (たとえば、サポートされている Chrome、IE > 8 ブラウザー) およびVML (IE <=8 でサポートされている) です。それぞれの方法には、ソフトブレーキングで必要なこの問題を解決できるポイントが含まれています。

SVG で解決するには、buildText 関数を見つけて、この時点で変更する必要があります。

// check width and apply soft breaks
if (width) {
...
}

たとえば、新しい個別のシンボルを追加するには:

...
var words = span.replace(/\\/g, '\\ ').replace(/-/g, '- ').split(' '),
...
tspan.appendChild(doc.createTextNode(words.join(' ').replace(/\\ /g, '\\').replace(/- /g, '-')));
...

VMLで機能させたい場合。buildText 関数と同じコードを作成する独自の関数を作成できます。

function softBreaks()
        {
            //if ie and vml
            hasSVG = !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect;
            if(!hasSVG)
            {
                //for each
                $.each($('.highcharts-axis > span > div'), function(index, value) {

                    var width = value.parentNode.style.posWidth;
                    var div = value;
                    if (width) {
                        var words = value.innerText.replace(/\//g, '/ ').replace(/\\/g, '\\ ').replace(/\./g, '. ').replace(/-/g, '- ').split(' '),
                        tooLong,
                        actualWidth,
                        rest = [];

                        while (words.length || rest.length) {

                            //actualWidth = value.parentNode.offsetWidth;
                            actualWidth = value.parentNode.scrollWidth; 
                            tooLong = actualWidth > width;

                            if (!tooLong || words.length === 1) { // new line needed
                                words = rest;
                                rest = [];
                                if (words.length) {
                                    div = document.createElement("div");
                                    value.parentNode.appendChild(div);
                                    if (actualWidth > width) { // a single word is pressing it out
                                        width = actualWidth;
                                    }
                                }
                            } else {
                                div.removeChild(div.firstChild);
                                rest.unshift(words.pop());
                            }
                            if (words.length) {
                                div.appendChild(document.createTextNode(words.join(' ').replace(/\/ /g, '/').replace(/\\ /g, '\\').replace(/\. /g, '.').replace(/- /g, '-')));
                            }
                        }
                    }
                });
            }
        }

この後、チャートが読み込まれたときにこの関数を呼び出す必要があります www.highcharts.com/ref/#chart-events--load (申し訳ありませんが、新しいユーザーです)。ページに複数のチャートがある場合は、チャート ID をパラメーターとして softBreaks() 関数に渡すことができます。

于 2011-09-21T11:29:18.770 に答える