Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод нескольких графиков с использованием QCustomPlot - C++ Qt / 6 сообщений из 6, страница 1 из 1
11.08.2017, 06:56
    #39503777
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
Собираюсь перенести график(см.рисунок) со Visual Studio на QT.
В Visual Studio код,представленный ниже рисует что нужно(см. Рисунок)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public:void drawdifnet(double** wht, int Nt)
    {
        chart2->Series["1"]->BorderWidth = 3;
        chart2->Series["2"]->BorderWidth = 3;
        chart2->Series["3"]->BorderWidth = 3;
        chart2->Series["4"]->BorderWidth = 3;
        chart2->Series["5"]->BorderWidth = 3;
        chart2->Series["6"]->BorderWidth = 3;
        chart2->Series["7"]->BorderWidth = 3;
        chart2->Series["8"]->BorderWidth = 3;
        chart2->Series["9"]->BorderWidth = 3;
        chart2->Series["10"]->BorderWidth = 3;
        chart2->Series["11"]->BorderWidth = 3;
        chart2->Series["12"]->BorderWidth = 3;
        for (int j = 1; j < Nt - 1; j++)
        {
            for (int i = 1; i < Nt - 1; i++)//Было Nx
            {
                chart2->Series["" + (j + 1).ToString()]->Points->AddXY(i, wht[j][i]);
            }
        }
    }



Но как быть в Qt Creator

В tutorial QCustomPlot показывается отрисовка графика таким образом.

Код: plaintext
1.
2.
3.
ui->widget_2->graph(0)->setData(x,y);
ui->widget_2->graph(1)->setData(x11,y11);
ui->widget_2->graph(2)->setData(x22,y22);



Но что делать когда количество линий графика неизвестно заранее? Попытка прокрутить через цикл

Код: plaintext
1.
2.
3.
4.
for (int j = 1; j < Nt - 1; j++)
{
ui->widget_2->graph(j+1)->setData(x,y);
}


заканчивается вылетом программы и исключением типа:

Код: plaintext
1.
QCPGraph* QCustomPlot::graph(int) const index out of bounds: 2


Если же поставить код в цикл получения точек то исключений нету ровно как и графиков.

но при отладке 144 раз выходит вот такое сообщение


Код: plaintext
1.
void QCPGraph::addData(const QVector<double>&, const QVector<double>&, bool) keys and values have different sizes: 12 144


Это значение допустимое так как у меня цикл в цикле и повторюсь в студии с теми же 12 и 144 работает и строит.

Если же сделать таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
void MainWindow::drawdifnet(int Nt)
{
   //Получаем количество точек для вектора
    int N=Nt;
    int N1=pow(N,2);
    QVector<double> x22(N), y22(N1); // //Массивы координат точек count(j)=10,count(i)=100,i=11,j=11
    int ii=0,jj=0;
    for (int j = 0; j < Nt ; j++)
            {
                for (int i = 0; i < Nt ; i++)//Было Nx
                {
                    x22[jj]=i;
                    y22[ii]=wht[j][i];
                    ui->widget_2->clearGraphs();
                    ui->widget_2->addGraph();
                    ui->widget_2->graph(0)->setData(x22,y22);
                    ui->widget_2->xAxis->setLabel("OsX");
                    ui->widget_2->yAxis->setLabel("OsY");
                    ui->widget_2->xAxis->setRange(Nt,Nt);
                    ui->widget_2->replot();
                    ii++;
                }
                jj++;
            }
}


То выходит непонятное движение одной и той же линии,которая далека от правильного варианта.
...
Рейтинг: 0 / 0
11.08.2017, 15:03
    #39504136
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
Почему у меня не одинаковые векторы?
Дело в том,что у программы принцип работы такой на каждом шаге–итерации j 12 раз вычисляются координаты будущего графика(отсюда и происходит заполнение массива 144 раза) 12 раз по 12.
то есть 12 графиков содержат 12 точек координат
...
Рейтинг: 0 / 0
13.08.2017, 15:36
    #39504587
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
Прошу модераторов удалить предыдущее сообщение(оформлено не по правилам) и прикреплён неправильный рисунок Модератор: Ok

Вот правильное сообщение

Результат работы следующего кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void MainWindow::drawdifnet(int Nt)
{
//Получаем количество точек для вектора
int N=Nt;
int N1=pow(N,2);
QVector<double> x22(N), y22(N1); // //Массивы координат точек count(j)=10,count(i)=100,i=11,j=11
int ii=0,jj=0;
for (int j = 0; j < Nt ; j++)
{
for (int i = 0; i < Nt ; i++)
{
x22[jj]=i;
y22[ii]=wht[j][i];
ui->widget_2->addGraph()->setData(x22, y22);
}
}
ui->widget_2->xAxis->setLabel("OsX");
ui->widget_2->yAxis->setLabel("OsY");
ui->widget_2->xAxis->setRange(0,12);
ui->widget_2->yAxis->setRange(0,5);
ui->widget_2->replot();
}



приводит к такому графику

что далеко от правильного графика
...
Рейтинг: 0 / 0
13.08.2017, 15:40
    #39504588
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
Надеюсь на подсказки профессионалов и специалистов
...
Рейтинг: 0 / 0
14.08.2017, 17:27
    #39505135
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
otars,

Не совсем понятно что ты хочешь увидеть в результате.
Можешь запостить микро-программу целиком? Чтобы можно было увидеть не только твое общение с QCustomPlot, но и как ты заполняешь массив wht.
...
Рейтинг: 0 / 0
15.08.2017, 03:08
    #39505335
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод нескольких графиков с использованием QCustomPlot - C++ Qt
изменил пример qcustomplot
добавляю 6 графиков

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
  // Добавляем 6 графиков
  QVector<QCPGraph *> grafiki;
  for(size_t i=0;i<6;i++)
    grafiki.push_back( customPlot->addGraph() );

  // расчет данных для графиков
  QVector<double> x(101), y(101);
  QVector<double> x0(25), y0(25);
  QVector<double> x1(15), y1(15), y1err(15);
  QVector<double> x2(250), y2(250);
  QVector<double> x3(250), y3(250);
  QVector<double> x4(250), y4(250);
  for (int i=0; i<101; ++i)
  {
    x[i] = i/50.0 - 1; // x goes from -1 to 1
    y[i] = x[i]*x[i];  // let's plot a quadratic function
  }
  for (int i=0; i<25; ++i) // data for graph 0
  {
    x0[i] = 3*i/25.0;
    y0[i] = qExp(-x0[i]*x0[i]*0.8)*(x0[i]*x0[i]+x0[i]);
  }
  for (int i=0; i<15; ++i) // data for graph 1
  {
    x1[i] = 3*i/15.0;;
    y1[i] = qExp(-x1[i]*x1[i])*(x1[i]*x1[i])*2.6;
    y1err[i] = y1[i]*0.25;
  }
  for (int i=0; i<250; ++i) // data for graphs 2, 3 and 4
  {
    x2[i] = i/250.0*3*M_PI;
    x3[i] = x2[i];
    x4[i] = i/250.0*100-50;
    y2[i] = qSin(x2[i]*12)*qCos(x2[i])*10;
    y3[i] = qCos(x3[i])*10;
    y4[i] = 0.01*x4[i]*x4[i] + 1.5*(rand()/(double)RAND_MAX-0.5) + 1.5*M_PI;
  }

  // заполняем графики
  grafiki[0]->setData(x, y);
  grafiki[1]->setData(x0, y0);
  grafiki[2]->setData(x1, y1);
  grafiki[3]->setData(x2, y2);
  grafiki[4]->setData(x3, y3);
  grafiki[5]->setData(x4, y4);
}

...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывод нескольких графиков с использованием QCustomPlot - C++ Qt / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]