dojox.charting: как выровнять plotArea двух диаграмм друг над другом?

Я пытаюсь разместить две связанные диаграммы, одну над другой, подобно тому, что вы можете увидеть на странице Google Финансы.

Я могу прекрасно отображать обе диаграммы, но точное выравнивание plotAreas является чем-то вроде загадки. Кажется, что chart.plotArea.width каждой диаграммы зависит от ширины моих меток оси Y. Таким образом, две диаграммы имеют разную ширину и разные значения для chart.getCoord().l..

Прямо сейчас я использую смещение, которое рассчитывается вручную, но должен быть лучший способ.

 this.chart.render();  // top chart, getCoords().w=800

 // manually set margins for lower chart to match
 this.chartVol.margins.l = this.chart.offsets.l - 59 + 10;  
 this.chartVol.margins.r = this.chart.offsets.r - 31 + 10;

 // render bottom chart
 this.chartVol.render();  // bottom chart same width, getCoords().w=800

person michael    schedule 23.06.2010    source источник


Ответы (1)


Есть два простых способа сделать это:

  1. Используйте maxLabelSize и labelFunc. Первое — это максимальный размер метки в пикселях. Последняя представляет собой функцию, которая принимает число и возвращает соответствующую строковую метку.
  2. Используйте labels, который представляет собой массив объектов {value, text}, и включите в конце одну длинную фиктивную строку желаемого размера с каким-то фиктивным значением.

Я не помню, как это сделать без пользовательских меток, поэтому, если вы считаете, что это действительно необходимо, отправьте улучшение билет.

person Eugene Lazutkin    schedule 23.06.2010
comment
Я попытался использовать идентичную фиктивную строку для меток, но plotAreas по-прежнему отличается на несколько пикселей. Вопрос: где документ для maxLabelSize? к какому классу он принадлежит - я попробовал chart.addAxis('y',{maxLabelSize:5}) но, похоже, ничего не сделал. - person michael; 24.06.2010
comment
A: в исходном коде dojox/charting/axis2d/Default.js на данный момент. Что касается вашей неудачной попытки: {maxLabelSize: 5) составляет 5 пикселей. Сомневаюсь, что это была идея. И вы должны использовать его вместе с labelFunc. См. тело моего ответа выше. - person Eugene Lazutkin; 24.06.2010