在我的目标c项目中,我需要将MPChart从2.2迁移到3.0,以便在Xcode 9.2中支持我的项目。但总和代码现在改变了。
xAxis.valueFormatter = self;
- (void)setDataCount:(int)count range:(double)range
{
xVals = [[NSMutableArray alloc] init];
for (int i = 0; i < dateAll.count; i++)
{
[xVals addObject:[dateAll objectAtIndex:i]];
}
NSLog(@"xVals %@",xVals);
NSMutableArray *yVals = [[NSMutableArray alloc] init];
for (int i = 0; i < arrtymHr.count; i++)
{
double vals = [[NSString stringWithFormat:@"%@.%@",[arrtymHr objectAtIndex:i],[arrtymMnt objectAtIndex:i]] doubleValue];
[yVals addObject:[[ChartDataEntry alloc] initWithX:i y:vals]];
}
NSLog(@"yVals %@",yVals);
LineChartDataSet *set1 = [[LineChartDataSet alloc] initWithValues:yVals label:@"DataSet 1"];
set1.axisDependency = AxisDependencyRight;
[set1 setColor:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]];
[set1 setCircleColor:[UIColor clearColor]];
set1.lineWidth = 2.0;
set1.circleRadius = 3.0;
set1.fillAlpha = 0.70;
set1.fillColor = [UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f];
set1.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f];
set1.drawCircleHoleEnabled = YES;
set1.drawFilledEnabled = !set1.isDrawFilledEnabled;
NSMutableArray *yVals2 = [[NSMutableArray alloc] init];
for (int i = 0; i < Allpost.count; i++)
{
double vals = [[Allpost objectAtIndex:i]doubleValue];
[yVals2 addObject:[[ChartDataEntry alloc] initWithX:i y:vals]];
}
NSLog(@"yVals 2 %@",yVals2);
LineChartDataSet *set2 = [[LineChartDataSet alloc] initWithValues:yVals2 label:@"DataSet 2"];
set2.axisDependency = AxisDependencyLeft;
[set2 setColor:[UIColor colorWithRed:245/255.f green:130/255.f blue:32/255.f alpha:1.f]];
[set2 setCircleColor:[UIColor clearColor]];
set2.lineWidth = 3.0;
set2.circleRadius = 3.0;
set2.fillAlpha = 1.0;
set2.fillColor = UIColor.redColor;
set2.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f];
set2.drawCircleHoleEnabled = YES;
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
[dataSets addObject:set2];
LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];
[data setValueTextColor:[UIColor clearColor]];
[data setValueFont:[UIFont systemFontOfSize:9.f]];
_chartView.data = data;
}
- (NSString *)stringForValue:(double)value
axis:(ChartAxisBase *)axis
{
return [xVals objectAtIndex:value];
}
但问题是数组只有一个值,但它显示多个。
印刷阵列
xVals (
"03/08",
"03/16",
"03/16",
"03/16"
)
yVals (
"ChartDataEntry, x: 0.0, y 0.0",
"ChartDataEntry, x: 1.0, y 0.0",
"ChartDataEntry, x: 2.0, y 0.0",
"ChartDataEntry, x: 3.0, y 0.0"
)
yVals 2 (
"ChartDataEntry, x: 0.0, y 5.5",
"ChartDataEntry, x: 1.0, y 7.0",
"ChartDataEntry, x: 2.0, y 7.0",
"ChartDataEntry, x: 3.0, y 3.0"
)
答案 0 :(得分:0)
根据新的图表更新,您需要创建ChartDataEntry
,您可以在其中添加 X &amp; Y 值,然后将其添加到LineChartDataSet
请检查以下代码:
//Create values array
NSMutableArray *values = [[NSMutableArray alloc] init];
//Create
[yValArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[values addObject:[[ChartDataEntry alloc] initWithX:idx y:obj];
}];
在上面的代码中,我们在DataEntry形式0 .... N。
中添加索引
//Add dataEntry Object into values array
[values addObject:dataEntry];
//Create DataSet with values array
LineChartDataSet *set1 = [[LineChartDataSet alloc] initWithValues:values label:@"your_label_for_data_set"];
//Add Line Chart Data inro Chart.
LineChartData *data = [[LineChartData alloc] initWithDataSet:set1];
//Set Data to Line Chart
_lineChartTrend.data = data;
现在使用您的Formatter并根据索引返回值,如下所示
- (NSString *)stringForValue:(double)value
axis:(ChartAxisBase *)axis
{
if (yourLineChart.xAxis == axis) {
return [xValArray objectAtIndex:value];
}
}
其中value是我们在DataEntry中添加的索引。
通过这样做,你将得到你的X&amp;您的折线图上的Y值。
修改强>
根据您的评论和问题更新,您需要为XAxis添加一个属性,以便它不会重复XAxis值,并且将保持与您的数组相同,设置在代码下方,您将获得图表上的预期输出。
ChartXAxis *xAxis = self.lineChart.xAxis;
xAxis.granularity = 1.0;
试试这个,让我知道它是否有效。
答案 1 :(得分:0)
试试这个
@interface ViewController ()<IChartAxisValueFormatter>
viewDidLoad中
xAxis.axisRange = 1;
xAxis.granularity = 1;
xAxis.valueFormatter =self;
#pragma mark - IAxisValueFormatter
- (NSString * _Nonnull)stringForValue:(double)value axis:(ChartAxisBase * _Nullable)axis
{
NSString *xAxisStringValue = @"";
int myInt = (int)value;
if(xVals.count > myInt)
{
xAxisStringValue = [xVals objectAtIndex:myInt];
return xAxisStringValue;
}
else
{
return 0;
}
}