前言
因为在写论文时,画图一直是一个比较大的问题。很想知道如何才能绘制出和论文一样好看的图像,以下是我学习的内容,也搬运了一些网站和教程在这里,请大家一起分享。
- 确认要画的图的类型
https://blog.youkuaiyun.com/u012890505/article/details/103753151 - 确认所画的图的排布方式
https://blog.youkuaiyun.com/qq_46110834/article/details/111461809 - 对于绘图有一定的审美基础
最终在绘制好看的论文图时,论文的图形的布局、颜色、线的粗细,都会需要考虑。 - 最终的保存
(1)在保存图像时,可以根据需要将图像保存为不同的格式,例如,如果最终用PPT作图,那么就将图像保存为svg格式的矢量图,这样拉扯1图像使其大小发生变化的时候,图像的质量也可以不会因为拉扯而变得模糊。
(2)我有很多的实验图,他们可以被插入成为组图。我希望代码可以更具我需要插入的图的个数,灵活排列组图,并且变更大小,且每一个插入的图,都有一个对应的标号,如a,b,c,d.
(2)在此基础上,每当我们插入新的图形时,都不会改变标号a,b,c,d的大小,这样,我们在论文中的每一幅图的标号都是等大的。 - 保存后使得图能够复审
意味着绘图的代码需要具备足够多的接口,在我们想对图进行微调的时候,能够找到对应的位置进行矫正,而不是每生成一次图,重新更改都需要花很大的功夫去改正。
绘图代码及详细解释
import matplotlib.pyplot as plt
from numpy.random import multivariate_normal
import math
# 使用相对专业的的图形风格
plt.style.use('seaborn-darkgrid')
# 设置显示中文
plt.rcParams['font.sans-serif'] = ['DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
def create_subplots(n, data, figure_size=(10,10)):
'''创建n个子图'''
# 计算子图的行数和列数
rows = int(math.sqrt(n))
cols = n // rows
cols += n % rows
# 创建图形和子图
fig, axs = plt.subplots(rows, cols, figsize=figure_size)
# 根据子图数量调整子图的位置
axs = axs.flatten()
for ax in axs[n:]:
fig.delaxes(ax)
for i in range(n):
axs[i].scatter(data[:, 0], data[:, 1], color='g', linewidth=0.5)
axs[i].set_title(chr(97+i)) # 使用ASCII值97(a)+ i作为标题
# 紧致布局
plt.tight_layout()
# 保存图形,使用SVG格式和300 dpi的分辨率
plt.savefig('my_figure.svg', format='svg', dpi=300)
# 显示图形
plt.show()
# 生成数据
X = multivariate_normal(mean=[0, 0],
cov=[[1, -0.6],
[-0.6, 1]],
size=200)
# 在10x10的画布上创建9个子图
create_subplots(9, X, figure_size=(10,10))