科研论文配图配色及细节设置总结 尤其添加3D视觉中漂亮的点云图的生成方法 您所在的位置:网站首页 最简单的柱状图怎么画 科研论文配图配色及细节设置总结 尤其添加3D视觉中漂亮的点云图的生成方法

科研论文配图配色及细节设置总结 尤其添加3D视觉中漂亮的点云图的生成方法

2023-03-30 09:55| 来源: 网络整理| 查看: 265

origin软件2017/2018/2019/2021/2022中英版本,附安装教程!激活安装,永久使用!仅需15元!点击购买!

前段时间赶论文,发现花在画图上面的时间还是不少的。尤其是为了使图像美观且清晰,需要花大功夫来调整颜色、字号、位置等内容,其中会用到不少函数,故在此总结记录,方便日后查阅,同时将常用的折线图和柱状图总结成模板,方便后续使用。

另外,由于前段时间有一个 3D 视觉相关的工作需要配点云插图,在中文社区搜索了半天也没有看到别人那些好看的点云插图是如何渲染出来的,在全网也是搜了好久才找到相应的答案,故也在此记录一下该方法,方便有需要的朋友日后参考。

1. Matplotlib 绘图细节设置

折线图与柱状图算是在展示实验数据的时候最常用到的两种统计图。考虑到经常需要调整颜色、调整字号、调整图例的位置等等,涉及到的函数众多,故在此一并总结一下(本节的最后会放一个完整的代码模板,可以直接 copy 后修改使用)。

1.1 调整颜色

这一项内容通常比较直观且简单。在画图的时候,可以直接通过为 'color' 这一参数赋值即可让对应组别变成我们想要的颜色。该参数可以被赋为不同类型的值,例如:

plt.plot(x, y, color='r') # assign codes about Matplotlib base colors plt.plot(x, y, color='tab:red') # assign codes about Matplotlib tableau palette plt.plot(x, y, color='red') # assign codes about Matplotlib CSS colors plt.plot(x, y, color=(1, 0, 0)) # assign normalized (i.e. from 0 to 1) RGB values plt.plot(x, y, color='#EF476F') # assign hex codes

其中前三行中的颜色代码出自 Matplotlib 自带收录的一些颜色,详细的列表可以参考Matplotlib 官方文档的相关说明。

特别注意:如果要为该参数赋 RGB 值,那么这些值一定要做 normalization。

然而很多时候我们为了使论文的图表更加美观,会专门寻找一些更加舒适的配色设计,这一部分我们会在下文讨论。不过不变的是,我们在拿到了一组配色设计中各自颜色的代码后,就可以通过为 'color' 这一参数赋不同的值来生成图片了。

1.2 调整字号

有一个方法可以一键设置所有字体的大小:

paras = { 'axes.labelsize': 18, 'axes.titlesize': 19, 'xtick.labelsize': 15, 'ytick.labelsize': 16, 'legend.fontsize': 15, } plt.rcParams.update(paras)

其中 'axes.labelsize' 是坐标轴标签的字体大小,'axes.titlesize' 是图片标题的大小,'xtick.labelsize' 和 'ytick.labelsize' 分别为 x 和 y 轴刻度字体的大小,'legend.fontsize' 则是图例的字体大小。

其实这个参数字典里还有更多的项,但是很多是我们没有必要修改的,所以这里我一般只用它来控制各个模块的字号大小。更多的参数项可以查阅 matplotlib 的官方文档或参考这篇博客。

1.3 调整图例的位置

在 'plt.legend()' 这一函数中,通过对 'loc' 这一参数赋不同的值,即可调整图例的位置。

我们有两种方式来为 'loc' 赋值,第一种是为 'loc' 赋一个 'str' 类型的值,即 matplotlib 默认为图例设置了九个位置,一般我们可以直接从这九个位置中选一个,他们分别是:'upper left', 'upper center', 'upper right', 'center left', 'center', 'center right', 'lower left', 'lower center', 'lower right'。

而如果我们需要特别定制图例的位置(例如当绘出的数据和上面默认的九个位置有重合时),我们可以使用一个元组来自定义图例的坐标,即 'loc = (x, y)',通过不断尝试 x 和 y 的值,我们可以为图例找到一个合适的位置。

plt.legend(loc='upper right') # an example for approach 1 plt.legend(loc=(0.5, 0.5)) # an example for approach 21.4 折线图模板折线图模板运行效果图import matplotlib.pyplot as plt import numpy as np paras = { 'axes.labelsize': 18, 'axes.titlesize': 19, 'xtick.labelsize': 15, 'ytick.labelsize': 16, 'legend.fontsize': 15, } plt.rcParams.update(paras) l_color = [ '#EF476F', '#FFD166', '#06D6A0', '#118AB2', ] x_data = np.array([1, 2, 3, 4]) y_data = np.array([ [25.1, 38.5, 56.4, 95.6], [29.8, 40.0, 66.5, 76.3], [1.0, 0.7, 1.6, 3.1], [15.8, 14.8, 30.7, 35.8], ]) legends = ['Group 1', 'Group 2', 'Group 3', 'Group 4'] plt.figure(figsize=(10, 6.4)) for x_idx in range(y_data.shape[0]): plt.plot(x_data, y_data[x_idx, :], '-o', color=l_color[x_idx], label=legends[x_idx]) plt.legend(loc='upper left') plt.title('Line Template') plt.xlabel('xlabel name') plt.ylabel('ylabel name') plt.xticks(x_data) plt.show()1.5 柱状图模板柱状图模板运行效果图import matplotlib.pyplot as plt import numpy as np paras = { 'axes.labelsize': 18, 'axes.titlesize': 19, 'xtick.labelsize': 15, 'ytick.labelsize': 16, 'legend.fontsize': 15, } plt.rcParams.update(paras) l_color = [ '#EF476F', '#FFD166', '#06D6A0', '#118AB2', ] data = np.array([ [75.1, 88.5, 96.4, 95.6], [99.8, 100.0, 100.0, 100.0], [1.0, 0.7, 1.6, 3.1], [15.8, 14.8, 30.7, 35.8], [7.4, 11.9, 17.5, 25.0], [54.9, 65.5, 68.8, 72.6] ]) legends = ['Group 1', 'Group 2', 'Group 3', 'Group 4'] xtick_names = ['xtick 1', 'xtick 2', 'xtick 3', 'xtick 4', 'xtick 5', 'xtick 6'] plt.figure(figsize=(10, 6.4)) width_per_cat, unit_per_cat = 0.8, 4 width_per_unit = width_per_cat / unit_per_cat bar_idx = 0 for x_idx in range(data.shape[0]): xpos_start_list = [] for unit_id in range(unit_per_cat): xpos_start_list.append(-0.3 + bar_idx + unit_id * width_per_unit) plt.bar(xpos_start_list, data[x_idx, :], width=width_per_unit, color=l_color, label=legends) if bar_idx == 0: plt.legend(loc='upper right') bar_idx += 1 plt.title('Bar Template') plt.xticks(list(range(data.shape[0])), xtick_names) plt.ylabel('ylabel name') plt.show()2. 论文配色

关于科研论文配色的讨论就比较多了。首先需要明确的是不同的函数可接受的颜色表示是不一样的,有的接受的是 0-255 表示的 RGB 范围,有的接受的是 0-1 表示的 RGB 范围(即 normalize 之后的 RGB 值),还有的可以接受十六进制的颜色代码,这些应该在使用一个函数前加以区分。

关于配色,目前有一些现成的论文配色可以参考,如这篇文章中所提到的。还有一些专业的配色网站,我们可以在上面选取自己心仪的颜色,例如 Flat UI Colors 2 - 14 Color Palettes, 280 colors :

对于我们中意的颜色,选择好我们想要 copy 的参数类型(下面图片中紫色框示意的部分)后,点击该颜色即可 copy 该颜色对应的参数:

另外,如果追求某些颜色的统一,或者不知道我们中意的颜色的参数时,使用取色器即可,例如:图片取色器/拾色器 | 菜鸟工具。

3. 生成漂亮的点云渲染图

前段时间就遇到了一个特别棘手的问题,那就是下面这样的图片是怎么画出来的。因为毕竟是一个关于 3D 视觉的工作,需要配一些相关的示意图,看来看去还是下面这种最好看,但是又不知道是怎么画出来的。

换了无数个关键词各种搜,最终在绝望到快要放弃的时候在一个 github issue 里无意中发现了想要的答案:

当然,我们不需要仔细研究 Mitsuba 的 api 来自己实现,有人已经帮我们实现了我们想要的功能:

我们只需要将该 project 中的文件替换成我们自己的模型并修改好路径即可。下面我们来详细讲讲如何配置环境和安装所需的依赖。

3.1 安装 Mitsuba 2

首先我们需要安装 mitsuba,它是一个面向研究的渲染系统。

按照紫色框圈出的三个章节一步步做即可完成 Mitsuba 2 的安装。

当然,如果你比较懒,我也直接把整个安装步骤放到了下面,如果在安装过程中出现了问题,还是建议回到官方的 tutorial 中寻找解决方案,看看是不是自己漏掉了什么细节或者环境不匹配等等。

第一步:clone mitsuba 的代码仓库到本地并确保子模块同步。本文以 home 目录为例,记得要添加 --recursive 这一 flag:

$ git clone --recursive https://github.com/mitsuba-renderer/mitsuba2 $ cd ~/mitsuba2/ $ git config --global alias.pullall '!f(){ git pull "$@" && git submodule update --init --recursive; }; f' $ git pullall

第二步:修改配置文件。

$ cp resources/mitsuba.conf.template mitsuba.conf

这里视自己的实际情况来修改,更多的细节可以参考官方文档,我们这里选择不做修改即可。

第三步:安装依赖:

$ sudo apt install -y clang-9 libc++-9-dev libc++abi-9-dev cmake ninja-build $ sudo apt install -y libz-dev libpng-dev libjpeg-dev libxrandr-dev libxinerama-dev libxcursor-dev $ sudo apt install -y python3-dev python3-distutils python3-setuptools

第四步:编译项目:

首先我们需要确保 CC 和 CXX 这两个环境变量是 exported 的,一个简便稳妥的方法是直接将他们添加到 ~/.bashrc 中:

export CC=clang-9 export CXX=clang++-9

接下来就可以进行编译了:

$ mkdir build $ cd build $ cmake -GNinja .. $ ninja3.2 渲染图片

接下来我们可以将这个项目 clone 到本地了:

$ git clone https://github.com/tolgabirdal/Mitsuba2PointCloudRenderer.git

第一步:安装依赖:

$ pip install OpenEXR

第二步:在 'render_mitsuba2_pc.py' 这一文件的第 8 行,将 PATH_TO_MITSUBA2 修改为我们自己 Mitsuba2 的安装路径。如果需要的话,也可以修改输出的路径,即修改第 151 行 folder 的路径。

第三步:运行测试示例:注意到目前这个 project 下的测试文件 chair.npy 似乎是有问题的,我们可以从这个项目中下载 chair_pcl.npy 这个文件,然后运行

python3 render_mitsuba2_pc.py chair_pcl.npy

如成功运行,则可看到如下等信息:

以及最终输出的文件:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有