我们正在使用FastReport工具进行报告。 在这个报告中有一个teechart,我们想在一些条形图的最大值上绘制一条线。
我们尝试通过添加新系列来解决问题,但问题是该线路不是从x = 0开始。 我们怎样才能实现从x = 0开始的最大值线(在y轴之后)。
Example with series, not starting at x=0
绘制线条的代码示例:
void __fastcall TFTedPoro::cxButton2Click(TObject *Sender)
{
double XMin, XMax, YVal;
frxReport1->LoadFromFile("porocilo.fr3");
TfrxChartView *cv;
cv = (TfrxChartView *)frxReport1->FindObject("Chart1");
if (cv != NULL)
{
cv->Chart->Series[0]->Marks->Visible = false;
cv->Chart->Series[1]->Marks->Visible = false;
cv->Chart->Series[2]->Marks->Visible = false;
cv->Chart->Series[3]->Marks->Visible = false;
cv->Chart->Series[4]->Marks->Visible = false;
cv->Chart->Series[5]->Marks->Visible = false;
cv->Chart->Series[6]->Marks->Visible = false;
if (max_vred >= 350)
{
cv->Chart->LeftAxis->Maximum = max_vred;
}
}
XMin = cv->Chart->Series[0]->XValues->MinValue;
XMax = cv->Chart->Series[0]->XValues->MaxValue;
YVal = cv->Chart->Series[0]->YValues->MaxValue;
for (int i = 1; i < cv->Chart->SeriesCount()-1;i++)
{
XMin = Min(XMin, cv->Chart->Series[i]->XValues->MinValue);
XMax = Max(XMax, cv->Chart->Series[i]->XValues->MaxValue);
YVal = Max(YVal, cv->Chart->Series[i]->YValues->MaxValue);
}
cv->Chart->Series[8]->AddXY(XMin-1, YVal);
cv->Chart->Series[8]->AddXY(XMax+1, YVal);
cv->Chart->Axes->Bottom->SetMinMax(XMin-0.5, XMax+0.5);
frxReport1->ShowReport(true);
}
答案 0 :(得分:0)
使用功能演示中的示例中的TColorLineTool
:
功能演示附带TeeChart VCL evaluation version:
<强>更新强>
如果您无法访问图表工具,则另一种方法是使用带有两个值的TLineSeries
。
请注意,您可以将其他系列中的第一个XValue
缩小为最小XValue
,将另一个系列中的XValue
设置为大XValue
。然后,您可以手动设置底部轴Minimum
和Maximum
(即通过SetMinMax(min, max)
功能)以仅适合原始系列中的点。
这是一个简单的例子:
uses Series, Math;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
XMin, XMax, YVal: double;
begin
for i:=0 to 7 do
begin
with Chart1.AddSeries(TBarSeries) as TBarSeries do
begin
Marks.Visible:=false;
FillSampleValues();
end;
end;
XMin:=Chart1[0].XValues.MinValue;
XMax:=Chart1[0].XValues.MaxValue;
YVal:=Chart1[0].YValues.MaxValue;
for i:=1 to Chart1.SeriesCount-1 do
begin
XMin:=Min(XMin, Chart1[i].XValues.MinValue);
XMax:=Max(XMax, Chart1[i].XValues.MaxValue);
YVal:=Max(YVal, Chart1[i].YValues.MaxValue);
end;
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
AddXY(XMin-1, YVal);
AddXY(XMax+1, YVal);
end;
Chart1.Axes.Bottom.SetMinMax(XMin-0.5, XMax+0.5);
end;
这就是上面的例子在这里找我的方式:
第三种选择是在OnAfterDraw
手动绘制一条水平线。即:
procedure TForm1.Chart1AfterDraw(Sender: TObject);
var Ythreshold: Double;
tmpY: Integer;
begin
Ythreshold:=Chart1[0].YValues.MaxValue;
tmpY:=Chart1.Axes.Left.CalcPosValue(Ythreshold);
Chart1.Canvas.Pen.Color:=clRed;
Chart1.Canvas.Line(Chart1.Axes.Bottom.IStartPos, tmpY, Chart1.Axes.Bottom.IEndPos, tmpY);
end;