2015-08-26 2 views
0

Я хотел бы создать CorePlot граф с динамическими группами (меняющимися, как время идет вдоль), немного как этого уродливого чертеж здесь (простим меня за качество):CorePlot: создание групп с изменяемой шириной (изменение на основе данных)

enter image description here

в основном группа окраска должна меняться в зависимости от некоторых значений/критериев. Желтая полоса может быть шире или тоньше и так может быть белой и зеленой полосой. Другими словами эти полосы должны иметь динамическую ширину

Это текущий путь я установил у графа полосы расцветку, однако, если я динамически менять его не работает, как это изменяет их всех (я просто хочу, чтобы изменить группа динамически в определенной области графика и не все).

Любая идея, как я могу это достичь?

Это код относящийся к группе:

CPTFill *whitebandFill = [CPTFill fillWithColor:[[CPTColor whiteColor] colorWithAlphaComponent:0.5]]; 
CPTFill *greenbandFill = [CPTFill fillWithColor:[[CPTColor greenColor] colorWithAlphaComponent:0.5]]; 
CPTFill *redbandFill = [CPTFill fillWithColor:[[CPTColor redColor] colorWithAlphaComponent:0.75]]; 

[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(0.0) lengthDecimal:CPTDecimalFromDouble(500.0)] fill:whitebandFill]]; 
[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(500.0) lengthDecimal:CPTDecimalFromDouble(750.0)] fill:greenbandFill]]; 

[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(750.0) lengthDecimal:CPTDecimalFromDouble(1024.0)] fill:redbandFill]]; 

Это мой полная источник тока Код:

self.data = [[NSMutableArray alloc] initWithCapacity:100]; 
self.allData = [[NSMutableArray alloc] init]; 

// Create a CPTGraph object and add to hostView 
self.graph = [[CPTXYGraph alloc] initWithFrame:self.graphHostView.bounds]; 
self.graphHostView.hostedGraph = self.graph; 

CPTMutableTextStyle *titleStyle = [CPTMutableTextStyle textStyle]; 
titleStyle.color = [CPTColor blackColor]; 
titleStyle.fontName = @"Futura"; 
titleStyle.fontSize = 12.0f; 

////////// 
// Axes 
// Label x axis with a fixed interval policy 
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet; 
CPTXYAxis *x   = axisSet.xAxis; 
x.separateLayers    = NO; 
x.title      = @"X Axis"; 
x.titleTextStyle    = titleStyle; 

colorWithAlphaComponent: CPTFloat (0,1)], [[CPTColor greenColor] colorWithAlphaComponent: CPTFloat (0.1)]]; x.delegate = self;

CPTXYAxis *y = axisSet.yAxis; 
y.labelingPolicy  = CPTAxisLabelingPolicyAutomatic; 
y.separateLayers  = YES; 
y.majorTickLocations = [NSSet setWithObjects: 
         [NSDecimalNumber numberWithDouble:0], 
         [NSDecimalNumber numberWithDouble:300], 
         nil]; 

y.title     = @"Y Axis"; 
y.titleTextStyle  = titleStyle; 

colorWithAlphaComponent: CPTFloat (0.3)], [NSNull нуль]]; y.delegate = self;

CPTFill *whitebandFill = [CPTFill fillWithColor:[[CPTColor whiteColor] colorWithAlphaComponent:0.5]]; 
CPTFill *greenbandFill = [CPTFill fillWithColor:[[CPTColor greenColor] colorWithAlphaComponent:0.5]]; 
CPTFill *redbandFill = [CPTFill fillWithColor:[[CPTColor redColor] colorWithAlphaComponent:0.75]]; 

[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(0.0) lengthDecimal:CPTDecimalFromDouble(500.0)] fill:whitebandFill]]; 
[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(500.0) lengthDecimal:CPTDecimalFromDouble(750.0)] fill:greenbandFill]]; 

[y addBackgroundLimitBand:[CPTLimitBand limitBandWithRange:[CPTPlotRange plotRangeWithLocationDecimal:CPTDecimalFromDouble(750.0) lengthDecimal:CPTDecimalFromDouble(1024.0)] fill:redbandFill]]; 

self.graph.axisSet.axes = @[x, y]; 
+0

@ErickSkroch Вы могли бы уметь взглянуть на этот вопрос? – mm24

ответ

1

Предельные полосы всегда простираются по площади в проливных линиях. Вы можете рисовать более сложные фигуры, используя дополнительные сюжеты. Установите areaFill, чтобы нарисовать заливку между линией сюжета и areaBaseValue.

+0

Привет, Эрик, я попытался изменить пример CandleStick, используя ваше предложение, но я не могу создать более двух полос цвета. Мне нужно воссоздать пример в моем вопросе с тремя разными цветами. Любая идея о том, как я могу это достичь? Разбросанный участок имеет только два areaFill и два areaBase. Что происходит с теми, когда мы хотим иметь два рассеянных участка? Как я могу убедиться, что они не перекрываются? Мне нужен один сюжет, чтобы закончить, когда другой начнется .. в основном представьте изображение выше с 5 различными цветовыми полосами .. как бы вы обновили подсвечник, чтобы поддержать это? – mm24

+0

Вы можете использовать более одного сюжета для фона. Один для желтой части и один для зеленой части. Через них будет отображаться заполнение участка. Прямо сейчас нет простого способа заполнить между двумя графиками (см. [Выпуск № 99] (https://github.com/core-plot/core-plot/issues/99)). Вы можете попытаться нарисовать закрытую фигуру с третьим участком рассеяния, если вам нужно заполнить это пространство. Если вы хотите, чтобы графики рисовались рядом друг с другом, просто дайте те же значения данных по общей секции. –

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