2016-04-18 13 views
2

Ich habe einen QwtPlot, den ich die Achsenskalierung ändern möchte, ohne den Wert der gezeichneten Punkte selbst ändern zu müssen.Qwt rescale Achse

In meiner Anwendung zeichne ich Punkte in Volt, innerhalb eines [-10,10] V-Bereichs (beide Achsen). Ich möchte jede Achse kalibrieren, indem ich sie mit einem Wert in nm/V multipliziere, um die Skala in Nanometer umzuwandeln. Ich möchte dies tun, ohne den Wert der Punkte selbst ändern zu müssen. Was wäre die praktischste Art, dies zu erreichen?

Dank

+0

http://qwt.sourceforge.net/class_qwt_plot.html#acef5ea818944b93b8695d0c16924eed6 –

+0

Die QwtPlot :: setAxisScale() neu skaliert sowohl die Achse und die Plotregion als Gut. Ich muss die Werte in der Achse ändern, aber das Diagramm in der gleichen Region belassen. Dies bedeutet, dass die Punkte auf dem Diagramm an derselben Stelle erscheinen, aber die Achse unterschiedliche Werte hat. –

+0

Sie können die Achsenwerte nicht ändern, ohne die Daten zu verschieben. Entweder müssen Sie a) die Daten skalieren (was ich für zu ineffizient halte), oder b) die Achse skalieren. _label values_ –

Antwort

2

qwt wird nicht zulassen, dass Sie die Achsenwerte zu ändern, ohne die Daten zu beeinflussen. Was Sie können tun jedoch ist, ändern Sie die Achse Etiketten. Dadurch erhalten Sie die gewünschte Skalierungswirkung, ohne Ihre Daten zu manipulieren.

class QConversionScaleDraw : public QwtScaleDraw 
{ 
public: 

    explicit QConversionScaleDraw(double conversionFactor) 
    : m_conversionFactor(conversionFactor) 
    { 

    } 

    virtual QwtText label(double value) const override; 
    { 
     return QwtScaleDraw::label(value * m_conversionFactor); 
    } 

private: 

    double m_conversionFactor;             

}; 

Dann es verwendet:

QwtPlot myplot; 
double nmToV = 0.612; // or whatever 
myplot->setAxisScaleDraw(xBottom, new QConversionScaleDraw(nmToV));