科研论文中用什么软件作图最好?
科研论文中用什么软件作图最好? 演示如何用 Matlab 绘制常见的高质量论文插图;2022-3-13,更新绘图案例
先睹为快
[*]二维曲线图
[*]二维散点图
[*]二维渐变色图
[*]二维条形图
[*]二维填充图
[*]多 Y 轴图
[*]二维场图
[*]带箭头曲线图
[*]三维曲线图
[*]三维散点图
[*]伪彩图
[*]裁剪伪彩图
[*]等高线图
[*]等高线填充图
[*]矢量场图
[*]伪彩图+投影图
[*]条形分布图
[*]热图
[*]分子模型图
[*]分形图
[*]曲线斜线填充
[*]曲面贴图
[*]自定义颜色图
[*]gif 动态图
[*]方程曲线图
[*]极坐标图
[*]不相交随机圆
[*]BP 神经网络图
[*]小圆构成的圆环
[*]棋盘格
二维曲线
二维曲线算是最最常见的一种曲线了,它能反应两个变量的因果关系;
clear;clc;close all;
x = linspace(1, 200, 100);
y1 = log(x) + 1;
y2 = log(x) + 2;
figure;
plot(x, y1);
hold on
plot(x, y2, 'LineWidth', 2);
hold off
legend('y1', 'y2');
调整线的粗细,给人感觉就不一样;
或者说这个颜色可能你觉得不好看,查阅帮助文档里给的的标准颜色也都不喜欢;
没关系,我整理了 28 种个人觉得比较好看的颜色,自行做一下颜色搭配,一般够用了;
【061 Matlab 基础】推荐28种超好看的淡色figure;
plot(x, y1, 'LineWidth', 2, 'Color', );
hold on
plot(x, y2, 'LineWidth', 2, 'Color', );
hold off
legend('y1', 'y2');
二维散点图
常用来比较理论数据和实验数据的趋势关系;
figure;
y3 = y1 + rand(1, 100) - 0.5;
plot(x, y1, 'LineWidth', 2, 'Color', );
hold on
% 设置数据点的形状、数据点的填充颜色、数据点的轮廓颜色
plot(x, y3, 'o', 'LineWidth', 2, 'Color', , 'MarkerFaceColor', , 'MarkerEdgeColor', );
hold off
二维渐变色图
用不同的颜色、数据点大小表征不同数值,更加直观;
更详细的案例分析:
【048 绘图】Matlab 绘制渐变色曲线、填充渐变色% 先自己做一个 colormap
c_map =[0.00, 0.36, 0.67
0.68, 0.42, 0.89
0.44, 0.62, 0.98
0.10, 0.67, 0.59
0.99, 0.57, 0.59
0.28, 0.55, 0.86
0.96, 0.62, 0.24
0.30, 0.90, 0.56
0.12, 0.46, 0.71
0.46, 0.63, 0.90
0.96, 0.37, 0.40
0.14, 0.76, 0.71
0.99, 0.50, 0.02
0.00, 0.57, 0.76
0.35, 0.90, 0.89
0.17, 0.62, 0.47
0.21, 0.21, 0.67
0.99, 0.49, 0.00
0.98, 0.74, 0.44
0.97, 0.60, 0.58
0.18, 0.62, 0.17
0.68, 0.87, 0.53
0.12, 0.46, 0.70
0.65, 0.79, 0.89
0.95, 0.99, 0.69
0.74, 0.92, 0.68
0.37, 0.81, 0.72
0.01, 0.72, 0.77];
scatter(x, y3, x, x, 'filled');
colormap(c_map);
figure;
fill(, , , 'EdgeColor', 'interp', 'LineWidth', 2);
条形图
正常条形图没啥好说的,这里演示绘制带有误差线的柱状图:
figure;
m = 5;
n = 3;
x = 1:m;
y = rand(m, n) + 2;
% 误差限
neg = rand(m, n);
pos = rand(m, n);
% 绘制柱状图
h = bar(x, y);
% 设置三个系列颜色
h(1, 1).FaceColor = ;
h(1, 2).FaceColor = ;
h(1, 3).FaceColor = ;
% 单独设置第二个系列第二个柱子颜色
h(1, 2).FaceColor = 'flat';
h(1, 2).CData(2,:) = ;
% 获取误差线 x 值
xx = zeros(m, n);
for i = 1 : n
xx(:, i) = h(1, i).XEndPoints';
end
% 绘制误差线
hold on
errorbar(xx, y, neg, pos, 'LineStyle', 'none', 'Color', 'm', 'LineWidth', 1.5);
hold off
% 绘制图例
legend({'A1', 'A2', 'A3'});
% 设置 x 轴标签
set(gca, 'XTickLabel', {'label1', 'label2', 'label3', 'label4', 'label5'});
填充图
x = 0.4:0.1:2*pi;
y1 = sin(2*x);
y2 = sin(x);
% 确定 y1 和 y2 的上下边界
maxY = max();
minY = min();
% 确定填充多边形,按照顺时针方向来确定点
% fliplr 实现左右翻转
xFill = ;
yFill = ;
figure
fill(xFill, yFill, );
hold on
% 绘制轮廓线
plot(x, y1, 'k', 'LineWidth', 2)
plot(x, y2, 'k', 'LineWidth', 2)
hold off
% 函数交叉区域填充
figure;
% 这是三个方程
g1 = @(x,y) 1 - x.^2.*y/20;
g2 = @(x, y) 1 - (x+y-5).^2/30 - (x-y-12).^2/120;
g3 = @(x, y) 1 - 80./(x.^2 + 8*y + 5);
% 把他们的图像画出来
h1 = fimplicit(g1, , 'LineWidth', 2);
hold on
h2 = fimplicit(g2, , 'LineWidth', 2);
h3 = fimplicit(g3, , 'LineWidth', 2);
legend('g1', 'g2', 'g3');
% 问题来了,这个 y 值怎么确定
x1 = h1.XData;
y1 = h1.YData;
x2 = h2.XData;
y2 = h2.YData;
x3 = h3.XData;
y3 = h3.YData;
% 发现 x1, x2 是从大到小的,逆序搞一下
x1 = fliplr(x1);
x2 = fliplr(x2);
y1 = fliplr(y1);
y2 = fliplr(y2);
% 接下来,确定相交区域,主要看这三个关键点:g1-g2, g1-g3, g2-g3
% 数据长度不一样,难搞了,借助【数据提示】功能吧
pt1 = ;
pt2 = ;
pt3 = ;
% 确定三个范围
idx1 = find(x1 >= pt1(1) & x1 < pt2(1));
idx2 = find(x2 >= pt1(1) & x2 < pt3(1));
idx3 = find(x3 >= pt3(1) & x3 < pt2(1));
x1 = x1(idx1);
x2 = x2(idx2);
x3 = x3(idx3);
y1 = y1(idx1);
y2 = y2(idx2);
y3 = y3(idx3);
% 一定要是一个闭环
xFill = ;
yFill = ;
fill(xFill, yFill, );
hold off
多 Y 轴图
figure;
load(&#39;accidents.mat&#39;,&#39;hwydata&#39;)
ind = 1:51;
drivers = hwydata(:,5);
yyaxis left
scatter(ind, drivers, &#39;LineWidth&#39;, 2);
title(&#39;Highway Data&#39;);
xlabel(&#39;States&#39;);
ylabel(&#39;Licensed Drivers (thousands)&#39;);
pop = hwydata(:,7);
yyaxis right
scatter(ind, pop, &#39;LineWidth&#39;, 2);
ylabel(&#39;Vehicle Miles Traveled (millions)&#39;);
figure;
x = linspace(0,10);
y1 = 2*sin(3*x);
y2 = sin(3*x).*exp(0.5*x);
%% 三个纵坐标演示,更多纵坐标可以按照此方法类推
y3 = 10*cos(3*x);
% 控制 aies 的大小和位置,注意是相对于figure的,范围为
% 三条线绘制到一起,注意数据都标准化到 y1 范围
maxY1 = max(y1);
maxY2 = max(y2);
maxY3 = max(y3);
minY1 = min(y1);
minY2 = min(y2);
minY3 = min(y3);
newY2 = (y2 - minY2)/(maxY2 - minY2); % 归一化
newY2 = newY2*(maxY1 - minY1) + minY1;% 反归一化
newY3 = (y3 - minY3)/(maxY3 - minY3);
newY3 = newY3*(maxY1 - minY1) + minY1;
% 画线
axes(&#39;position&#39;, );
plot(x, y1, &#39;k&#39;, x, newY2, &#39;r&#39;, x, newY3, &#39;ob--&#39;)
ylabel(&#39;line1&#39;);
% 绘制另外两个空的坐标轴
h2 = axes(&#39;position&#39;, );
% 重复绘制,曲线颜色用白色,和figure背景色一致,看不出来即可
plot(x, y2, &#39;w&#39;)
% 颜色,位置,曲线标签
set(h2, &#39;ycolor&#39;, &#39;r&#39;, &#39;yaxislocation&#39;, &#39;right&#39;, &#39;xtick&#39;, [])
% 不知道为啥2018B版本边界显示不清楚,所以画一条线
hold on
limX2 = get(h2, &#39;Xlim&#39;);
limY2 = get(h2, &#39;Ylim&#39;);
plot(, limY2, &#39;r&#39;);
hold off
% 取消边框
box off
ylabel(&#39;line2&#39;);
%
h3 = axes(&#39;position&#39;, );
plot(x, y3, &#39;w&#39;)
set(h3, &#39;ycolor&#39;, &#39;b&#39;, &#39;yaxislocation&#39;, &#39;right&#39;, &#39;xtick&#39;, [])
hold on
limX3 = get(h3, &#39;Xlim&#39;);
limY3 = get(h3, &#39;Ylim&#39;);
plot(, limY3, &#39;b&#39;);
hold off
box off
ylabel(&#39;line3&#39;);
% 取消坐标轴的颜色,和figure统一
% set(h1, &#39;color&#39;,&#39;none&#39;)
% set(h2, &#39;color&#39;,&#39;none&#39;)
% set(h3, &#39;color&#39;,&#39;none&#39;)
% figure背景设置成白色
set(gcf,&#39;color&#39;,&#39;white&#39;);
二维场图
% 直接把 streamline 函数的帮助文档 demo 拷贝过来
= meshgrid(0:0.1:1, 0:0.1:1);
u = x;
v = -y;
startx = 0.1:0.1:0.9;
starty = ones(size(startx));
% 需要获取所有流线的属性
figure;
quiver(x, y, u, v);
streamline(x, y, u, v, startx, starty);
带箭头曲线
% 直接把 streamline 函数的帮助文档 demo 拷贝过来
figure;
= meshgrid(0:0.1:1, 0:0.1:1);
u = x;
v = -y;
startx = 0.1:0.1:0.9;
starty = ones(size(startx));
% 需要获取所有流线的属性
lines = streamline(x, y, u, v, startx, starty);
% 下面开始画箭头,涉及到坐标的转换
% 获取 Axes 位置
posAxes = get(gca, &#39;Position&#39;);
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 获取 Axes 范围
limX = get(gca, &#39;Xlim&#39;);
limY = get(gca, &#39;Ylim&#39;);
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
% 遍历,逐条流线加箭头
for i = 1 : length(lines)
% 获取每条流线的数据
xData = lines(i).XData;
yData = lines(i).YData;
% 这里取的是最后两个点,一定要是相邻的两个点用来确定箭头方向
x0 = xData(end-1 : end);
y0 = yData(end-1 : end);
% 转换坐标到相对于figure的坐标
xNew = posX + (x0 - minX) / (maxX - minX) * width;
yNew = posY + (y0 - minY) / (maxY - minY) * height;
% 画箭头
hold on
annotation(&#39;arrow&#39;, xNew, yNew, &#39;color&#39;, &#39;b&#39;);
end
hold off
title(&#39;带箭头的流线图&#39;);
三维曲线图
figure;
t = 0:pi/20:10*pi;
xt = sin(t);
yt = cos(t);
plot3(xt, yt, t, &#39;-o&#39;, &#39;Color&#39;, &#39;b&#39;, &#39;MarkerSize&#39;, 10, &#39;MarkerFaceColor&#39;, &#39;#D9FFFF&#39;);
figure;
x = -20:10:20;
y = 0:100;
% 随便生成的 5 组数据,也就是目标图上的 5 条曲线数据
z = zeros(5, 101);
z(1, 1:10:end) = linspace(1, 10, 11);
z(2, 1:10:end) = linspace(1, 20, 11);
z(3, 1:10:end) = linspace(1, 5, 11);
z(4, 5:10:end) = linspace(1, 10, 10);
z(5, 80:2:end) = linspace(1, 5, 11);
for i = 1:5
% x 方向每条曲线都是一个值,重复 y 的长度这么多次
xx = x(i)*ones(1, 101);
% z 方向的值,每次取一条
zz = z(i, :);
% plot3 在 xyz 空间绘制曲线,保证 x y z 长度一致即可
plot3(xx, y, zz, &#39;LineWidth&#39;, 2);
hold on
end
hold off
legend(&#39;line1&#39;, &#39;line2&#39;, &#39;line3&#39;, &#39;line4&#39;, &#39;line5&#39;);
% 如果把渐变曲线和三维曲线结合起来
figure;
x = linspace(0, 2*pi, 50);
y = sin(x);
fill3(, , , , &#39;EdgeColor&#39;, &#39;interp&#39;, &#39;LineWidth&#39;, 2)
hold on
for i = 2 : 5
if mod(i, 2) == 0
y = sin(2*x);
fill3(, , , , &#39;EdgeColor&#39;, &#39;interp&#39;, &#39;LineWidth&#39;, 2)
else
y = sin(10*x);
fill3(, , , , &#39;EdgeColor&#39;, &#39;interp&#39;, &#39;LineWidth&#39;, 2)
end
end
hold off
三维散点图
figure;
= sphere(16);
x = ;
y = ;
z = ;
S = repmat(,numel(X), 1);
C = repmat(, numel(X), 1);
s = S(:);
c = C(:);
h = scatter3(x, y, z, s, c);
h.MarkerFaceColor = ;
x = linspace(1, 200, 100);
y1 = log(x) + 1;
y2 = log(x) + 2;
y3 = y1 + rand(1, 100) - 0.5;
figure;
scatter3(x, y2, y3, x, x, &#39;filled&#39;);
colormap(c_map);
三维伪彩图
= peaks(30);
figure;
plot1 = subplot(1,2,1);
surf(x, y, z);
% 获取第一幅图的 colormap,默认为 parula
cMap = colormap;
plot2 = subplot(1,2,2);
surf(x, y, z);
% 下面设置的是第二幅图的颜色,默认是整个 figure 的
colormap(hot);
% 设置第一幅图颜色显示为 parula
set(plot1, &#39;Colormap&#39;, cMap);
% 一个坐标轴
figure;
h1 = surf(x, y, z);
freezeColors;
hold on
h2 = surf(x, y, z + 5);
hold off
colormap(hot);
裁剪伪彩图
figure;
n = 300;
= peaks(n);
subplot(2, 2, )
surf(x, y, z);
shading interp
view(0, 90)
for i = 1:n
for j = 1:n
if x(i, j)^2 + 2 * y(i, j)^2 > 6 && 2 * x(i, j)^2 + y(i, j)^2 < 6
z(i, j) = NaN;
end
end
end
subplot(2, 2, 2)
surf(x, y, z);
shading interp
view(0, 90)
subplot(2, 2, 4)
surf(x, y, z);
shading interp
等高线图
figure;
= peaks;
subplot(2, 2, 1);
contour(X, Y, Z, 20, &#39;LineWidth&#39;, 2);
subplot(2, 2, 2);
contour(X, Y, Z, &#39;--&#39;, &#39;LineWidth&#39;, 2)
subplot(2, 2, 3);
v = ;
contour(X, Y, Z, v, &#39;LineWidth&#39;, 2);
x = -2:0.2:2;
y = -2:0.2:3;
= meshgrid(x, y);
Z = X.*exp(-X.^2-Y.^2);
subplot(2, 2, 4);
contour(X, Y, Z, &#39;ShowText&#39;,&#39;on&#39;, &#39;LineWidth&#39;, 2);
figure(&#39;Position&#39;, );
subplot(1, 3, 1);
= sphere(50);
contour3(X, Y, Z, &#39;LineWidth&#39;, 2);
= meshgrid(-2:0.25:2);
Z = X.*exp(-X.^2-Y.^2);
subplot(1, 3, 2);
contour3(X, Y, Z, [-0.2 -0.1 0.1 0.2], &#39;ShowText&#39;, &#39;on&#39;, &#39;LineWidth&#39;, 2)
= peaks;
subplot(1, 3, 3);
contour3(X, Y, Z, , &#39;LineWidth&#39;, 2);
等高线填充图
figure;
subplot(2, 2, 1);
= peaks(50);
contourf(X, Y, Z);
subplot(2, 2, 2);
contourf(X, Y, Z,&#39;--&#39;);
% 限定范围
subplot(2, 2, 3);
contourf(X, Y, Z, , &#39;ShowText&#39;, &#39;on&#39;);
subplot(2, 2, 4);
contourf(X, Y, Z,);
三维矢量场图
figure;
= peaks(30);
% 矢量场,曲面法线
= surfnorm(X, Y, Z);
% 箭头长度、颜色
quiver3(X, Y, Z, U, V, W, 0.5, &#39;r&#39;);
hold on
surf(X,Y,Z);
xlim([-3, 3]);
ylim([-3, 3.2]);
shading interp
hold off
view(0, 90);
伪彩图+投影图
clear;clc;close all;
x = linspace(-3, 3, 30);
y = linspace(-4, 4, 40);
= meshgrid(x, y);
Z = peaks(X, Y);
Z(5:10, 15:20) = 0;
z1 = max(Z);
z2 = max(Z, [], 2);
figure;
subplot(3, 3, );
plot(x, z1, &#39;LineWidth&#39;, 2);
subplot(3, 3, );
plot(z2, y, &#39;LineWidth&#39;, 2);
subplot(3, 3, );
surf(x, y, Z);
xlim([-3, 3]);
ylim([-4, 4]);
view(0, 90);
shading interp
figure;
% 3*3 布局
tiledlayout(3, 3, &#39;TileSpacing&#39;, &#39;Compact&#39;);
% 占据 1*2,也就是 1 2
nexttile();
plot(x, z1, &#39;LineWidth&#39;, 2);
% 从第 6 个开始,占据 2*1,也就是 6 和 9
nexttile(6, );
plot(z2, y, &#39;LineWidth&#39;, 2);
% 从第 4 个开始,占据 2*2,也就是 4 5 7 8
nexttile(4, );
surf(x, y, Z);
xlim([-3, 3]);
ylim([-4, 4]);
view(0, 90);
shading interp
条形分布图
clear;clc;
x = linspace(-10, 10, 100);
y = gauss(100, 5) ;
figure;
% 设置边缘颜色和宽度
bar(x, y, &#39;EdgeColor&#39;, &#39;none&#39;, &#39;BarWidth&#39;, 1);
热图
clear;clc;
z = rand(50);
z(z >= 0.0 & z < 0.6) = 0.5;
z(z >= 0.6 & z < 0.8) = 0.7;
z(z >= 0.8 & z <= 1) = 0.9;
for i = 1:30
z(randi(50, 1, 1) : end, i) = nan;
end
for i = 31:50
z(30 + randi(20, 1, 1) : end, i) = nan;
end
z(20:25, 40:45) = nan;
figure;
% ax = surf(z);
ax = pcolor(z);
view(0, 90);
ax.EdgeColor = ;
axis off
figure;
for i = 1:50
for j = 1:50
if ~isnan(z(i, j))
x = ;
y = ;
c1 = &#39;w&#39;;
c2 = &#39;w&#39;;
if z(i, j) >= 0.1
c1 = &#39;black&#39;;
c2 = ;
if z(i, j) >= 0.6
c2 = ;
if z(i, j) >= 0.8
c2 = ;
end
end
end
patch(x, y, c2, &#39;EdgeColor&#39;, c1);
end
end
end
axis off
分子模型图
clear;clc;
% 球面的坐标信息,为了看起来平滑一点,给到 100
= sphere(100);
% C 大小
C = 10;
% H 大小
H = 5;
figure;
% 大球
surf(C*x, C*y, C*z, &#39;FaceColor&#39;, &#39;red&#39;, &#39;EdgeColor&#39;, &#39;none&#39;)
hold on
% 四个小球,都偏离一点位置,准确的位置需要计算,这里演示一个大概位置
surf(H*x, H*y, H*z + 10, &#39;FaceColor&#39;, &#39;blue&#39;, &#39;EdgeColor&#39;, &#39;none&#39;);
surf(H*x + 10, H*y, H*z - 3, &#39;FaceColor&#39;, &#39;blue&#39;, &#39;EdgeColor&#39;, &#39;none&#39;);
surf(H*x - 4, H*y - 10, H*z - 3, &#39;FaceColor&#39;, &#39;blue&#39;, &#39;EdgeColor&#39;, &#39;none&#39;);
surf(H*x - 4, H*y + 10, H*z - 3, &#39;FaceColor&#39;, &#39;blue&#39;, &#39;EdgeColor&#39;, &#39;none&#39;);
% 坐标轴设置
axis equal off
% 光源,看起来更有立体感
light
lighting gouraud
分形图
clear;clc;
n = 1000;
m = 1000;
f = @(z) z^8 - 1;
df = @(z) 8*z^7;
= meshgrid(linspace(-2, 2, n), linspace(-2, 2, m));
A = nan(n, m);
for i = 1:n
for j = 1:m
z0 = X(i, j) + 1i*Y(i, j);
% Newton-Raphson
z = z0;
ite = 0;
fz = f(z);
while abs(fz) > 1e-6 && ite < 20
z = z - f(z)/df(z);
fz = f(z);
ite = ite + 1;
end
A(i, j) = ite;
end
end
figure;
pcolor(X, Y, A);
% hold on
% plot(, , &#39;.k&#39;, &#39;MarkerSize&#39;, 20);
% hold off
shading flat
axis tight manual
% xlim([-0.5, 0]);
% ylim();
% 保存成视频
% set(gca, &#39;nextplot&#39;, &#39;replacechildren&#39;);
% v = VideoWriter(&#39;NRfractal.avi&#39;);
% open(v);
% for k = 1:20
% pcolor(X, Y, A);
% shading flat
% xlim([-2*(1-k/25), 2*(1-k/25)]);
% ylim([-2*(1-k/25), 2*(1-k/25)]);
% frame = getframe(gcf);
% writeVideo(v, frame);
% end
% (-0.19, 0.6557)
% (-0.1, 0.651)
% zx = zx*zx - zy*zy + cx
% zy = 2*zx*zy+cy
c = - 0.1 + 1i*0.651;
radius = 32;
= meshgrid(linspace(-1.5, 1.5, n), linspace(-1.5, 1.5, m));
A = nan(n, m);
for i = 1:n
for j = 1:m
z = X(i, j) + 1i*Y(i, j);
% Julia
for ite = 1:1000
z = (z*z + c) ;
if abs(z) > radius
break;
end
end
A(i, j) = ite;
end
end
figure;
pcolor(X, Y, A);
shading flat
axis tight manual
曲线斜线填充
【058 基础】用 Matlab 绘制带有X轴和Y轴箭头以及斜线填充的曲线图曲面贴图
clear;clc;
figure;
% 读取地图文件
image = imread(&#39;World.jpg&#39;);
% 生成一个球面数据
= sphere(200);
% 绘制球体
p = surf(x, y, z);
% 去网格线
shading interp;
p.CData = image;
% 纹理贴图
p.FaceColor = &#34;texturemap&#34;;
axis equal;
axis off
% 光源,看起来更有立体感
% light
% lighting gouraud
% 光源颜色
handle = light(&#39;Color&#39;, );
t = 0;
while t < 100
t = t + 1;
view();
lightangle(handle, t, 0);
pause(0.01);
end
自定义颜色图
clear;clc;
N = 500;
z = peaks(N);
% 选择 ROI 以外的不显示
for i = 1:N
for j = 1:N
if sqrt((i - N/2)*(i - N/2) + (j - N/2)*(j - N/2)) > 240
z(i, j) = nan;
end
end
end
% 自定义颜色 大概就是给特定范围值指定颜色
N = 14 * 5;
crange = linspace(-6, 8, N);
cmap = zeros(N, 3);
for i = 1:N
if crange(i) <= 0
cmap(i, :) = ;
elseif crange(i) <= 3
cmap(i, :) = ;
elseif crange(i) <= 6
cmap(i, :) = ;
else
cmap(i, :) = ;
end
end
figure;
surf(z)
colormap(cmap);
% 去网格
shading interp
% 视角
view(0, 90);
% 去坐标轴
axis off
gif 动态图
clear; clc;
x = 0:0.01:1;
n = 1:9;
len = length(n);
im = cell(1, len);
% 单独显示每个图
figure;
for idx = 1:len
subplot(3, 3, idx)
plot(x, x.^idx, &#39;LineWidth&#39;,3)
title([&#39;y = x^&#39;, num2str(idx)])
end
% 获取绘制对象
fig = figure(1);
for idx = 1:len
y = x.^idx;
plot(x, y, &#39;LineWidth&#39;, 3)
title([&#39;y = x^&#39;, num2str(n(idx))])
% drawnow
% pause(0.1);
frame = getframe(fig);
im{idx} = frame2im(frame);
end
% 输出文件名
% filename = &#39;testAnimated.gif&#39;;
% for idx = 1:len
% % 制作gif文件,图像必须是index索引图像
% = rgb2ind(im{idx}, 256);
% if idx == 1
% imwrite(A, map, filename, &#39;gif&#39;, &#39;LoopCount&#39;, Inf, &#39;DelayTime&#39;, 0.3);
% else
% imwrite(A, map, filename, &#39;gif&#39;, &#39;WriteMode&#39;, &#39;append&#39;, &#39;DelayTime&#39;, 0.3);
% end
% end
方程曲线图
% 二元方程x^2*cos(y) + x*sinh(y^2) = 0
xy = linspace(-2, 2, 4);
f = @(x, y) x.^2.*cos(y) + x.*sinh(y.^2);
figure
fimplicit(f, [-2, 2]);
【027】函数可视化极坐标图
figure;
theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
tiledlayout(1, 2);
nexttile;
polarplot(theta, rho, &#39;c&#39;, &#39;LineWidth&#39;, 2);
nexttile;
rMax = 2*max(rho);
% 这个看不到线,因为只有一个重复的点
polarplot(, );
hold on
polarplot(theta, rho, &#39;m&#39;, &#39;LineWidth&#39;, 2);
hold off
不相交随机圆
clear;clc;close all;
% 限定范围
width = 10;
height = 10;
% 最多产生的圆的个数
circleNumber = 100;
% 记录每个圆的横坐标、纵坐标、半径
paras = zeros(circleNumber, 3);
num = 0;
hold on
while num < circleNumber
num = num + 1;
% 圆半径小于1或者设定为固定值
r = rand;
% 在范围内随机坐标
xPos = rand*(width-2*r) + r;
yPos = rand*(height-2*r) + r;
% 记录坐标、半径
paras(num,:) = ;
% 判断每个圆的位置是否不相切、不相交
if num > 1
% 新产生的圆和之前产生的所有圆计算距离
xs = paras(1:num - 1, 1);
ys = paras(1:num - 1, 2);
rs = paras(1:num - 1, 3);
dist1 = sqrt((xPos - xs).^2 + (yPos - ys).^2);
dist2 = abs(r + rs);
% 如果相离则绘制当前产生的圆,否则就重新生成一个圆
if all(dist1 > dist2)
rectangle(&#39;Position&#39;, , &#39;Curvature&#39;, );
axis equal
else
r = rand;
xPos = rand*(width-2*r) + r;
yPos = rand*(height-2*r) + r;
paras(num,:) = ;
% 防止死循环
temp = 0;
maxTry = 100;
while any(dist1 <= dist2) && temp < maxTry
temp = temp + 1;
dist1 = sqrt((xPos - xs).^2 + (yPos - ys).^2);
dist2 = abs(r + rs);
end
if all(dist1 > dist2)
rectangle(&#39;Position&#39;, , &#39;Curvature&#39;, );
axis equal
end
end
end
end
axis()
box on
hold off
BP 神经网络图
figure;
x1 = ones(1, 5);
x2 = 2 * ones(1, 11);
x3 = 3 * ones(1, 8);
y1 = 4:8;
y2 = 1:11;
y3 = 2.5:9.5;
for i = 1:5
for j = 1:11
plot(, , &#39;k&#39;);
hold on
end
end
for i = 1:11
for j = 1:8
plot(, , &#39;k&#39;);
end
end
scatter(x1, y1, 200, &#39;k&#39;, &#39;MarkerFaceColor&#39;, &#39;r&#39;);
scatter(x2, y2, 200, &#39;k&#39;, &#39;MarkerFaceColor&#39;, &#39;y&#39;);
scatter(x3, y3, 200, &#39;k&#39;, &#39;MarkerFaceColor&#39;, &#39;k&#39;);
plot(, , &#39;k--&#39;);
plot(, , &#39;k--&#39;);
hold off
axis off
text(1.5, 11.75, &#39;输入层&#39;);
text(2, 11.75, &#39;隐藏层&#39;);
text(2.5, 11.75, &#39;输出层&#39;);
小圆构成的圆环
clear;clc;
x0 = 0;
y0 = 0;
r1 = 2;
r2 = 1;
theta = 0:pi/50:2*pi;
for i = 1:length(theta)
% 系列小圆的圆心坐标 极坐标方式
x = x0 + r1 * cos(theta(i));
y = y0 + r1 * sin(theta(i));
% 以小圆圆心画圆 极坐标方式
xx = x + r2 * cos(theta);
yy = y + r2 * sin(theta);
plot(xx, yy, &#39;k&#39;);
hold on
end
hold off
% 限定显示范围
xlim([-3, 3]);
ylim([-3, 3]);
% x y 轴等宽
axis equal
% 紧凑
axis tight
棋盘格
figure;
% 生成数据点
= meshgrid(30:39);
x = x(:);
y = y(:);
scatter(x, y, 100, &#39;red&#39;);
hold on
% 随机填充几个点
number = 5;
index_x = randi(9, 1, number) + 30;
index_y = randi(9, 1, number) + 30;
scatter(index_x, index_y, 100, &#39;blue&#39;, &#39;MarkerFaceColor&#39;, &#39;blue&#39;);
hold off
% 显示网格
grid on
% 网格属性
set(gca, &#39;GridAlpha&#39;, 1, &#39;GridColor&#39;, , &#39;GridLineStyle&#39;, &#39;--&#39;);
墙裂推荐我自己!!
如果需要绘制化学结构式、反应机理,一定要试试“KingDraw”,专业化学绘图的国产软件,中文界面、没有广告弹窗、功能丰富,并且 完!全!免!费!
下载地址:www.kingdraw.com
丨免费、专业、多客户端、无版权困扰
KingDraw,是一款自主研发的国产化学绘图软件,安装简便,支持中文界面,兼容cdx、mol v2000、mol v3000等多种文件格式,并且拥有手机、平板、电脑多个客户端。绘图过程简单易上手,新手也可以随时轻松绘制化学结构式,记录反应流程。
KingDraw支持ACS 1996绘图模式,也根据需要自定义设置绘图模板,支持导出EMF、SVG、PNG格式图片,可以用于专业图像处理,以及出版物的编辑。
最重要的是,KingDraw是免费软件,与其它破解版软件相比,用KingDraw绘制图片没有任何版权困扰!
丨支持与Microsoft Office、WPS Office、ChemDraw的互通
KingDraw PC端支持与Microsoft Office、WPS Office、ChemDraw的互通,只要简单地复制粘贴,就可以将绘制内容复制到ChemDraw、Word、PowerPoint、WPS等文件中。
双击Microsoft Office、WPS Office文件内的结构式,可以二次编辑修改。轻松搞定你的论文配图~
KingDraw:如何将结构式复制到Word、PowerPoint等软件中13 赞同 · 4 评论文章13 赞同 · 4 评论文章13 赞同 · 4 评论文章13 赞同 · 4 评论文章13 赞同 · 4 评论文章13 赞同 · 4 评论文章14 赞同 · 4 评论文章14 赞同 · 4 评论文章KingDraw:KingDraw与ChemDraw互通升级!Word中的ChemDraw文件也能编辑~33 赞同 · 6 评论文章33 赞同 · 6 评论文章33 赞同 · 6 评论文章34 赞同 · 7 评论文章37 赞同 · 7 评论文章38 赞同 · 10 评论文章38 赞同 · 9 评论文章38 赞同 · 9 评论文章
丨功能丰富,适用于教学、科研多种场景
除了丰富的绘图功能,KingDraw还支持结构式图像识别、智能手势绘制、3D模型转换、结构式命名、化学属性计算、<a href="http://link.zhihu.com/?target=http%3A//baike.kingdraw.com/" class=" wrap external" target="_blank" rel="nofollow noreferrer">化合物信息查询(化合物百科)等多种功能,适用于日常工作学习、科研工作、教学活动等多种场景。
KingDraw PC:图像识别
KingDraw PC:化学属性计算
KingDraw PC:3D模型转换
丨下载地址:http://www.kingdraw.com
有兴趣的同学可以KingDraw官网【http://www.kingdraw.com】下载需要的客户端~
如果您有意见或者想要的功能,欢迎随时给我们留言,KingDraw的成长,需要您的声音~~
每个软件的侧重点,和出来的效果都不同呀,没有绝对的好不好~
可以对比看一下哪款软件的出图效果更符合你的需求,同时中和考虑一下每个软件的上手难度进行选择。
本文所有软件资源及教程,我都给大准备好了,有需要的话直接访问领取。免费的~
开门见山,我准备了200G科研绘图资料,囊括所有常见绘图软件,免费送给大家。一、Adobe AI
AI主要用于绘制各种示意图,三大刊上的精美封面效果都可以通过它来实现。
精美程度:★★★★★
上手难度:★★★★☆
AI的上手难度其实不算高,至少不用写代码,通过面板式操作就可以实现。主要难度来自于对软件基本功能的学习,只要花一周左右时间系统学习下AI的基础操作以及可实现的功能,跟着教程绘制几幅实战图,基本上就可以上手了。
难度天花板在于你要自己要清楚自己想画什么样的图,下面这些图的绘制其实难的都不是技术,主要是自己要有这个设计思维。
本文所介绍的十款软件,我都给大家找到了教程和资源工具包,记得看到文末领取哦~
小肠绒毛绘制
DNA缠绕蛋白
病毒侵染
二、PPT
对,就是你平时用的那个power point,没想到吧,他也能做科研绘图,而且还是做示意图的一把好手!
精美程度:★★★★★
上手难度:★★☆☆☆
相较于AI,PPT的上手难度更小了。很多功能其实都是大家平时接触过的,只是可能你还不知道还能这样做。学习成本属于十款软件中最低的,非常轻便易上手,并且输出的分辨率和图片的专业程度丝毫不输另外的专业软件。
信号通路图绘制
分子结构绘制
叶绿体绘制
三、Adobe PS
精美程度:★★★★★
上手难度:★★★★☆
其实PS和AI两者有很多相通之处,毕竟是都是来自Adobe家的。有什么区别呢?
PS制作的图片是位图,AI制作的图片是矢量图。说简单点,就是PS更侧重于修图,AI更侧重于绘图,拍摄的实验图想经过二次调整,调色/放大/调整清晰度这些操作都更加适合用PS来解决。
区域截取,调整比例
核酸电泳图处理
四、Origin
精美程度:★★★★★
上手难度:★★★☆☆
前面几款更侧重于示意图的绘制,而接下来的包括Origin都更偏向于作图和一些数据分析。
Origin上手难度不算大,可以将它理解为高级版本的excel,导入数据点点鼠标就可以出图。但是想要更加美观,就还是需要点审美能力滴。
提供几个配色网站供大家学习:
1、https://www.materialui.co/colors
2、https://coolors.co/browser/latest/1
3、https://www.materialpalette.com/colors
4、http://www.cookbook-r.com/Graphs/C
平滑三维曲面图
五、Graphpad Prism
精美程度:★★★★★
上手难度:★★☆☆☆
从数据统计到figure的完成,GraphPad Prism可以一条龙服务,几乎可以搞定大部分所需的统计与作图。
它也是面板操作,所以上手难度不高,可以说是十款中最简单的几款了。而且Graphpad自带的图片样式就比较好看,不需要做过多的参数上的调整。看我下面给的图片就能发现,整体上是那种极简主义风格的图片,我比较喜欢~
官方就有教程:Getting Started with Prism
拼图
六、Matlab
精美程度:★★★★★
上手难度:★★★★★
接下来开始进入上手难度魔鬼模式,虽然难度大,但是强也是真的强。操作基于代码进行,听听百度百科怎么说:
MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域厉害吧,专业吧。简单来说,Matlab是一个具有强大计算能力和仿真能力的数学软件。可以用来外理各种数据。统计规律,模拟各种物理模型。比如解方程等这些都可以完成。而且可引入计算机编程运行等。MATLAB内部有现成的一些常用的数值计算方法,例如牛顿法、高斯法等,同时MATLAB也可以进行符号运算,进行符号积分以及微分运算。
在绘图方面,Matlab拥有强大的绘图功能,内置了很多绘图函数,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。
图源:@王赟 Maigo
图源:@王赟 Maigo
七、Ggpolt
精美程度:★★★★★
上手难度:★★★★★
ggplot是R语言中内置的一个绘图包,所以要写代码无疑了。R语言是一种专门用于统计学领域进行数据分析的一种语法,可以很强大的进行数据处理,而加上ggplot这个包,让R语言的绘图能力直接站上新台阶!
虽然需要代码编写,但是R语言其实也并不算太难。最近我们出了R语言的筑基入门课,0代码经验的小白也能轻松上手。感兴趣的小伙伴可以点击链接学习:
R语言医学统计入门课,免费领!限200名额!完全免费的,完全免费的,放心入,放心入,学过都说好!
八、Matplotlib
精美程度:★★★★★
上手难度:★★★★★
提到python绘图,那肯定就是Matplotlib了。数据分析方面:R更加小而专(尤其是涉及临床常用的经典的统计方法时); python适用于超大规模数据的计算,前沿算法的实现。
代码的学习,前期都比较痛苦,任何一个需要用代码绘图的软件对于新手来说都不简单。但是坚持学下去的话,得到的收获也不是前面简单的软件可以比拟的。文末我提供的福利包里都有相关教程的学习。
九、Latex
精美程度:★★★★★
上手难度:★★★☆☆
结尾来两款稍微简单点的,恢复一下科研信心。
LaTeX 是一种基于 ΤΕΧ 的排版系统,所以它实现的是纯粹的可视化,而不能进行数据分析。但是就画图而言,他能做的还是挺多的:
https://github.com/HarisIqbal88/PlotNeuralNet
十、Visio
精美程度:★★★★★
上手难度:★★☆☆☆
visio是微软旗下的一款专门用于画流程图的软件,可以用它来绘制项目的进行流程等,但如果应用得当的话,也可以用其中的元素进行更加复杂的示意图的拼接。如下:
以上十款就是在科研绘图中大多数人会选择到的主流绘图软件了,选择任一一款其实就可以满足我们大部分的可视化需求,如果你需要在可视化的同时兼具数据分析的能力,那就选择前八款;如果你需要比较强大的数据分析能力,那就选择第六七八款,基本上专业的数据分析师也就是用他们了。
文章的最后,我给大家找到了一个可以免费领取上述软件资源以及教程,有需要的话直接访问领取。
开门见山,我准备了200G科研绘图资料,囊括所有常见绘图软件,免费送给大家。
<hr/>推荐阅读:
如何制作一张好的学术海报(poster)?为什么你在使用R语言?Toedit:48个国内外文文献下载渠道汇总(附不限量下载入口) 很多人推荐的比较炫酷的绘图软件多半是生物、化学等学科领域的软件,很少有人推荐工程领域需要绘制实物模型、空间模型以及其他图表绘制软件。这里小E来推荐4个容易上手又很强大的绘图软件,让你的科研作图事半功倍。
1、 最易上手的绘制示意图软件:Microsoft Visio
获取网址:https://www.microsoft.com/zh-cn/microsoft-365/visio/flowchart-software/
作为微软办公套装全家桶系列的一员,Visio的名气相较于Word、Excel及PPT实在是小了很多,甚至比起OneNote、Outlook这些软件也略微逊色,但这不妨碍它成为微软最简单、几乎没有任何学习成本的绘图软件。根据官方的描述,它被定义成了一个用于制作流程图表、工作计划安排的辅助性软件。但真正接触使用过之后就知道,这款软件能做的事情远远不止官方定义的那么简单。对于简单的图片处理工作,例如颜色修改、注释添加、图片拆解、图片替换、概念图绘制等等内容,其实它都可以胜任。相较于Photoshop、Illustrator等动辄十几个G,对电脑配置有一定要求,学习成本极高的绘图软件来说,这款软件对小白极为友好,上手简单,效率颇高。例如以下两张图片,就是使用基本底图导入Visio绘制的:
2、 功能强大的图表绘制软件:Origin
获取网址:https://www.originlab.com/
作为科研界使用最广的图表制作软件,Origin几乎适用于所有的科研领域的数据分析和图表绘制,2d图表、3d图表、曲面图、瀑布图、空间坐标几乎所有的图表形式它都能做,尽管有一定的学习成本,但熟悉之后一定会感叹其功能之强大。悄悄提一句,哪怕是CNS(Cell、Nature、Science)中发表的许多论文,其中的图表都是用这款软件绘制的。以下是Origin绘制的一些示意图:
3、 地理信息绘制软件:ArcGis
获取地址:https://developers.arcgis.com/
相信大家对去年美国总统大选各州票数统计地图一定印象深刻,像上面这种可视化地图其实就可以用ArcGis这种地理信息绘制软件做出来。该软件可以通过信息集成+区域分类绘制可视化的地图信息,像上述这种地图就是一个很好的例子。此外,该软件还可以结合Python进行网络数据爬取、集成绘图。尽管有一定的学习成本,但是这款软件可以绘制出非常美观的可视化信息地图来,可以为你的论文增色不少。
4、 实物模型绘制软件:Sketch up/SolidWorks
获取网址:https://www.sketchup.com/ or
对于机械、土木、电气等工科专业的研究生来说,为了更好的说明某个装置的实际尺寸及空间结构,经常需要绘制这个装置设备的概念图、模型图,这个时候这两款软件就能派上用场了。这两款软件可以应用于建筑、施工、地貌测绘、城市信息等等诸多领域,甚至可以通过渲染制作视频特效,功能十分强大,许多高质量论文中的插图都是使用这两款软件进行绘制的。此外,由于这两款软件都是已经比较成熟了的商业软件,学习成本相对较低,可以在短时间内快速上手。同时他们也有丰富的插件助手,可以协助辅助绘图。
如果您担心自己绘制的图片达不到拟投稿期刊的要求,或者想让插图吸引编辑和审稿人的眼球,从而增大自己论文的接收概率,欢迎您了解并使用我们意得辑的图片优化服务。我们会雇佣专业的设计师对您的图片进行格式调整编排,同时还会协助您校对图片和文稿信息的一致性,确保满足对应期刊的投稿要求。意得辑拥有2000+名母语编辑,涵盖1300+门学科,近20年已服务200万+篇稿件。为您提供SCI 投稿指导服务,从文稿翻译、润色到选刊指导,更提供格式排版、投稿信撰写、附信审查等服务,涵盖投稿全过程,可以协助加速您的论文发表。让我们完成繁琐枯燥的论文发表流程,您则可以全身心关注于研究本身!
我是editage意得辑,每日一篇SCI干货,欢迎点赞收藏关注~
[*]润色翻译、发表指导
[*]手把手教你写论文
[*]学术大佬直播
[*]论文写作100个常见错误
PPT非常值得尝试,尤其对于小白、新手,极度友好!
相比于专业的大型软件,PPT有它自己独特的优势:
既可以做简单的3D建模,也可以画2D矢量图,有海量的免费素材使用,还可以利用PPT自带动画功能快速将静图转为原理动画。最重要的是,PPT入门门槛极低,人人都可以学会。
PPT做的图可以达到什么样的水平?如何学习呢?
我梳理了69篇教程,希望可以帮助到你:
Part 1:PPT科研绘图·新手必读
PPT3D绘图参数详解
论文3D插图从未如此简单:PPT的强大,只被发现了1%
PPT3D基础入门
PPT作图如何满足投稿要求?
投稿必知:论文插图素材版权及免版权图片下载
论文作图素材哪里下载:7个优质网站推荐
Part 2:常用效果&高频元素的制作
综述中环形图的PPT画法
文字圆形环绕和三维倾斜的PPT做法
环形箭头的PPT画法
放大效果的PPT画法
拖尾和反弹效果的PPT画法
快如闪电!PPT中抠图的3种方法
PPT一分钟搞定论文图片排版
图片融合效果的PPT做法
手势的PPT画法
水珠的PPT画法
波浪的PPT画法
搅拌效果的PPT画法
燃烧效果的PPT画法
光芒的PPT画法
光束的PPT画法
光的PPT画法(付费)
云/雾的PPT画法
ThreeD插件动画功能详解
Part 3:常用3D模型的制作
开孔泡沫/多孔结构的PPT画法
水凝胶的PPT画法
一分钟搞定球簇、球壳、胶束、纳米花、病毒
高分子网络的PPT画法
PPT画聚轮烷
图片3D弯曲效果的PPT做法
球棍型DNA的画法
注射器和电极的PPT画法
石墨烯的PPT画法
PPT画掺杂石墨烯
多层结构的PPT画法
骨架结构的PPT画法
水热反应釜(含剖面)的PPT画法
纳米花的另一种PPT画法
AI芯片的PPT画法
显示器和电脑主机的PPT画法
3D环状DNA的PPT画法
碳纳米管3D模型的PPT画法
3D弯曲纤维束结构的PPT画法
3D分子建模及其3D旋转动画(以碳纳米管为例)
空心金属簇3D模型的PPT画法
两种3D纳米微管的PPT画法
投影仪的PPT3D建模
标准正弦曲线的PPT画法
多孔结构的3分钟画法
Part 4:PPT与其他软件的联动
如何在PPT中修改Origin图表并添加动画
如何从图片中提取数据
如何用PPT中编辑他人论文的原图
7个ChemOffice高级技巧,让作图快10倍
科研绘图神器OKPlus插件使用教程
PPT快速绘制函数曲线
绘图硬件选择
你的作图装备,不是只电脑
Part 5:综合运用
期刊封面的设计思路与PPT制作方法
光路图的PPT画法
皮肤组织剖面图的PPT画法
厂房3D模型的PPT画法
Part 6:百尺竿头!跟Nature学画图系列教程
(1) 高质感小球的PPT画法
(2) 简单的图也有很多细节
(3) 褶皱细胞膜的PPT画法
(4) 死亡细胞、噬菌体、酶蛋白的PPT画法
(5) 《Nature》涂刮工艺的画法:一个99.9%的人不知道的作图技巧
(6) 河道地形图的PPT画法
(7) 透明质感树脂的PPT画法
(8)光束和闪电的PPT画法
(9)光电检测图的PPT画法
最后:
全网最全科研绘图素材、资源合集
页:
[1]