2016-03-05 3 views
-1

Возможно ли иметь экспоненциальный масштаб оси с TDBChart (вместо логарифмической шкалы)?Возможна ли экспоненциальная шкала оси с TDBChart?

Логарифмическая шкала оси y полезна, когда график соответствует экспоненциальному росту. Как показан в следующем примере, значение у-оси графика между 0 и 1 является дополнительным выделенным при indiviual выбросов за пределами, которые становятся все более и более неважными:

Однако, если есть somekind из обратное поведение графа по сравнению с выше примером, где малые значения не очень важны (шум), но indiviual выбросов должно быть четко видно, то экспоненциальный масштаб полезно:

Итак, это можно масштабировать ось с помощью TDBCh экспоненциально?

+0

http://stackoverflow.com/help/how-to-ask – Prasad

+0

Указание экспоненты является инверсией логарифмической. Если логарифмическое свойство на оси не дает ожидаемого результата, пожалуйста, организуйте [sscce] (http://sscce.org/) – Yeray

+0

@Yeray: Да, я знаю о связи между экспоненциальными и логарифмические шкалы. Вопрос не в математических основах. В TDBChart имеется встроенная опция для определения логарифмической шкалы. Я хотел бы знать, можно ли манипулировать осью в TDBChart, чтобы иметь экспоненциальный (обычно произвольный) масштаб или если для этого потребуется изменить исходный код TDBChart. – DRASIT

ответ

2

Следующий код заполнит ряд с экспоненциальным данными:

uses Series, Math; 

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
begin 
    Chart1.View3D:=False; 
    Chart1.Legend.Visible:=false; 

    with Chart1.AddSeries(TLineSeries) as TLineSeries do 
    begin 
    Pointer.Visible:=true; 
    Pointer.Size:=2; 

    for i := 1 to 10 do 
     Add(Power(2, i)); 
    end; 
end; 

Результат выглядит следующим образом:

exponential growth


Затем, если добавить следующий код выше :

Chart1.Axes.Left.Logarithmic:=true; 

Теперь данные остаются теми же, но левые изменения оси шкалы в логарифмической шкале:

logarithmic scale


Вы также можете изменить формат этикетки, а именно:

Chart1.Axes.Left.AxisValuesFormat:='00e-0'; 
    Chart1.Axes.Left.LabelsExponent:=true; 

exponential labels


Edit:

Установка логарифмической базы 1,544 на TeeChart и настраиваемые ярлыки, чтобы показать эти метки на скриншоте:

uses Series, Math; 

procedure TForm1.FormCreate(Sender: TObject); 
var i: Integer; 
begin 
    Chart1.View3D:=False; 
    Chart1.Legend.Visible:=false; 

    with Chart1.AddSeries(TLineSeries) as TLineSeries do 
    begin 
    Pointer.Visible:=true; 
    Pointer.Size:=2; 

    for i := 1 to 7 do 
     Add(Power(2, i)); 
    end; 

    with Chart1.Axes.Left do 
    begin 
    Logarithmic:=True; 
    LogarithmicBase:=1.544; 
    MinorTicks.Visible:=false; 

    with Items do 
    begin 
     Clear; 
     Add(0.1, '0.1'); 
     Add(1.2, '1.2'); 
     Add(1.5, '1.5'); 
     Add(2, '2'); 
     Add(3, '3'); 
     Add(5, '5'); 
     Add(7, '7'); 
     Add(10, '10'); 
     Add(15, '15'); 
     Add(20, '20'); 
     Add(30, '30'); 
     Add(40, '40'); 
     Add(50, '50'); 
     Add(70, '70'); 
     Add(100, '100'); 

     SetMinMax(0.1, 100); 
    end; 
    end; 
end; 

Это выглядит следующим образом:

LogarithmicBase 1.544

Расстояние между 0.1 и 1.2 намного больше, чем на вашем скриншоте, и я не уверен, что это ошибка, или если это математически правильно.
Я могу изменить масштаб оси, чтобы начать с 1 вместо 0.1, чтобы сделать его выглядеть намного похож на скриншоте, но я не уверен, если это будет то, что вы хотите:

 SetMinMax(1, 100); 

Axis Minimum 1)

+0

Спасибо! Но это не то, что мне нужно. (Мне нужно что-то вроде «Chart1.Axes.Left.Exponential: = true;'). Я добавил дополнительные сведения к вопросу выше. – DRASIT

+0

Благодарим за помощь! Вообще-то я был неправ. Второй пример не является показательным. Он логарифмический, но только начиная с 1.2! График между 0,1 и 1,2 сжимается вместе. Действительно, очень странно. – DRASIT

Смежные вопросы