如何制作风流/空气动力学图?

平面设计 向量 信息图形
2022-01-13 18:43:18

我需要一些关于如何创建这些主题的漂亮矢量化图像的帮助:

风流示例 1

风流示例 2

在排版方面,我经常使用 LaTeX,所以我对 Tikz 有一些基本的经验。但是我觉得如果我需要制作像上面这样复杂的图像,我会发现自己有点迷茫。

如果有人能指出我如何制作这类图像的正确方向,我将非常感激,最好是使用免费软件。

4个回答

可以使用执行矢量输出的图形应用程序。我已经非常成功地使用了以下应用程序:

  • Mathematica <-我喜欢它可以像上面那样做图像
  • Matlab(记得导出eps)
  • Python 使用 matplotlib
  • PSTricks
  • 插画家
  • 夏拉
  • 墨景
  • AutoCAD

艰难,您可能还需要使用 3d 应用程序或图形应用程序,我建议:

  • yEd,各种图形布局,无需安装即可从互联网上运行。
  • 力有向图
  • Maya,3DsMax 与矢量渲染
  • Creo、NX、Catia、Solidworks...

通常使用一些可以实际绘制事物作为基础的工具,然后将 EPS 文件导入到 illustrator 之类的图形艺术家工具中以供以后完成,这样会更有效率。真正的好处是您可以在参与之前使用图表,因此更改很容易。

如果您愿意,也可以在 Illustrator 中自己绘制图形,一些代码可以帮助您。

资源

在我有时间找到一些合适的例子之前,这里有一些东西的快速列表(层流正确)。

一些具有类似组件的示例(您可能需要添加更多内容,但这里是拼图的某些部分):

你最好的选择是拿起一个矢量编辑器并学习如何使用它。上面的例子看起来并不复杂,对绘制矢量有一个基本的了解就可以了。

如果您要尝试一个,我建议您不要使用 Illustrator 或 Corel Draw。虽然两者都是强大且流行的首选工具,但对于初学者来说,它们似乎令人生畏。Inkscape是一个不错的选择。它是免费的,学习它应该不是问题。

第一个:.PY + Matplotlib -> .SVG

然后,.SVG -> Inkskape

但是,.SVG 很容易学会去 .PY -> .SVG

你也可以做 .PY + Matplotlib -> .PDF。Inkscape 也会打开它。

免责声明:

  1. 除非我必须修复别人的代码,否则我通常不会使用 Python 编程
  2. 我从未使用过 Matplotlib - 这是我第一次尝试使用它,而且因为它看起来很有趣,所以我发布这个答案的唯一原因。

现在有一个更强有力的答案:(并不是说我喜欢为博士生做作业……)

这里的所有东西都被盗了——完全被盗了——来自 matplotlib 网站(参见示例)和 Stack Overflow(matplotlib 保存无花果图像修剪)。我所做的只是复制/粘贴它并测试它。

生成的 out.svg 文件可以直接在 Inkscape 中打开。图像是一组/组较小的图像。单击图像的任何部分,然后使用 Inkscape 的“取消组合”选项。您可能需要取消组合几次才能直接操作图像的一部分。

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

fig.colorbar(surf, shrink=0.5, aspect=5)

#plt.show()

fig.set_size_inches(4,3) 

fig.set_dpi(40)

fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0)