Код: Выделить всё
import matplotlib.pyplot as plt
import math
n = [i for i in range(1, 30)]
a = n;
b = [1/i for i in range(1, 30)]
c = [math.sqrt(i) for i in range(1, 30)]
plt.figure(figsize=(10, 6))
plt.plot(n, a, label="Data A", marker='o')
plt.plot(n, b, label="Data B", marker='s')
plt.plot(n, c, label="Data C", marker='^')
plt.yscale('log')
plt.xlabel('N')
plt.ylabel('Data')
plt.title('My data.')
plt.legend()
plt.grid(True)
plt.show()

Как бы мне создать что-то подобное на C++?
Сейчас я использую библиотеку matplotlibcpp.h.
Но я начинаю думать что эта библиотека не способна создавать графики, подобные показанным выше.
Вот одна из моих попыток:
Код: Выделить всё
#include
#include
#include // For std::sqrt
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
int main() {
// Generate data
std::vector n;
std::vector a;
std::vector b;
std::vector c;
for (int i = 1; i < 30; ++i) {
n.push_back(i);
a.push_back(i); // Data A
b.push_back(1.0 / i); // Data B (1/i)
c.push_back(std::sqrt(i)); // Data C (sqrt(i))
}
// Create a figure
plt::figure_size(1000, 600);
plt::semilogy(n, a);
plt::semilogy(n, b);
plt::semilogy(n, c);
plt::xlabel("N");
plt::ylabel("Data");
plt::title("My data.");
plt::legend();
plt::grid(true);
plt::show();
return 0;
}

Это довольно близко, но я все еще пытаюсь добавить легенду и маркеры.
Это не так просто, как кажется, поскольку функции построения графика не принимают никаких дополнительных параметров. .
Спасибо за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/791 ... plotlibcpp