全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2122
推到 Plurk!
推到 Facebook!

tchart 的x軸文字之問題

尚未結案
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-24 14:20:48 IP:221.169.xxx.xxx 未訂閱
如圖所示,我要如何將x軸的數字 顯示的間格 由2縮成1 變成 0 1 2 3 4 5 ..................
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-24 15:40:11 IP:221.169.xxx.xxx 未訂閱
這是另一種Series(TStatProbSeries) 如圖所圈之處 如何將 1 1 1 1 1 1 改成 一般 的 1 2 3 4 5 ..........
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-24 16:57:24 IP:221.169.xxx.xxx 未訂閱
如圖所示,我的資料 如何 跳過0 與 6 也就是x為0及6時,不畫點 因為使用.vec --------------- 10*1 0 0 2 1 3 2 5 3 10 4 8 5 9 6 10 7 5 8 7 9 6 10 2 0及6都要輸入資料 輸入為0時,線又會畫到bottom
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-25 11:45:34 IP:221.169.xxx.xxx 未訂閱
引言: 這是另一種Series(TStatProbSeries) 如圖所圈之處 如何將 1 1 1 1 1 1 改成 一般 的 1 2 3 4 5 ..........
請參考它所附的Source
procedure TStatProbSeries.OnGetLabel(Sender: TChartAxis; Series: TChartSeries;
  ValueIndex: Integer; var LabelText: String);
var tmp : Double;
    tmpSt : String;
begin
    if (Sender = GetVertAxis) and (FProbSeriesType <> stQQSeries) then
    try
      tmpSt := LabelText;
      While Pos(ThousandSeparator,tmpSt)>0 do System.Delete(tmpSt,Pos(ThousandSeparator,tmpSt),1);
      tmp:=StrToFloat(tmpSt);
      Case FProbSeriesType of
        stNormalSeries : tmp := NormalCDF(tmp,0,1);
        stWeibullSeries : tmp := 1.0 - 1.0/(Exp(Exp(tmp)));
      end;
      LabelText:=FormatFloat(Sender.AxisValuesFormat,tmp);
    except
      on EConvertError do ;
    end;
end;
在TStatProbSeries.ProbSeriesType in [stNormalSeries,stWeibullSeries]時, 左邊的Label為0~1,如果你的數值超過則都顯示1。 還有另一種stQQSeries則是可以顯示超出0~1。
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-25 11:59:44 IP:221.169.xxx.xxx 未訂閱
請教一下那條 slope pen為何執行時會 沒有看到
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-25 12:35:26 IP:221.169.xxx.xxx 未訂閱
有辦法可以更換它的OnGetLabel 嗎?
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-25 13:57:01 IP:221.169.xxx.xxx 未訂閱
引言: 如圖所示,我要如何將x軸的數字 顯示的間格 由2縮成1 變成 0 1 2 3 4 5 ..................
TChartAxis.LabelsSeparation 該屬性Help
property LabelsSeparation: Integer;    Unit
TeEngine    Description
Default Value: 10    The LabelsSeparation property specifies the percent amount of minimum distance between Axis Labels.    Setting it to "0" zero makes TChartAxis skip calculating overlapping labels. (No clipping is performed).    Labels visibility depends also on LabelsFont size, LabelsAngle and Axis Increment properties.
如下圖所示將Min Separation設為0
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-25 14:13:07 IP:221.169.xxx.xxx 未訂閱
StrongLemon兄 你好: 我照你的方法改變,反而變的更奇怪(如圖)
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-25 14:18:30 IP:221.169.xxx.xxx 未訂閱
引言: 請教一下那條 slope pen為何執行時會 沒有看到
procedure TfrmQQPlot.Recalc;
begin
  //計算回歸曲線
  StatQQPlot(XData,YData,X,Y,MinX,MaxX,MinY,MaxY,false,false);
  ProbSeries.MinX := MinX;
  ProbSeries.MaxX := MaxX;
  ProbSeries.MinY := MinY;
  ProbSeries.MaxY := MaxY;
  //畫點
  DrawValues(X,Y,ProbSeries);
end;    //Source
procedure TStatProbSeries.DoAfterDrawValues;
var P1,P2: TPoint;
begin
  if (FSlopePen.Visible) then
  begin
    P1.x := CalcXPosValue(minX);
    P1.y := CalcYPosValue(minY);
    P2.x := CalcXPosValue(maxX);
    P2.y := CalcYPosValue(maxY);
    With ParentChart,ParentChart.Canvas do
    begin
      Brush.Style := bsClear;
      AssignVisiblePen(FSlopePen);
      ClipRectangle(ChartRect);
      MoveTo(P1.x,P1.y);
      LineTo(P2.x,P2.y);
      UnClipRectangle;
    end;
  end;
  inherited DoAfterDrawValues;
end;
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-25 14:50:46 IP:221.169.xxx.xxx 未訂閱
引言: 如圖所示,我的資料 如何 跳過0 與 6 也就是x為0及6時,不畫點 因為使用.vec --------------- 10*1 0 0 2 1 3 2 5 3 10 4 8 5 9 6 10 7 5 8 7 9 6 10 2 0及6都要輸入資料 輸入為0時,線又會畫到bottom
1.不畫的點應該在載入資料時就要把它濾掉 2.或者TChartSeries.ValuesList中新增刪除, 用另一個TChartValueLists or TList物件 把刪除的紀錄起來以便復原。
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-05-25 15:02:56 IP:221.169.xxx.xxx 未訂閱
你好: 我宣告了XData及YData MinX ........ private CtData,TdData,HtData,PtData,XData,YData: TVec; MinX,MinY,MaxX,MaxY:integer; 並且對程式寫了 //散佈圖 XData:=Tvec.Create; YData:=Tvec.Create; try XData.LoadFromFile('Dt_x.vec'); except end; try YData.LoadFromFile('Dt_y.vec'); except end; MinX:=1; MaxX:=9; MinY:=1; MaxY:=12; //計算回歸曲線 StatQQPlot(XData,YData,x,y,MinX,MaxX,MinY,MaxY,false,false); DtSeries.MinX := MinX; DtSeries.MaxX := MaxX; DtSeries.MinY := MinY; DtSeries.MaxY := MaxY; 但還是會出錯 StatQQPlot 內的變數 要帶入什麼值呢? ,可否說明一下。 還有 您剛才回答的問題,我看不太懂!! 可否也說明一下(或舉個例子) 1.不畫的點應該在載入資料時就要把它濾掉 2.或者TChartSeries.ValuesList中新增刪除,
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-05-25 15:06:08 IP:221.169.xxx.xxx 未訂閱
引言: StrongLemon兄 你好: 我照你的方法改變,反而變的更奇怪(如圖)
調整你的BottomAxis的最大最小值跟Min Separation->0~10, 因為Min Separation=0時太多組會集結在一塊。 它繪製原理是看Min Separation<>0時Label繪製如果畫面放不下那麼多就會 減少組數。Min Separation=0時則不管所以會重疊。
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-05-25 15:16:18 IP:221.169.xxx.xxx 未訂閱
我將BottomAxis的最大最小值 由自動改成 0 跟 10 而Min Separation設成=0 依然會粉多數字擠在一起 設成10則為依舊跟原來沒有兩樣 你的意思,我可能會錯意 了嗎? 還是要改程式呢?
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-05-25 15:40:19 IP:221.169.xxx.xxx 未訂閱
引言: 你好: 我宣告了XData及YData MinX ........ private CtData,TdData,HtData,PtData,XData,YData: TVec; MinX,MinY,MaxX,MaxY:integer; 並且對程式寫了 //散佈圖 XData:=Tvec.Create; YData:=Tvec.Create; try XData.LoadFromFile('Dt_x.vec'); except end; try YData.LoadFromFile('Dt_y.vec'); except end; MinX:=1; MaxX:=9; MinY:=1; MaxY:=12; //計算回歸曲線 StatQQPlot(XData,YData,x,y,MinX,MaxX,MinY,MaxY,false,false); DtSeries.MinX := MinX; DtSeries.MaxX := MaxX; DtSeries.MinY := MinY; DtSeries.MaxY := MaxY; 但還是會出錯 StatQQPlot 內的變數 要帶入什麼值呢? ,可否說明一下。 還有 您剛才回答的問題,我看不太懂!! 可否也說明一下(或舉個例子) 1.不畫的點應該在載入資料時就要把它濾掉 2.或者TChartSeries.ValuesList中新增刪除,
StatQQPlot(XData,YData,x,y,MinX,MaxX,MinY,MaxY,false,false); XData跟YData是原始資料,X跟Y(TVec)則是繪製的資料(帶入時是空的) ,MinX~MaxY則是此Function計算回傳,後面兩個則是XData跟YData是否已經 排序 原文Help
Constructs the Quantile-Quantile Chart.
Unit
StatSeries    Declaration
Procedure StatQQPlot(XData, YData: TVec; XDrawVec, YDrawVec: TVec; var MinX, MaxX, MinY, MaxY: TSample; XDataSorted: boolean = true; YDataSorted: boolean = true);
Description
Constructs the Quantile-Quantile Chart. Use TStatProbSeries to visualize/plot constructed values.
Parameters
XData
X Data.
YData
Y Data.
XDataSorted
If true, algorithm assumes XData is already sorted in ascending order. If XData is not sorted, you must set this parameter to false so that internal algorithm will automatically do the sorting.
YDataSorted
If true, algorithm assumes YData is already sorted in ascending order. If YData is not sorted, you must set this parameter to false so that internal algorithm will automatically do the sorting.
XDrawVec
Retunrs vector of X values to be drawn.
YDrawVec
Returns vector of Y values to be drawn.
minX,minY
Returns slope line start point. These value are used by TStatProbSeries series.
maxX,maxY
Returns slope line end point. These value are used by TStatProbSeries series.    Category
Probabilities plots
1.不畫的點應該在載入資料時就要把它濾掉 ->原始資料經過統計(此時還是原始資料)之後, 在塞入供TChart繪圖資料陣列時就先判斷該數值是 否超出界線,超出的話就不塞入。 2.或者TChartSeries.ValuesList中新增刪除 ->ValuesList裡儲存了各點的數值(TChartValueList), TChartValueLists是由TList繼承下來,TList的用法請 搜尋舊文章。 後來翻說明文件不能夠直接新增刪除,必須透過TChartSeries 所提供的property&Method( Add AddArray AddNull AddNullXY AddX AddXY AddY Count Delete XValue XValues YValue YValues )來運作。請查閱TChartSeries的Help中Method 說明。
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-05-25 15:50:56 IP:221.169.xxx.xxx 未訂閱
引言: 我將BottomAxis的最大最小值 由自動改成 0 跟 10 而Min Separation設成=0 依然會粉多數字擠在一起 設成10則為依舊跟原來沒有兩樣 你的意思,我可能會錯意 了嗎? 還是要改程式呢?
Min Separation->0~10 不要按那個上下鍵只會有0 or 10 自己輸入1
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-05-25 16:05:58 IP:221.169.xxx.xxx 未訂閱
引言: 有辦法可以更換它的OnGetLabel 嗎?
很不幸地它是寫在protected裡, 1.所以要改寫的話再繼承下來再改寫。 2.或者不要繼承,依照它寫的元件再複製一份, 取別的class name,然後把那部分自己修改。
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-05-25 16:13:12 IP:221.169.xxx.xxx 未訂閱
我手動設成1了 但是,依然由0跳2 跳4..... 真奇怪! 畫曲線 ok了 非常謝謝你 但是排除資料的問題,依舊不會 引言: ---------------------------------------------------------------------- 有辦法可以更換它的OnGetLabel 嗎? 很不幸地它是寫在protected裡, 1.所以要改寫的話再繼承下來再改寫。 2.或者不要繼承,依照它寫的元件再複製一份, 取別的class name,然後把那部分自己修改。 ---------------------------------------------------------------------- 有其它方法可以解決嗎
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-05-25 17:12:17 IP:221.169.xxx.xxx 未訂閱
分數給你了 感恩喔! 問題可否繼續回答呢?
StrongLemon
高階會員


發表:10
回覆:166
積分:105
註冊:2004-04-18

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-05-26 14:44:47 IP:221.169.xxx.xxx 未訂閱
引言: 我手動設成1了 但是,依然由0跳2 跳4..... 真奇怪!
Axis的Max調小一點,再慢慢加大,你會發現到一定值就會跳
引言: 引言: ---------------------------------------------------------------------- 有辦法可以更換它的OnGetLabel 嗎? 很不幸地它是寫在protected裡, 1.所以要改寫的話再繼承下來再改寫。 2.或者不要繼承,依照它寫的元件再複製一份, 取別的class name,然後把那部分自己修改。 ---------------------------------------------------------------------- 有其它方法可以解決嗎
上幾個回覆裡面有提到 "還有另一種stQQSeries則是可以顯示超出0~1。" TStatProbSeries.ProbSeriesType=stQQSeries就可以是普通數值了啊。 不知道你想要更換它的OnGetLabel用意在哪?
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-05-26 14:56:33 IP:221.169.xxx.xxx 未訂閱
感恩喔!成功了 TStatProbSeries.ProbSeriesType=stQQSeries就可以是普通數值了啊。 但是 max 先設小一點,再慢慢加大 這一句話,我不太懂 可否 麻 煩 將整個設定流程 說清楚一些
系統時間:2024-06-27 1:28:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!