I have a application, that can display charts with data using iOS Charts library v.2.3. Now I must enable the option to track touching points of data on the chart. I do some research and I know, that I must use the chartValueSelected method in class, that implements . I also declare chartView.delegate to self and connect outlet in view on the storyboard. But when I tested it, I always get a signal from the chartValueNothingSelected method, with none from chartValueSelected. It is something, that I should put in my code, that enables tracking touch on points in my application?
Edit: code
#interface ChartViewController () <ChartViewDelegate>
#end
#implementation ChartViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.chartView.delegate = self;
_chartView.dragEnabled = YES;
[_chartView setScaleEnabled:YES];
_chartView.pinchZoomEnabled = YES;
_chartView.drawGridBackgroundEnabled = NO;
// some random data generator
// x-axis limit line
ChartLimitLine *llXAxis = [[ChartLimitLine alloc] initWithLimit:10.0 label:#"Index 10"];
llXAxis.lineWidth = 4.0;
llXAxis.lineDashLengths = #[#(10.f), #(10.f), #(0.f)];
llXAxis.labelPosition = ChartLimitLabelPositionRightBottom;
llXAxis.valueFont = [UIFont systemFontOfSize:10.f];
//[_chartView.xAxis addLimitLine:llXAxis];
_chartView.xAxis.gridLineDashLengths = #[#10.0, #10.0];
_chartView.xAxis.gridLineDashPhase = 0.f;
ChartLimitLine *ll1 = [[ChartLimitLine alloc] initWithLimit:150.0 label:#"Upper Limit"];
ll1.lineWidth = 4.0;
ll1.lineDashLengths = #[#5.f, #5.f];
ll1.labelPosition = ChartLimitLabelPositionRightTop;
ll1.valueFont = [UIFont systemFontOfSize:10.0];
ChartLimitLine *ll2 = [[ChartLimitLine alloc] initWithLimit:-30.0 label:#"Lower Limit"];
ll2.lineWidth = 4.0;
ll2.lineDashLengths = #[#5.f, #5.f];
ll2.labelPosition = ChartLimitLabelPositionRightBottom;
ll2.valueFont = [UIFont systemFontOfSize:10.0];
ChartYAxis *leftAxis = _chartView.leftAxis;
[leftAxis removeAllLimitLines];
[leftAxis addLimitLine:ll1];
[leftAxis addLimitLine:ll2];
leftAxis.gridLineDashLengths = #[#5.f, #5.f];
leftAxis.drawZeroLineEnabled = NO;
leftAxis.drawLimitLinesBehindDataEnabled = YES;
_chartView.rightAxis.enabled = NO;
//[_chartView.viewPortHandler setMaximumScaleY: 2.f];
//[_chartView.viewPortHandler setMaximumScaleX: 2.f];
//_chartView.marker = marker;
_chartView.legend.form = ChartLegendFormLine;
[_chartView animateWithXAxisDuration:2.5];
NSMutableArray *xVals = [[NSMutableArray alloc] init];
for (int i = 0; i < 100; i++)
{
[xVals addObject:[#(i) stringValue]];
}
NSMutableArray *yVals = [[NSMutableArray alloc] init];
for (int i = 0; i < 100; i++)
{
double mult = (1000 + 1);
double val = (double) (arc4random_uniform(mult)) + 3;
[yVals addObject:[[ChartDataEntry alloc] initWithValue:val xIndex:i]];
}
LineChartDataSet *set1 = nil;
if (_chartView.data.dataSetCount > 0)
{
set1 = (LineChartDataSet *)_chartView.data.dataSets[0];
set1.yVals = yVals;
_chartView.data.xValsObjc = xVals;
[_chartView.data notifyDataChanged];
[_chartView notifyDataSetChanged];
}
else
{
set1 = [[LineChartDataSet alloc] initWithYVals:yVals label:#"DataSet 1"];
set1.lineDashLengths = #[#5.f, #2.5f];
set1.highlightLineDashLengths = #[#5.f, #2.5f];
[set1 setColor:UIColor.blackColor];
[set1 setCircleColor:UIColor.blackColor];
set1.lineWidth = 1.0;
set1.circleRadius = 3.0;
set1.drawCircleHoleEnabled = NO;
set1.valueFont = [UIFont systemFontOfSize:9.f];
//set1.fillAlpha = 65/255.0;
//set1.fillColor = UIColor.blackColor;
NSArray *gradientColors = #[
(id)[ChartColorTemplates colorFromString:#"#00ff0000"].CGColor,
(id)[ChartColorTemplates colorFromString:#"#ffff0000"].CGColor
];
CGGradientRef gradient = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil);
set1.fillAlpha = 1.f;
set1.fill = [ChartFill fillWithLinearGradient:gradient angle:90.f];
set1.drawFilledEnabled = YES;
CGGradientRelease(gradient);
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
LineChartData *data = [[LineChartData alloc] initWithXVals:xVals dataSets:dataSets];
_chartView.data = data;
}
}
- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight
{
NSLog(#"chartValueSelected");
}
- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView
{
NSLog(#"chartValueNothingSelected");
}
#end
and from .h file
#import <UIKit/UIKit.h>
#import Charts;
#interface ChartViewController : UIViewController
#property(nonatomic, strong) IBOutlet LineChartView* chartView;
#property (strong, nonatomic) IBOutlet NSLayoutConstraint *chartViewHeightConstraint;
#end
For everyone, who will occurr similar problem to mine. I resolve my problem, cleaning everything, that can be left of old version 2.3 of Charts using CocoaPods tools and later add reference to new 3.0 version. For me, it enabled option to show actually clicked point.
Related
I am using the Charts framework (danielgindi/Charts). My line chart is showing duplicated labels on x-axis, if is there is only one value available on my labels array(xAxisLabels in this case). See image below.
how can I ensure that the labels won't be duplicated? So if there is only one entry available on the labels array then it should display only one label on the left most side. other labels would be blank, which will be gradually filled upon availability on the labels array.
Here is the code that I have tried so far. Thank you very much for your help.
#property (nonatomic) LineChartView* chartView;
#property (strong, nonatomic) NSArray<NSString *> *xAxisLabels;
- (void)configureChartViewIfNeeded {
self.chartView.drawGridBackgroundEnabled = NO;
self.chartView.legend.enabled = NO;
self.chartView.minOffset = 28;
self.chartView.xAxis.enabled = YES;
self.chartView.xAxis.labelPosition = XAxisLabelPositionBottom;
self.chartView.xAxis.labelTextColor = [UIColor colorWithWhite:1 alpha:0.79];
self.chartView.xAxis.gridColor = [UIColor colorWithWhite:1 alpha:0.79];
self.chartView.xAxis.drawAxisLineEnabled = NO;
self.chartView.xAxis.drawGridLinesEnabled = NO;
self.chartView.leftAxis.labelTextColor = [UIColor colorWithWhite:1 alpha:0.79];
self.chartView.leftAxis.gridColor = [UIColor colorWithWhite:1 alpha:0.3];
self.chartView.leftAxis.gridLineWidth = 1.0f;
self.chartView.leftAxis.drawZeroLineEnabled = NO;
self.chartView.leftAxis.drawAxisLineEnabled = NO;
[self.chartView.leftAxis setLabelCount:leftAxisLabelCount force:NO];
self.chartView.leftAxis.drawTopYLabelEntryEnabled = YES;
self.chartView.leftAxis.axisMinimum = 0;
JVNImpactMetricsFormatter *numberFormatter = [[JVNImpactMetricsFormatter alloc] init]; //My custom formatter
[numberFormatter setUsesGroupingSeparator:YES];
[numberFormatter setGroupingSeparator:#","];
[numberFormatter setGroupingSize:3];
numberFormatter.maximumFractionDigits = 1;
self.chartView.xAxis.valueFormatter = numberFormatter; //Will present integer values
self.chartView.rightAxis.enabled = NO;
self.chartView.dragEnabled = NO;
self.chartView.scaleXEnabled = self.chartView.scaleYEnabled = NO;
self.chartView.drawBordersEnabled = NO;
self.chartView.doubleTapToZoomEnabled = NO;
self.chartView.delegate = self;
self.chartView.descriptionText = #"";
[self.chartView animateWithXAxisDuration:0.3 yAxisDuration:0.3];
}
#pragma mark - IChartAxisValueFormatter
- (NSString * _Nonnull)stringForValue:(double)value axis:(ChartAxisBase * _Nullable)axis {
return self.xAxisLabels[[#(value) intValue]];
}
Try using :
self.chartView.xAxis.granularityEnabled = true
I'm using this library to make charts. Everything works fine if there are several bars but when I only have one, it seems that the value cannot be shown. This is the chart if there is only one bar (image)
But when I put two bars the values are visible.
My code is this:
-(void)setupChart{
myQuota = [[DataManager shared] myQuota];
[self setupBarLineChartView:_chartView];
_chartView.delegate = self;
_chartView.drawBarShadowEnabled = NO;
_chartView.drawValueAboveBarEnabled = YES;
_chartView.maxVisibleValueCount = [myQuota.quota doubleValue] * 2;
ChartXAxis *xAxis = _chartView.xAxis;
xAxis.labelPosition = XAxisLabelPositionBottom;
xAxis.labelFont = [UIFont systemFontOfSize:10.f];
xAxis.drawAxisLineEnabled = YES;
xAxis.drawGridLinesEnabled = YES;
xAxis.gridLineWidth = .3;
ChartYAxis *leftAxis = _chartView.leftAxis;
leftAxis.labelFont = [UIFont systemFontOfSize:10.f];
leftAxis.drawAxisLineEnabled = YES;
leftAxis.drawGridLinesEnabled = YES;
leftAxis.drawLabelsEnabled = NO; // don't write label values
leftAxis.gridLineWidth = .3;
leftAxis.axisMinValue = 0.0; // this replaces startAtZero = YES
ChartYAxis *rightAxis = _chartView.rightAxis;
rightAxis.enabled = YES;
rightAxis.labelFont = [UIFont systemFontOfSize:10.f];
rightAxis.drawAxisLineEnabled = YES;
rightAxis.drawGridLinesEnabled = NO;
rightAxis.axisMinValue = 0.0; // this replaces startAtZero = YES
rightAxis.yOffset = 1.0;
rightAxis.axisMaxValue = [myQuota.quota doubleValue] * 2;
[rightAxis removeAllLimitLines];
ChartLimitLine *limit = [[ChartLimitLine alloc] initWithLimit:[myQuota.quota doubleValue] label:[NSString stringWithFormat:#"%d",[myQuota.quota integerValue] ]];
[rightAxis addLimitLine:limit];
rightAxis.valueFormatter = [[NSNumberFormatter alloc] init];
rightAxis.valueFormatter.minimumFractionDigits = 0;
_chartView.doubleTapToZoomEnabled = NO;
_chartView.highlightPerTapEnabled = NO;
_chartView.legend.enabled = NO;
[_chartView animateWithYAxisDuration:1.5];
[self setDataCount:(1) range: ([myQuota.quota doubleValue]*2)];
}
- (void)setDataCount:(int)count range:(double)range
{
NSMutableArray *xVals = [[NSMutableArray alloc] init];
[xVals addObject:myQuota.rowName];
[xVals addObject:myQuota.rowName];
NSMutableArray *yVals = [[NSMutableArray alloc] init];
double val = [myQuota.quotaReached doubleValue];
[yVals addObject:[[BarChartDataEntry alloc] initWithValue:([myQuota.quota doubleValue]*2) xIndex:0]];
BarChartDataSet *set1 = nil;
if (_chartView.data.dataSetCount > 0)
{
set1 = (BarChartDataSet *)_chartView.data.dataSets[0];
set1.yVals = yVals;
_chartView.data.xValsObjc = xVals;
[_chartView notifyDataSetChanged];
}
else
{
set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:#""];
set1.barSpace = 0.35;
set1.colors = [NSArray arrayWithObjects:[UIColor greenColor], nil]; // set color
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets];
[data setValueFont:[UIFont fontWithName:#"HelveticaNeue-Light" size:10.f]];
//_chartView.xAxis.labelPosition = Top
_chartView.data = data;
}
}
I've used the ios-charts project on github and used the HorizontalCharts example. It works good in the example but when I try to set the horizontal bar value, the bar just gets too long. Example visible here:
My code is this:
-(void)setupChart{
myQuota = [[DataManager shared] myQuota];
[self setupBarLineChartView:_chartView];
_chartView.delegate = self;
_chartView.drawBarShadowEnabled = NO;
_chartView.drawValueAboveBarEnabled = YES;
_chartView.maxVisibleValueCount = 60;
ChartXAxis *xAxis = _chartView.xAxis;
xAxis.labelPosition = XAxisLabelPositionBottom;
xAxis.labelFont = [UIFont systemFontOfSize:10.f];
xAxis.drawAxisLineEnabled = YES;
xAxis.drawGridLinesEnabled = YES;
xAxis.gridLineWidth = .3;
ChartYAxis *leftAxis = _chartView.leftAxis;
leftAxis.labelFont = [UIFont systemFontOfSize:10.f];
leftAxis.drawAxisLineEnabled = YES;
leftAxis.drawGridLinesEnabled = YES;
leftAxis.drawLabelsEnabled = NO;
leftAxis.gridLineWidth = .3;
leftAxis.axisMinValue = 0.0;
ChartYAxis *rightAxis = _chartView.rightAxis;
rightAxis.enabled = YES;
rightAxis.labelFont = [UIFont systemFontOfSize:10.f];
rightAxis.drawAxisLineEnabled = YES;
rightAxis.drawGridLinesEnabled = NO;
rightAxis.axisMinValue = 0.0;
rightAxis.yOffset = 1.0;
rightAxis.axisMaxValue = [myQuota.quota doubleValue]; // here is 10
_chartView.doubleTapToZoomEnabled = NO;
_chartView.highlightPerTapEnabled = NO;
_chartView.legend.enabled = NO;
[_chartView animateWithYAxisDuration:2.5];
[self updateChartData];
}
- (void)updateChartData
{
if (self.shouldHideData)
{
_chartView.data = nil;
return;
}
if(myQuota != nil && myQuota.quota != nil)
{
[self setDataCount:(1) range: [myQuota.quota doubleValue]];
}
}
- (void)setDataCount:(int)count range:(double)range
{
NSMutableArray *xVals = [[NSMutableArray alloc] init];
[xVals addObject:myQuota.rowName];
NSMutableArray *yVals = [[NSMutableArray alloc] init];
double val = [myQuota.quotaReached doubleValue]; // here is 2
[yVals addObject:[[BarChartDataEntry alloc] initWithValue:val xIndex:0]];
BarChartDataSet *set1 = nil;
if (_chartView.data.dataSetCount > 0)
{
set1 = (BarChartDataSet *)_chartView.data.dataSets[0];
set1.yVals = yVals;
_chartView.data.xValsObjc = xVals;
[_chartView notifyDataSetChanged];
}
else
{
set1 = [[BarChartDataSet alloc] initWithYVals:yVals label:#""];
set1.barSpace = 0.35;
set1.colors = [NSArray arrayWithObjects:[UIColor greenColor], nil];
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets];
[data setValueFont:[UIFont fontWithName:#"HelveticaNeue-Light" size:10.f]];
_chartView.data = data;
}
}
Why is the bar so long?
Okay, since nobody offered an answer I tried a HACK. I've added an invisible bar/row for which I set the value to the maximum of the bar chart. This way the axis shows the maximum even though the bar is invisible.
I welcome anybody who knows a better way but until then I'll do it like this:
- (void)setDataCount:(int)count range:(double)range{
MY_MAX_VALUE = 10; // put HERE your MAX value for the axis
NSMutableArray *xVals = [[NSMutableArray alloc] init];
[xVals addObject:myQuota.rowName];
NSMutableArray *yVals = [[NSMutableArray alloc] init];
double val = [myQuota.quotaReached doubleValue]; // here is 2
[yVals addObject:[[BarChartDataEntry alloc] initWithValue:val xIndex:0]];
[yVals addObject:[[BarChartDataEntry alloc] initWithValue: MY_MAX_VALUE xIndex:1]];
}
These two radar charts have the same data points for the orange bit, but different for the gray. However, as you can see it is autoscaling, and the orange bit ends up bigger on the second chart, even though they are the same exact data points. Is there a way to turn autoscaling off? I would like 100% to go right to the edge of the chart also.
-(void)setupRadarChart
{
self.radarChart.descriptionText = #"";
self.radarChart.webLineWidth = .75;
self.radarChart.innerWebLineWidth = 0.375;
self.radarChart.webAlpha = 1.0;
self.radarChart.userInteractionEnabled = NO;
self.radarChart.xAxis.enabled = YES;
ChartYAxis *yAxis = self.radarChart.yAxis;
yAxis.enabled = NO;
ChartLegend *l = self.radarChart.legend;
l.position = ChartLegendPositionBelowChartLeft;
l.font = [UIFont systemFontOfSize:UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 12 : (headerWidth/40)];
[self setRadarData];
}
- (void)setRadarData
{
NSMutableArray *parties = [[NSMutableArray alloc] init];
for (PillarModel *m in [DataManager sharedData].pillars)
{
[parties addObject:m.abbreviation];
}
NSMutableArray *yVals2 = [[NSMutableArray alloc] init];
NSMutableArray *benchMark = [[NSMutableArray alloc] init];
BOOL shouldAdd = YES;
for (PillarModel *pillar in [DataManager sharedData].pillars)
{ int totalPillarScore = (int)[[DataManager sharedData] getTotalScorePossible:[[DataManager sharedData] getIndividualQuestionResultsForPillar:pillar.pillarId]];
if ((isCompany ? [[DataManager sharedData] getCompanyScoresForCategory:pillar] : [[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId]) != 0)
{
shouldAdd = NO;
}
if (pillar.pillarId == numberOfPillars -1 && shouldAdd) {
[yVals2 addObject:[[ChartDataEntry alloc] initWithValue:0.01 xIndex:pillar.pillarId]];
}
else{
double val = (isCompany ? (double)[[DataManager sharedData] getCompanyScoresForCategory:pillar]/totalPillarScore : (double)[[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId] / totalPillarScore);
[yVals2 addObject:[[ChartDataEntry alloc] initWithValue:val xIndex:pillar.pillarId]];
}
float pillarBenchMark = [[[[[DataManager sharedData].benchmarkJSONDict objectForKey:hightlightedView.lowercaseString] objectForKey:pillar.title] objectForKey:#"pillar"] intValue];
float ifNoBenchMarkThanCompanyScore = (pillarBenchMark ? pillarBenchMark : (isCompany ? [[DataManager sharedData] getIndividualScoreForCategory:pillar.pillarId]: [[DataManager sharedData] getCompanyScoresForCategory:pillar]));
[benchMark addObject:[[ChartDataEntry alloc] initWithValue:ifNoBenchMarkThanCompanyScore/totalPillarScore xIndex:pillar.pillarId]];
}
NSMutableArray *xVals = [[NSMutableArray alloc] init];
for (int i = 0; i < numberOfPillars; i++)
{
[xVals addObject:parties[i % parties.count]];
}
NSString *label = (isCompany ? #"Company score" : #"Your score");
RadarChartDataSet *set2 = [[RadarChartDataSet alloc] initWithYVals:yVals2 label:label];
[set2 setColor:[DataManager sharedData].mainColor];
set2.drawFilledEnabled = YES;
set2.fillAlpha = 1.0f;
set2.lineWidth = 2.0;
RadarChartDataSet *benchMarkSet = [[RadarChartDataSet alloc] initWithYVals:benchMark label:#"Benchmark"];
[benchMarkSet setColor:[UIColor colorWithRed:125/255.0f green:125/255.0f blue:125/255.0f alpha:0.6f]];
benchMarkSet.drawFilledEnabled = YES;
benchMarkSet.fillAlpha = 0.0f;
benchMarkSet.lineWidth = 2.0;
benchMarkSet.highlightLineDashLengths = #[[NSNumber numberWithInt:2]];
benchMarkSet.highlightLineDashPhase = 2;
RadarChartData *data = [[RadarChartData alloc] initWithXVals:xVals dataSets:#[set2, benchMarkSet]];
[data setValueFont:[UIFont fontWithName:#"HelveticaNeue-Light" size:8.f]];
[data setDrawValues:NO];
self.radarChart.data = data;
}
The answer that was posted by 孙博弘 wasn't correct, but it led me to realise how easy this was to solve. This solves both the autoscaling problem and also now reaches the edge.
self.radarChart.yAxis.customAxisMin = 0;
self.radarChart.yAxis.customAxisMax = 1;
i'm afraid that you shouln't use customAxisMax directly as it use a Internal Access Levels.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html
/// Flag indicating that the axis-max value has been customized
internal var _customAxisMax: Bool = false
Instead, you can use axisMaxValue to control it.
/// The maximum value for this axis.
/// If set, this value will not be calculated automatically depending on the provided data.
/// Use `resetCustomAxisMin()` to undo this.
public var axisMaxValue: Double
{
get
{
return _axisMaximum
}
set
{
_customAxisMax = true
_axisMaximum = newValue
}
}
//2016-06-12 update
public var factor: CGFloat
{
let content = _viewPortHandler.contentRect
return min(content.width / 2.0, content.height / 2.0)
/ CGFloat(_yAxis.axisRange)
}
RadarChartView will calculator a factor to transform values into pixels.
Maybe,you can use axisMinValue and axisMaxValue to control autoscale.
I have a problem with my code, core plot gives a SIGBRT.
can someone help me ?
Thanks..
header:
#interface CorePLotTestAppDelegate : NSObject <CPPlotDataSource>
{
IBOutlet CPLayerHostingView *view;
CPXYGraph *graph;
NSMutableArray *xvalues;
NSMutableArray *yvalues;
}
-(void)clear;
-(void)addPointFloat:(float)x y:(float)y;
-(void)addPointNumber:(NSNumber*)x y:(NSNumber*)y;
// CPPlotDataSource protocol:
-(NSUInteger)numberOfRecordsForPlot:(CPPlot*)plot;
-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum
recordIndex:(NSUInteger)index;
main:
#implementation CorePLotTestAppDelegate
-(id)init
{
if ([super init]) {
xvalues = [[NSMutableArray alloc] init];
yvalues = [[NSMutableArray alloc] init];
}
return self;
}
-(void)dealloc
{
[xvalues release];
[yvalues release];
[graph release];
[super dealloc];
}
-(void)clear
{
[xvalues removeAllObjects];
[yvalues removeAllObjects];
}
-(void)addPointFloat:(float)x y:(float)y
{
[xvalues addObject:[NSNumber numberWithFloat:x]];
[yvalues addObject:[NSNumber numberWithFloat:y]];
}
-(void)addPointNumber:(NSNumber*)x y:(NSNumber*)y
{
[xvalues addObject:x];
[yvalues addObject:y];
}
-(NSUInteger)numberOfRecordsForPlot:(CPPlot*)plot
{
return [xvalues count];
}
-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum
recordIndex:(NSUInteger)index
{
if (fieldEnum == CPScatterPlotFieldX)
return [xvalues objectAtIndex:index];
else
return [yvalues objectAtIndex:index];
}
- (void) awakeFromNib
{
//Daten YAchse
NSString *filePath = #"pegel";//file path...
NSString *fileRoot = [[NSBundle mainBundle] pathForResource:filePath ofType:#"txt"];
// read everything from text
NSString *fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil];
// first, separate by new line
NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
// then break down even further
NSString *strsInOneLine;
int d;
for (d=0; d < [allLinedStrings count]; d=d+1) {
strsInOneLine = [allLinedStrings objectAtIndex:d];
// choose whatever input identity you have decided. in this case ;
NSArray *workingArray = [strsInOneLine componentsSeparatedByString:#";"];
NSMutableArray *pegel = [workingArray lastObject];
yvalues = pegel;
xvalues = pegel;
NSLog(#"%#", pegel);
}
// Create graph and set a theme
graph = [[CPXYGraph alloc] initWithFrame:CGRectZero];
CPTheme *theme = [CPTheme themeNamed:kCPDarkGradientTheme];
[graph applyTheme:theme];
view.hostedLayer = graph;
// Setup plot space
CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-3) length:CPDecimalFromFloat(20.0)];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(-3.5) length:CPDecimalFromFloat(10.0)];
// ScatterPlot
CPScatterPlot *linePlot = [[[CPScatterPlot alloc] init] autorelease];
linePlot.identifier = #"LinienDiagramm";
linePlot.dataLineStyle.lineWidth = 3.f;
linePlot.dataLineStyle.lineColor = [CPColor blueColor];
linePlot.dataSource = self;
[graph addPlot: linePlot];
// linien effekt
CPGradient *areaGradient =
[CPGradient gradientWithBeginningColor:[CPColor blueColor]
endingColor:[CPColor blackColor]];
areaGradient.angle = -90.0f;
linePlot.areaFill = [CPFill fillWithGradient:areaGradient];
linePlot.areaBaseValue = CPDecimalFromString(#"0");
// X und Y achse einstellungen
CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;
CPXYAxis *x = axisSet.xAxis;
CPXYAxis *y = axisSet.yAxis;
// x-achse
x.minorTicksPerInterval = 5;
x.minorTickLength = 2.0f;
x.majorTickLength = 7.0f;
x.labelOffset = 2.0f;
x.labelRotation = 45;
x.majorIntervalLength = CPDecimalFromFloat(5.0f);
// y-achse
y.minorTicksPerInterval = 5;
y.minorTickLength = 2.0f;
y.majorTickLength = 7.0f;
y.labelOffset = 5.0f;
y.majorIntervalLength = CPDecimalFromFloat(5.0f);
NSLog(#"%#", graph);
}
In -awakeFromNib, you're setting xvalues and yvalues to the object retrieved from workingArray. You're leaking the original value arrays, you're setting both xvalues and yvalues to the same object, and--just guessing without seeing the actual error message--the new object is not an array.