Adding Scatter Graph to PNCHart
* this is compatible with new release. * because of your huge change, I had to change the position of my codes from viewController to tableViewController. * minor changing and improvement.
Showing
5 changed files
with
62 additions
and
68 deletions
| @@ -56,4 +56,10 @@ | @@ -56,4 +56,10 @@ | ||
| 56 | - (void) setup; | 56 | - (void) setup; |
| 57 | - (void) drawLineFromPoint : (CGPoint) startPoint ToPoint : (CGPoint) endPoint WithLineWith : (CGFloat) lineWidth AndWithColor : (UIColor*) color; | 57 | - (void) drawLineFromPoint : (CGPoint) startPoint ToPoint : (CGPoint) endPoint WithLineWith : (CGFloat) lineWidth AndWithColor : (UIColor*) color; |
| 58 | 58 | ||
| 59 | +/** | ||
| 60 | + * Update Chart Value | ||
| 61 | + */ | ||
| 62 | + | ||
| 63 | +- (void)updateChartData:(NSArray *)data; | ||
| 64 | + | ||
| 59 | @end | 65 | @end |
This diff is collapsed. Click to expand it.
| @@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
| 16 | @property (nonatomic) PNBarChart * barChart; | 16 | @property (nonatomic) PNBarChart * barChart; |
| 17 | @property (nonatomic) PNCircleChart * circleChart; | 17 | @property (nonatomic) PNCircleChart * circleChart; |
| 18 | @property (nonatomic) PNPieChart *pieChart; | 18 | @property (nonatomic) PNPieChart *pieChart; |
| 19 | +@property (nonatomic) PNScatterChart *scatterChart; | ||
| 19 | 20 | ||
| 20 | @property (weak, nonatomic) IBOutlet UILabel *titleLabel; | 21 | @property (weak, nonatomic) IBOutlet UILabel *titleLabel; |
| 21 | 22 |
| @@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
| 7 | // | 7 | // |
| 8 | 8 | ||
| 9 | #import "PCChartViewController.h" | 9 | #import "PCChartViewController.h" |
| 10 | +#define ARC4RANDOM_MAX 0x100000000 | ||
| 10 | 11 | ||
| 11 | @implementation PCChartViewController | 12 | @implementation PCChartViewController |
| 12 | 13 | ||
| @@ -120,6 +121,41 @@ | @@ -120,6 +121,41 @@ | ||
| 120 | [self.view addSubview:self.pieChart]; | 121 | [self.view addSubview:self.pieChart]; |
| 121 | self.changeValueButton.hidden = YES; | 122 | self.changeValueButton.hidden = YES; |
| 122 | } | 123 | } |
| 124 | + else if ([self.title isEqualToString:@"Scatter Chart"]) | ||
| 125 | + { | ||
| 126 | + self.titleLabel.text = @"Scatter Chart"; | ||
| 127 | + | ||
| 128 | + self.scatterChart = [[PNScatterChart alloc] initWithFrame:CGRectMake(SCREEN_WIDTH /6.0 - 30, 135, 280, 200)]; | ||
| 129 | + [self.scatterChart setAxisXWithMinimumValue:20 andMaxValue:100 toTicks:6]; | ||
| 130 | + [self.scatterChart setAxisYWithMinimumValue:30 andMaxValue:50 toTicks:5]; | ||
| 131 | + | ||
| 132 | + NSArray * data01Array = [self randomSetOfObjects]; | ||
| 133 | + PNScatterChartData *data01 = [PNScatterChartData new]; | ||
| 134 | + data01.strokeColor = PNGreen; | ||
| 135 | + data01.fillColor = PNFreshGreen; | ||
| 136 | + data01.size = 2; | ||
| 137 | + data01.itemCount = [[data01Array objectAtIndex:0] count]; | ||
| 138 | + data01.inflexionPointStyle = PNScatterChartPointStyleCircle; | ||
| 139 | + __block NSMutableArray *XAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:0]]; | ||
| 140 | + __block NSMutableArray *YAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:1]]; | ||
| 141 | + data01.getData = ^(NSUInteger index) { | ||
| 142 | + CGFloat xValue = [[XAr1 objectAtIndex:index] floatValue]; | ||
| 143 | + CGFloat yValue = [[YAr1 objectAtIndex:index] floatValue]; | ||
| 144 | + return [PNScatterChartDataItem dataItemWithX:xValue AndWithY:yValue]; | ||
| 145 | + }; | ||
| 146 | + | ||
| 147 | + [self.scatterChart setup]; | ||
| 148 | + self.scatterChart.chartData = @[data01]; | ||
| 149 | +/*** | ||
| 150 | + this is for drawing line to compare | ||
| 151 | + CGPoint start = CGPointMake(20, 35); | ||
| 152 | + CGPoint end = CGPointMake(80, 45); | ||
| 153 | + [self.scatterChart drawLineFromPoint:start ToPoint:end WithLineWith:2 AndWithColor:PNBlack]; | ||
| 154 | +***/ | ||
| 155 | + self.scatterChart.delegate = self; | ||
| 156 | + self.changeValueButton.hidden = YES; | ||
| 157 | + [self.view addSubview:self.scatterChart]; | ||
| 158 | + } | ||
| 123 | } | 159 | } |
| 124 | 160 | ||
| 125 | 161 | ||
| @@ -171,6 +207,10 @@ | @@ -171,6 +207,10 @@ | ||
| 171 | { | 207 | { |
| 172 | [self.circleChart updateChartByCurrent:@(arc4random() % 100)]; | 208 | [self.circleChart updateChartByCurrent:@(arc4random() % 100)]; |
| 173 | } | 209 | } |
| 210 | + else if ([self.title isEqualToString:@"Scatter Chart"]) | ||
| 211 | + { | ||
| 212 | + // will be code soon. | ||
| 213 | + } | ||
| 174 | 214 | ||
| 175 | } | 215 | } |
| 176 | 216 | ||
| @@ -195,4 +235,19 @@ | @@ -195,4 +235,19 @@ | ||
| 195 | [bar.layer addAnimation:animation forKey:@"Float"]; | 235 | [bar.layer addAnimation:animation forKey:@"Float"]; |
| 196 | } | 236 | } |
| 197 | 237 | ||
| 238 | +/* this function is used only for creating random points */ | ||
| 239 | +- (NSArray *) randomSetOfObjects{ | ||
| 240 | + NSMutableArray *array = [NSMutableArray array]; | ||
| 241 | + NSString *LabelFormat = @"%1.f"; | ||
| 242 | + NSMutableArray *XAr = [NSMutableArray array]; | ||
| 243 | + NSMutableArray *YAr = [NSMutableArray array]; | ||
| 244 | + for (int i = 0; i < 25 ; i++) { | ||
| 245 | + [XAr addObject:[NSString stringWithFormat:LabelFormat,(((double)arc4random() / ARC4RANDOM_MAX) * (self.scatterChart.AxisX_maxValue - self.scatterChart.AxisX_minValue) + self.scatterChart.AxisX_minValue)]]; | ||
| 246 | + [YAr addObject:[NSString stringWithFormat:LabelFormat,(((double)arc4random() / ARC4RANDOM_MAX) * (self.scatterChart.AxisY_maxValue - self.scatterChart.AxisY_minValue) + self.scatterChart.AxisY_minValue)]]; | ||
| 247 | + } | ||
| 248 | + [array addObject:XAr]; | ||
| 249 | + [array addObject:YAr]; | ||
| 250 | + return (NSArray*) array; | ||
| 251 | +} | ||
| 252 | + | ||
| 198 | @end | 253 | @end |
| @@ -7,7 +7,6 @@ | @@ -7,7 +7,6 @@ | ||
| 7 | // | 7 | // |
| 8 | 8 | ||
| 9 | #import "PCChartsTableViewController.h" | 9 | #import "PCChartsTableViewController.h" |
| 10 | -#define ARC4RANDOM_MAX 0x100000000 | ||
| 11 | 10 | ||
| 12 | @implementation PCChartsTableViewController | 11 | @implementation PCChartsTableViewController |
| 13 | 12 | ||
| @@ -44,76 +43,9 @@ | @@ -44,76 +43,9 @@ | ||
| 44 | } else if ([segue.identifier isEqualToString:@"scatterChart"]) | 43 | } else if ([segue.identifier isEqualToString:@"scatterChart"]) |
| 45 | { | 44 | { |
| 46 | //Add scatter chart | 45 | //Add scatter chart |
| 47 | - UILabel * scatterChartLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 90, SCREEN_WIDTH, 30)]; | ||
| 48 | - scatterChartLabel.text = @"Scatter Chart"; | ||
| 49 | - scatterChartLabel.textColor = PNFreshGreen; | ||
| 50 | - scatterChartLabel.font = [UIFont fontWithName:@"Avenir-Medium" size:23.0]; | ||
| 51 | - scatterChartLabel.textAlignment = NSTextAlignmentCenter; | ||
| 52 | 46 | ||
| 53 | - PNScatterChart *scatterChart = [[PNScatterChart alloc] initWithFrame:CGRectMake(0, 0, 280, 200)]; | ||
| 54 | - [scatterChart setAxisXWithMinimumValue:20 andMaxValue:100 toTicks:6]; | ||
| 55 | - [scatterChart setAxisYWithMinimumValue:30 andMaxValue:50 toTicks:5]; | ||
| 56 | - | ||
| 57 | - NSArray * data01Array = [self randomSetOfObjectsForScatterChart:scatterChart]; | ||
| 58 | - PNScatterChartData *data01 = [PNScatterChartData new]; | ||
| 59 | - data01.strokeColor = PNGreen; | ||
| 60 | - data01.fillColor = PNFreshGreen; | ||
| 61 | - data01.size = 2; | ||
| 62 | - data01.itemCount = [[data01Array objectAtIndex:0] count]; | ||
| 63 | - data01.inflexionPointStyle = PNScatterChartPointStyleCircle; | ||
| 64 | - __block NSMutableArray *XAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:0]]; | ||
| 65 | - __block NSMutableArray *YAr1 = [NSMutableArray arrayWithArray:[data01Array objectAtIndex:1]]; | ||
| 66 | - data01.getData = ^(NSUInteger index) { | ||
| 67 | - CGFloat xValue = [[XAr1 objectAtIndex:index] floatValue]; | ||
| 68 | - CGFloat yValue = [[YAr1 objectAtIndex:index] floatValue]; | ||
| 69 | - return [PNScatterChartDataItem dataItemWithX:xValue AndWithY:yValue]; | ||
| 70 | - }; | ||
| 71 | - | ||
| 72 | - NSArray * data02Array = [self randomSetOfObjectsForScatterChart:scatterChart]; | ||
| 73 | - PNScatterChartData *data02 = [PNScatterChartData new]; | ||
| 74 | - data02.strokeColor = PNBlue; | ||
| 75 | - data02.fillColor = PNBlue; | ||
| 76 | - data02.size = 2; | ||
| 77 | - data02.itemCount = [[data02Array objectAtIndex:0] count]; | ||
| 78 | - data02.inflexionPointStyle = PNScatterChartPointStyleCircle; | ||
| 79 | - __block NSMutableArray *XAr2 = [NSMutableArray arrayWithArray:[data02Array objectAtIndex:0]]; | ||
| 80 | - __block NSMutableArray *YAr2 = [NSMutableArray arrayWithArray:[data02Array objectAtIndex:1]]; | ||
| 81 | - data02.getData = ^(NSUInteger index) { | ||
| 82 | - CGFloat xValue = [[XAr2 objectAtIndex:index] floatValue]; | ||
| 83 | - CGFloat yValue = [[YAr2 objectAtIndex:index] floatValue]; | ||
| 84 | - return [PNScatterChartDataItem dataItemWithX:xValue AndWithY:yValue]; | ||
| 85 | - }; | ||
| 86 | - | ||
| 87 | - [scatterChart setup]; | ||
| 88 | - scatterChart.chartData = @[data01 , data02]; | ||
| 89 | - | ||
| 90 | - // this is for drawing line to compare | ||
| 91 | - CGPoint start = CGPointMake(20, 35); | ||
| 92 | - CGPoint end = CGPointMake(80, 45); | ||
| 93 | - [scatterChart drawLineFromPoint:start ToPoint:end WithLineWith:2 AndWithColor:PNBlack]; | ||
| 94 | - | ||
| 95 | - scatterChart.delegate = self; | ||
| 96 | - [viewController.view addSubview:scatterChartLabel]; | ||
| 97 | - [viewController.view addSubview:scatterChart]; | ||
| 98 | viewController.title = @"Scatter Chart"; | 47 | viewController.title = @"Scatter Chart"; |
| 99 | } | 48 | } |
| 100 | } | 49 | } |
| 101 | 50 | ||
| 102 | -/* this function is used only for creating random points */ | ||
| 103 | -- (NSArray *) randomSetOfObjectsForScatterChart:(PNScatterChart *)chart{ | ||
| 104 | - NSMutableArray *array = [NSMutableArray array]; | ||
| 105 | - NSString *LabelFormat = @"%1.f"; | ||
| 106 | - NSMutableArray *XAr = [NSMutableArray array]; | ||
| 107 | - NSMutableArray *YAr = [NSMutableArray array]; | ||
| 108 | - for (int i = 0; i < 25 ; i++) { | ||
| 109 | - [XAr addObject:[NSString stringWithFormat:LabelFormat,(((double)arc4random() / ARC4RANDOM_MAX) * (chart.AxisX_maxValue - chart.AxisX_minValue) + chart.AxisX_minValue)]]; | ||
| 110 | - [YAr addObject:[NSString stringWithFormat:LabelFormat,(((double)arc4random() / ARC4RANDOM_MAX) * (chart.AxisY_maxValue - chart.AxisY_minValue) + chart.AxisY_minValue)]]; | ||
| 111 | - } | ||
| 112 | - [array addObject:XAr]; | ||
| 113 | - [array addObject:YAr]; | ||
| 114 | - return (NSArray*) array; | ||
| 115 | -} | ||
| 116 | - | ||
| 117 | - | ||
| 118 | - | ||
| 119 | @end | 51 | @end |
-
Please register or login to post a comment