2013-02-19 3 views
0

Я не могу получить свой график со всеми точками сюжета, чтобы они соответствовали моему представлению.core-plot не scalling

enter image description here Координаты, отображаемые на снимке экрана сверху: x=1, y=10 and x=2, y=0.

Это скриншот моего UIViewController (GraphingViewController) У меня есть отдельный вид вложенный в том, что здесь есть вид хозяина для графа. Мой код для графа точно так же, как и SimpleScatterPlot.m за исключением метода данных генерации, который я настроен:

-(void)generateData 
{ 
    NSMutableArray *contentArray = [NSMutableArray array]; 
    int counter = 0; 
    for (NSNumber * entryValue in self.plotDataArray) { 
     counter++; 
     id x = [NSDecimalNumber numberWithInt:counter]; 
     id y = [NSDecimalNumber numberWithInt:[entryValue intValue]]; 
     [contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]]; 
     NSLog(@"setting values for graph x: %@ and y: %@",x,y); 
    } 
    plotData = [contentArray retain]; 
} 

Другое дело, что странно, что я могу прокручивать влево и вправо, но не вверх или вниз. У меня были предыдущие изменения, когда x, y начинались с 0,0, но это скрывает ось x, поэтому, хотя я ее хочу, я не могу скрывать эту строку.

Как я могу запустить граф на 0,0 и иметь возможность масштабировать его, чтобы увидеть не только все точки, но и увидеть надписи («X Axis», «Y Axis»)? Также ось Y идет по .2 и X на .5, как вы можете видеть. Они должны быть 1, поскольку все мои номера будут целыми числами.

ответ

1

Простой способ держать ось видимыми метки является не установить titleLocation. Значение по умолчанию NAN позиционирует метку в центре участка.

globalYRange предотвращает вертикальную прокрутку. Значение по умолчанию nil не ограничивает прокрутку. Если вам нужна ограниченная прокрутка, но вам нужно изменить диапазон сюжетов, чтобы показать новые данные, установите глобальный диапазон в nil, обновите диапазон графиков и сбросьте глобальный диапазон.

Расположение тиков и этикетки осей контролируются политикой маркировки оси. Политика по умолчанию с фиксированным интервалом будет работать, просто оставьте значение majorIntervalLength по умолчанию по умолчанию (1).

0

Вы попробовали метод scaleToFitPlots?

[plotSpace scaleToFitPlots:[NSArray arrayWithObjects:scatterPlot, nil]]; 
+0

ya. Если вы проверите код в [link] (http://code.google.com/p/core-plot/source/browse/examples/CorePlotGallery/src/plots/SimpleScatterPlot.m), вы увидите, что он находится в сети 135. (Я не думаю, что это имеет значение, но они используют это с помощью [NSArray arrayWithObjects: dataSourceLinePlot, nil]) –

0

Я исправил одну часть проблемы, которая заключалась в том, что высокие точки, где не отображаются. Эта строка кода была ограничения максимальной Y Axis

CPTPlotRange *globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) 
                  length:CPTDecimalFromFloat(2.0f)]; 

Так что я создал свойство для отслеживания наибольшего значения и установить это в том, что:

CPTPlotRange *globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) 
                  length:CPTDecimalFromFloat(self.largestYvalue)]; 

Так что теперь у меня есть это:

enter image description here

Мне все еще нужно выяснить, как получить X Axis ярлык для показа (не обновляется Если я выясню это или все еще принимаю для этого).

1

То, как я реализовал это так же. Я отслеживаю значения min и max X и Y из данных, а затем задаю диапазон графика соответственно.

// Adjust the plot space according to the min and max x/y values 
plotSpace.xRange = [[CPTPlotRange alloc] initWithLocation:CPTDecimalFromInt([self.minTime intValue]) length:CPTDecimalFromInt ([self.maxTime intValue] - [self.minTime intValue])]; 
plotSpace.yRange = [[CPTPlotRange alloc] initWithLocation:CPTDecimalFromInt([self.minScore intValue]) length:CPTDecimalFromInt (([self.maxScore intValue] - [self.minScore intValue]))]; 
+0

Это помогло, но ответ Erics выше, кажется, лучше всего работает. Однако, спасибо –

Смежные вопросы