C++ 未显示QChart测井轴数据
我有一个2Y轴plo,y1上有一个C++ 未显示QChart测井轴数据,c++,qt,qt5,qtcharts,C++,Qt,Qt5,Qtcharts,我有一个2Y轴plo,y1上有一个QValueAxis,y2上有一个QLogValueAxis 显示线性图,不显示对数图。两者的数据相同。 我想知道如何设置日志轴的刻度和限制 代码如下: chart = new QChart(); chart->legend()->hide(); chart->setTitle("Histogramm"); axisX = new QValueAxis; axisX->setLabelFormat("%g"); chart->a
QValueAxis
,y2上有一个QLogValueAxis
显示线性图,不显示对数图。两者的数据相同。
我想知道如何设置日志轴的刻度和限制
代码如下:
chart = new QChart();
chart->legend()->hide();
chart->setTitle("Histogramm");
axisX = new QValueAxis;
axisX->setLabelFormat("%g");
chart->addAxis(axisX, Qt::AlignBottom);
series = new QLineSeries;
chart->addSeries(series);
axisY = new QValueAxis;
axisY->setTitleText("linear scale");
axisY->setLinePenColor(series->pen().color());
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisX);
series->attachAxis(axisY);
serieslog = new QLineSeries;
chart->addSeries(serieslog);
axisY3 = new QLogValueAxis();
axisY3->setTitleText("logarithmic scale");
axisY3->setBase(10.0);
axisY3->setLinePenColor(serieslog->pen().color());
chart->addAxis(axisY3, Qt::AlignRight);
serieslog->attachAxis(axisX);
serieslog->attachAxis(axisY3);
chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
// Create a layout and add Chart
QGridLayout *layout = new QGridLayout(this);
layout->addWidget(chartView);
void WidgetHistogramm::setData(const std::vector<int> data)
{
if (data.size() <= 0)
{
LOG_DEBUG() << "Histogram Data empty";
return;
}
auto max = *max_element(std::begin(data), std::end(data));
QVector<QPointF> points(data.size());
for(std::vector<int>::size_type i = 0; i != data.size(); ++i) {
points[i] = QPointF(i, data[i]*100/max);
}
series->replace(points);
serieslog->replace(points);
chart->axisX(series)->setRange(0, data.size());
chart->axisY(series)->setRange(0, 100);
chart->axisX(serieslog)->setRange(0, data.size());
chart->axisY(serieslog)->setRange(-1000, 1);
}
chart=新的QChart();
图表->图例()->隐藏();
图表->设置标题(“历史程序”);
axisX=新的QValueAxis;
axisX->setLabelFormat(“%g”);
图表->添加轴(axisX,Qt::AlignBottom);
系列=新的QLineSeries;
图表->添加系列(系列);
axisY=新的QValueAxis;
axisY->setTitleText(“线性比例”);
axisY->setLinePenColor(系列->画笔().color());
图表->添加轴(axisY,Qt::AlignLeft);
系列->attachAxis(axisX);
系列->附加轴(轴);
serieslog=新的QLineSeries;
图表->添加系列(系列日志);
axisY3=新的QLogValueAxis();
axisY3->setTitleText(“对数刻度”);
axisY3->setBase(10.0);
axisY3->setLinePenColor(序列日志->笔().color());
图表->添加轴(axisY3,Qt::AlignRight);
serieslog->attachAxis(axisX);
serieslog->attachAxis(axisY3);
图表视图=新的QChartView(图表);
图表视图->SetRenderInt(QPaint::抗锯齿);
//创建布局并添加图表
QGridLayout*layout=新的QGridLayout(本);
布局->添加小部件(图表视图);
void WidgetHistorogram::setData(常量std::向量数据)
{
if(data.size()替换(点);
图表->axisX(系列)->setRange(0,data.size());
图表->轴(系列)->设置范围(01100);
图表->axisX(serieslog)->setRange(0,data.size());
图表->axisY(serieslog)->设置范围(-1000,1);
}
范围不是指标度值,而是指实际值,例如,在您的情况下,它应该是从ε到100。另一方面,对数标度中显示的值必须是正的,在您的情况下,我看到有零,因此可能的解决方案是添加ε:
void WidgetHistogramm::setData(const std::vector<int> data)
{
if (data.size() <= 0){
LOG_DEBUG() << "Histogram Data empty";
return;
}
auto max = *max_element(std::begin(data), std::end(data));
QVector<QPointF> points(data.size());
for(std::vector<int>::size_type i = 0; i != data.size(); ++i) {
points[i] = QPointF(i, data[i]*100.0/max + std::numeric_limits<qreal>::epsilon());
}
series->replace(points);
serieslog->replace(points);
chart->axisX(series)->setRange(0, points.size());
chart->axisY(series)->setRange(0, 100);
chart->axisX(serieslog)->setRange(0, points.size());
chart->axisY(serieslog)->setRange( std::numeric_limits<qreal>::epsilon(), 100);
}
void WidgetHistorogram::setData(const std::vector data)
{
if(data.size()替换(点);
图表->axisX(系列)->设置范围(0,points.size());
图表->轴(系列)->设置范围(01100);
图表->axisX(serieslog)->设置范围(0,points.size());
图表->axisY(serieslog)->设置范围(标准::数值限制::ε(),100);
}