在C++中绘制图表

6

我使用Python的Matplotlib制作了以下图表。我还附上了我用来制作它的代码。enter image description here

场地的代码:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

obs_boundary = [
            [0, 0, 10, 600],
            [0, 600, 900, 10],
            [10, 0, 900, 10],
            [900, 10, 10, 600]
        ]
obs_cir_own = [
    [50,500,10],
    [100,300,10],
    [240,240,10],
    [300,400,10],
    [190,50,10]

        ]
obs_cir_opp = [
            [700, 420, 10],
            [460, 200, 10],
            [550, 500, 10],
            [670, 70, 10],
            [800, 230, 10],
            [600,300,10]
        ]
fig, ax = plt.subplots()

for (ox, oy, w, h) in obs_boundary:
    print(ox, oy, w, h)        
    ax.add_patch(
                patches.Rectangle(
                    (ox, oy), w, h,
                    edgecolor='black',
                    facecolor='black',
                    fill=True
                )
            )

for (ox, oy,r) in obs_cir_own:
            ax.add_patch(
                patches.Circle(
                    (ox, oy), r,
                    edgecolor='black',
                    facecolor='green',
                    fill=True
                )
            )
for (ox, oy, r) in obs_cir_opp:
            ax.add_patch(
                patches.Circle(
                    (ox, oy), r,
                    edgecolor='black',
                    facecolor='red',
                    fill=True
                )
            )
 
plt.plot(50,50, "bs", linewidth=30)
plt.plot(870, 550, "ys", linewidth=30)           
name='arena'
plt.title(name)
plt.axis("equal")

所以,我想使用C++实现一个类似的场地,但我不知道该如何做?我做了一些研究,得知了一些关于qtplot的东西,但我并不了解qt。那么,是qtplot是唯一的方式还是有其他更简单的方式?请告诉我如何在C++中实现这个。


你重新用C++实现这个的原因是什么? - UnholySheep
2
只需让您的C++将数据转储到某个地方,然后调用Python脚本即可。 - Botje
2
@UnholySheep 我有一个路径规划算法需要测试,它是用C++编写的,所以我需要一个C++图形。 - SHIVANSHU SAHOO
3个回答

12
你可以尝试使用 https://github.com/lava/matplotlib-cpp,它看起来只是 matplotlib 的一个包装器,因此最终你仍然在调用/使用 Python 和 matplotlib。有了这个,你可能可以几乎原封不动地将你的代码复制到“C++”中。

实际上我将用它来测试一个C++路径规划算法,那么我可以将其用于我的目的吗?也就是说,我可以从C++代码中调用它吗? - SHIVANSHU SAHOO

5
一个优秀的用于绘制图形的C++库是ROOT。它由CERN为物理学家开发。它还包括一个C++ shell,以防您想使用带有交互提示的C++。
您可以在https://root.cern/上找到文档、下载链接和大量示例。
还有一个stackoverflow问题,有人试图绘制点:CERN ROOT: 是否可能绘制x-y数据点对?

0

3
我很高兴您提到了我写的科学OpenGL教程,但如果您只是想要一个简单的绘制图表库,那么这并不是一个好的选择 :) - G. Sliepen
@G.Sliepen,你能建议一个更简单的绘制图形的方法吗? - SHIVANSHU SAHOO
那么plotutils呢?http://www.gnu.org/software/plotutils/。它是一个官方的C++库:https://en.cppreference.com/w/cpp/links/libs - gibs
@SHIVANSHUSAHOO,恐怕我自己没有一个好的答案。正如Jan Crhistoph Terasa所提到的那样,matplotlib-cpp似乎是一个很好的选择。 - G. Sliepen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接