новые данные в точечной диаграмме не показаны в границах - PullRequest
2 голосов
/ 09 ноября 2011

я использую библиотеку coreplot 0.9 в своем приложении для iPad.
Здесь я использую график рассеяния с фиксированным диапазоном y (без прокрутки в направлении y), т.е. диапазон пространства графика = глобальный диапазон (см. Исходный код ниже).
Когда доступны новые данные (наблюдение MOC), я добавляю данные в массив данных графика (точечный график), определяю новый требуемый диапазон y (минимальное / максимальное значение в массиве данных) и перезагружаю весь график.
Если значение новых данных больше, чем другие значения, график отображает их вне границ, хотя пространство графика было адаптировано к новому диапазону.

Но:
Если изменение MOC происходит не из-за вставки новых данных (больше старых), а из-за удаления данных (которые имели наибольшее значение в массиве данных графика), результатом будетидеально: график использует полный диапазон -> происходит адаптация диапазона (уменьшение диапазона пространства графика).Почему это не работает и в другом направлении (увеличение диапазона сюжета)?

Я действительно застрял здесь и был бы рад, если бы кто-то мог помочь мне с этим.Благодарю.

-(void) mocChangeNotification:(NSNotification *)notification
{
    ...
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:NO];  
}

- (void) setYAxisValueRange
{
    ...
    myOwnPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(minDisplay)
                                                         length:CPTDecimalFromFloat(maxDisplay)];
    // disable "scrolling" in y-direction
    myOwnPlotSpace.globalYRange = myOwnPlotSpace.yRange;
}

- (void) refresh
{
    [dataForPlot removeAllObjects];
    [self preparePlotData]; // put data into plot's data array
    [self setYAxisValueRange]; // looks for min / max values in data
    [myPlot reloadData];
}

Эти снимки экрана показывают ситуацию (так как я новичок в переполнении стека, мне еще не разрешено публиковать картинки): http://gallery.me.com/timoseeberger#100038&view=grid&bgcolor=black&sel=5

1) Начальное отображение сюжета (всевсе в порядке):
файл: screenshot_graph_initial

2) Я добавляю новое значение (200) для построения графика -> отображение вне границ (верхний конец)
файл: screenshot_graph_adding200

3) Я удаляю значения 200 и 150 из графика -> отображение графика отлично адаптируется
файл: screenshot_graph_deleting150

4) Я добавляю новое значение (40) в график -> отображение вне границ (нижний предел)
файл: screenshot_graph_adding40

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

В конце концов я нашел причину поведения и как это исправить:
я удалил эту строку из метода "setYAxisValueRange":

myOwnPlotSpace.globalYRange = myOwnPlotSpace.yRange;  

Установка для globalYRange текущего y-диапазона при запуске не позволяет графику корректно обновлять отображение, когда текущий диапазон и globalYRange изменяются позже. Кажется, внутренне хранится начальное значение globalYRange до конца времени.
Я не знаю, является ли это ошибкой в ​​CorePlot, или мне просто не хватает понимания ее использования.
В любом случае, исправление работает нормально для меня. В любом случае мне не нужно устанавливать globalYRange, потому что я удерживаю график от вертикальной прокрутки с помощью метода делегата "plotSpace: willChangePlotRangeTo: forCoordinate:"

Надеюсь, мой ответ будет полезен всем, кто упал в ту же яму.
Если у кого-то есть более подробное объяснение проблемы, я с нетерпением жду его прочитать.

1 голос
/ 09 ноября 2011

Диапазоны участков имеют начальное местоположение и длину. Ваше местоположение в порядке; используйте maxDisplay - minDisplay для длины.

Убедитесь, что ваш график использует пространство графика, которое вы обновляете:

[graph addPlot:myPlot toPlotSpace:myOwnPlotSpace];
...