[编程开发] 那些漂亮的sci论文图一般用什么软件制作的?

[复制链接]
ˇ⒈般啲捣蛋 发表于 2023-10-25 22:29:09|来自:北京 | 显示全部楼层 |阅读模式
我在学AI,不知道是不是这个用的多一点。
全部回复5 显示全部楼层
x20134799u 发表于 2023-10-25 22:29:56|来自:北京 | 显示全部楼层
首先介绍两个资源: 1、Tips for Writing a Research Paper using LaTeX,https://github.com/guanyingc/latex_paper_writing_tips  由陈冠英老师维护,给LaTeX初学者提供多个图表排版的例子,方便用到自己的论文当中。附陈老师的知乎文章。  2、ML Visuals,里面包含100多个常用的神经网络的图,是google在线PPT的形式,下载地址  下面内容只分析科研作图,是我的一些个人想法,如果有不足可以留言指出。绘制表格可参考上面 陈老师 的文章。
审稿人看论文时非常容易关注论文里的图。论文里的图就是“第一印象”,规范的、高质量的图片是发表高水平文章的必备条件。个人感觉,论文里的图基本分为两种:模型图、数据展示图。

  • 模型图:论文的总体框架图、模块细节图、流程图等
  • 数据展示图: 展示数据的折线图、柱状图、散点图等
无论是哪种图,参考最近的CV顶会论文,配色一般是淡蓝、淡红、淡黄、淡绿 四种(彩虹一共才7种颜色,要体现对比就只能是这四种颜色了,汗 ... ... ),有时会用 紫色、灰色补充(紫色多用于模块,灰色多用于小区域或者大面积打底)。整个论文的配色风格需要一致,比如说后面的折线图、柱状图、散点图最好还是以前面框架的颜色一致。(如果前面模型图是淡蓝色,后面再出现过于鲜艳的其它颜色就有些突兀)
下面展示一些典型模型图的例子:










下面展示一些典型数据展示图的例子:










1、模型图

论文里的模型架构图一般我会使用PPT来画。下面的图来自Yongming Rao 在 ECCV2022的AMixer,使用PPT画下面的图是毫无压力的。这个图里也体现了一些作者的一些作图习惯。比如,图里不要出现过多的色彩,以蓝、黄、绿、红为主(色调都比较淡)。
推荐大家也多找一些优秀的论文图为模板,里面的颜色可以用截图来取(ALT+A可以调用微信的截图工具,能够看到每个元素的RGB色调)。也可以把图片粘贴到PPT里,用PPT里的滴管工具来取色。


我也阅读了Rao老师其它的论文,可以看到,他的论文绘图风格使用的色调、整体风格还是比较一致。
下图是CVPR022的DenseClip:


下图是NeurIPS2022 的 P2P:


这些图都是可以用PPT画出来的。需要注意的是:(1)色调不会很深,给人很舒服的感觉;(2)论文中需要给多个模块绘图,或者出现折线图、柱状图,颜色字体风格要前后一致。如果不一致会给人感觉很突兀。比如NeurIPS2022的P2P,因为使用了蓝、绿、紫、红、黄,在后面的实验里仍然使用这些颜色绘制柱状图,颜色字体也没有发生变化,风格非常一致(如下图)。(3)PPT文件可以直接导出为PDF,使用软件裁剪后即可插入到论文中,这样插入到论文里的是矢量图,效果非常好。(我买了wps会员,用wps pdf专业版裁剪的,如果有其他方式也可以)



P2P实验部分图



P2P实验部分图

2、数据展示图

除了模型架构图以外,常用的折线图、柱状图、散点图等等,我建议使用 AxGlyph 来绘制,官网:https://www.amyxun.com/ 这是一个收费软件,价格为 36元,不是特别贵,可以支持一下国产软件。
下图是我用AxGlyph画的一个折线图供大家参考,下载地址。


下图是我用AxGlyph画的一个柱状图供大家参考,下载地址。


当同时在论文里需要多个数据图、拆线图时,颜色也可以适当变化,如下图所示,效果也不错。


可以看出,AxGlyph绘制的图,是比 office 默认要美观的,而且支持直接导出为PDF,可以以矢量的形式直接在论文里使用。我最近论文里的一些展示数据的图也都是用AxGlyph绘制(如下图),效果比较好,所以向大家推荐这个工具。


3、总结

个人感觉,正常的科研做图,用好PPT(画框架)和 AxGlyph(画数据),完全足够了。科研人员就像作家写小说,展示出来好的内容给读者。必须承认,就跟导演拍电影一样,需要天份,天份高的拍出来好看,天份不够的拍出来难看。但是,模仿别人的论文做图风格,使用别人的论文做图配色,是不算抄袭的。建议大家以某个学者的论文为模板多积累,坚持下去会显著提高水平。
yomiko2004 发表于 2023-10-25 22:30:13|来自:北京 | 显示全部楼层
Matlab科研绘图案例,整理如下,多图长文,建议收藏。

Matlab案例代码解析

2. 典型绘图案例

2. 典型绘图案例
2.1  优雅的绘图颜色
2.1.1  颜色模板
2.1.2  定制colormap
2.2  二维绘图
2.2.1  曲线图、散点图
2.2.2  带有误差线的柱状图
2.2.3 简单曲线之间填充
2.2.4  复杂函数曲线之间填充
2.2.5  渐变色曲线、渐变色填充
2.2.6  带箭头曲线
2.2.7  多个Y轴
2.2.8  旋转多边形
2.2.9  带箭头流线
2.2.10  极坐标绘图技巧
2.2.11  条形分布图
2.3  三维绘图
2.3.1  给球面贴背景图
2.3.2  三维矢量场图
2.3.3  单独设置子图的colormap
2.3.4  曲面裁剪
2.3.5  三维曲线、散点图
2.3.6  等高线图
2.3.7  绘制伪彩图和投影图
2.4  四维绘图
2.4.1  slice切片显示
2.5  函数方程可视化
2.5.1  一元方程
2.5.2  二元方程
2.5.3  三元方程
2.6  特殊绘图
2.6.1  动态趋势线可视化
2.6.2  Newton-Raphson、Julia分形
2.6.3  分形树叶
2.6.4  在指定区域内随机生成不相交不相切的圆
2.6.5  创建gif动图
2.6.6  梯度下降法的下降方向
2.6.7  目标沿指定轨迹运动
2.6.8  看起来像拼接两个Axis
2.6.9  设置特殊的图例
2.6.10  甲烷模型
2.6.11  在随机圆里产生随机点
2.6.12  斜线填充的曲线
2.6.13  球板模型
2.6.14  BP神经网络图
2.6.15  由一系列圆构成的圆环
2.6.16  棋盘格
部分存图先睹为快















2.1  优雅的绘图颜色 2.1.1  颜色模板
绘图技巧固然很重要,一个漂亮的颜色模板更能锦上添花,60套绘图颜色模板分享出来,每套模板6种颜色,以下为第一套模板
<a data-draft-node="block" data-draft-type="link-card" href="http://zhuanlan.zhihu.com/p/444970597" data-size="small" data-image="http://pic3.zhimg.com/v2-d599163016a43cdd77e98e9da4d287a2_720w.jpg" data-entity-type="article" class="internal">【2.1.1 颜色模板】科研绘图必备的60套颜色模板

2.1.2  定制colormap
作为一名合格的科研工作者,绘制三维曲面图、伪彩图,怎么少得了自定义专属 colormap,呈现高端优美的视图效果,选择几种颜色,自动生成colormap,方法在这里
【2.1.2 定制colormap】科研绘图必备自定义colormap技巧 2.2  二维绘图 2.2.1  曲线图、散点图
二维曲线、散点图算是最最常见的一种曲线了,直接反应两个变量的因果关系,散点图常用来比较理论数据和实验数据的趋势关系;
设置线型(点线、虚线、实线、点虚线)、数据点标记(星号、圆、正方形等等)、线颜色、标记点颜色等等,使图形看起来更加优雅美观;
颜色设置格式:缩写字符(‘r’,固定颜色,种类较少);
                         十六进制字符串('#FD6D5A',种类不限,每种颜色都需要逐个设置);
                          RGB向量([0.5, 0.5, 0.5],种类不限,可设置颜色模板,使用最方便);
clear;clc;close all;
%%%%% 曲线图
x = 0:0.4:2*pi;
y = sin(x);
% 在一个 figure 中绘制多个子图,(2, 1, 1) 表示 2 行 1 列第 1 个子图
figure;
subplot(2, 1, 1)   
% 绘制一条曲线
plot(x, y, '-d', 'Color', 'r', 'MarkerEdgeColor', 'k', 'MarkerFaceColor', 'y',...
     'MarkerSize', 10, 'LineWidth', 2);
% d:表示倒置的菱形,-d表示用实线连接,r表示曲线红色,
% MarkerEdgeColor表示标记点轮廓颜色
%bMarkerFaceColor 表示标记点内部颜色
% MarkerSize 表示标记大小
% 各种线型、符号、颜色代码参考帮助,如下



% 第二幅子图
subplot(2, 1, 2)
% 绘制多条曲线
x = 1:4:100;
y = log(x);
for i = 1:6
    plot(x, y + i, 'o-', 'LineWidth', 2);
    hold on
end
hold off
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 修改默认的颜色模板
set(gca, 'colororder', all_themes{1});

%%%%% 散点图
figure;
x = linspace(1, 200, 100);
y1 = log(x) + 1;
y2 = y1 + rand(1, 100) - 0.5;
plot(x, y1, 'LineWidth', 2, 'Color', all_colors(1, :));
hold on
% 设置数据点的形状、数据点的填充颜色、数据点的轮廓颜色
plot(x, y2, 'o', 'LineWidth', 2, 'Color', all_colors(6, :), 'MarkerFaceColor', all_colors(6, :));
hold off2.2.2  带有误差线的柱状图


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 生成示例数据
m = 5;
n = 3;
x = 1:m;
y = rand(m, n) + 2;
% 误差限
neg = rand(m, n);
pos = rand(m, n);
% 单系列带有误差线的柱状图
figure;
bar(x, y(:, 1));
hold on
errorbar(x, y(:, 1), neg(:, 1), pos(:, 1), 'LineStyle', 'none', 'Color', 'k', 'LineWidth', 2);
hold off
% 多系列带有误差线的柱状图
figure;
% 绘制柱状图
h = bar(x, y);
% 设置每个系列颜色
for i = 1:length(h)
    h(1, i).FaceColor = all_colors(i, :);
end
% 单独设置第二个系列第二个柱子颜色
% 这行代码少不了
h(1, 2).FaceColor = 'flat';
h(1, 2).CData(2,:) = all_colors(6, :);
% 获取误差线 x 值
% 也就是 XEndPoints 的值
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', 'k', 'LineWidth', 2);
hold off
% 绘制图例
legend({'A1', 'A2', 'A3'});
% 设置 x 轴标签
set(gca, 'XTickLabel', {'label1', 'label2', 'label3', 'label4', 'label5'});
% 试试 barweb
figure;
barweb(y, neg, 1, {'label1', 'label2', 'label3', 'label4', 'label5'});完整版
【2.2.2 带有误差线的柱状图】Matlab科研论文作图2.2.3 简单曲线之间填充


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 生成数据
x = linspace(0, 2*pi, 100);
y = sin(2*x);
figure
subplot(1, 2, 1)
fill(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'Color', all_colors(6, :));
hold off
subplot(1, 2, 2)
patch(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'Color', all_colors(6, :));
hold off
% 换一下数据
x = 0.4:0.1:2*pi;
y = sin(2*x);
figure
subplot(1, 2, 1)
fill(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'k');
hold off
subplot(1, 2, 2)
patch(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'k');
hold off
这个结果似乎没有达到预期,查询到 fill 和 patch 函数是做的多边形填充,因此需要做一些修改。
% 强制首尾各添加一个点,保证 y 值为 0
x = [x(1), x, x(end)];
y = [0, y, 0];
figure
subplot(1, 2, 1)
fill(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'k');
hold off
subplot(1, 2, 2)
patch(x, y, all_colors(1, :));
hold on
plot([0, 7], [0, 0], 'k');
hold off
函数之间围成的区域填充演示:
x = 0.4:0.1:2*pi;
y1 = sin(2*x);
y2 = sin(x);
% 确定 y2 和 y4 的上下边界
maxY = max([y1; y2]);
minY = min([y1; y2]);
% 确定填充多边形,按照顺时针方向来确定点
% fliplr 实现左右翻转
xFill = [x, fliplr(x)];
yFill = [maxY, fliplr(minY)];
figure
subplot(1, 2, 1)
fill(xFill, yFill, all_colors(1, :));
hold on
plot(x, y1, 'k', 'LineWidth', 2)
plot(x, y2, 'k', 'LineWidth', 2)
hold off
subplot(1, 2, 2)
patch(xFill, yFill, all_colors(1, :));
hold on
plot(x, y1, 'k', 'LineWidth', 2)
plot(x, y2, 'k', 'LineWidth', 2)
hold off完整版
【2.2.3 简单曲线之间填充】Matlab实现曲线之间填充2.2.4  复杂函数曲线之间填充


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 常规思路
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, [0, 10], 'LineWidth', 2, 'Color', all_colors(1, :));
hold on
h2 = fimplicit(g2, [0, 10], 'LineWidth', 2, 'Color', all_colors(1, :));
h3 = fimplicit(g3, [0, 10], 'LineWidth', 2, 'Color', all_colors(1, :));
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 = [3.11069, 2.06667];
pt2 = [8.53623, 0.266667];
pt3 = [7.7847, 1.8];
% 确定三个范围
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 = [x1, fliplr(x3), fliplr(x2)];
yFill = [y1, fliplr(y3), fliplr(y2)];
fill(xFill, yFill, all_colors(6, :));
hold off
% 高级点的做法
figure;
g1 = @(x, y) -x .* sin(4 * x) - 1.1 * y .* sin(2 * y);
g2 = @(x, y) x + y - 3;
h = fimplicit(@(x, y) min(g1(x, y), g2(x, y)), [0 3.5 0 4], 'LineWidth', 2, ...
    'Color', all_colors(1, :), 'MeshDensity', 1000);
fill(rmmissing(h.XData), rmmissing(h.YData), all_colors(6, :), 'DisplayName', 'g1 > 0 & g2 > 0');
hold on
fimplicit({g1, g2}, [0 3.5 0 4], 'LineWidth', 2, 'Color', all_colors(1, :));
hold off
legend('NumColumns', 3)

2.2.5  渐变色曲线、渐变色填充
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
x = linspace(0, 3*pi, 360);
y = sin(2*x);
%%%%% 渐变色填充
figure;
fill(x, y, y, 'EdgeColor', 'interp');
colormap(all_themes{1});
%%%%% 渐变色曲线
figure;
fill([x, NaN], [y, NaN], [x, NaN], 'EdgeColor', 'interp', 'LineWidth', 2);
% 修改颜色模板
colormap(all_themes{1});
%%%%% 渐变色散点
figure;
scatter(x, y, x*5+20, x, 'filled');
colormap(all_colors);





完整版
【2.2.5 渐变色曲线、渐变色填充】Matlab科研论文作图 2.2.6  带箭头曲线


clear; clc;
% 获取到颜色
[all_themes, all_colors] = GetColors();
x = 1:10;
y = sin(x);
plot(x, y, '.');
hold on
for i = 1:9
    PlotLineArrow(gca, [x(i), x(i + 1)], [y(i), y(i + 1)], all_colors(6, :), ...
        all_colors(1, :), 1);
end
hold off完整版
【2.2.6  带箭头曲线】Matlab科研论文作图 2.2.7  多个Y轴




clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% yyaxis 官方帮助文档 demo
figure;
x = linspace(0, 10, 100);
y1 = 2*sin(3*x);
y2 = sin(3*x) .* exp(0.5*x);
yyaxis left
plot(x, y1, 'LineWidth', 2);
yyaxis right
plot(x, y2, 'LineWidth', 2);
% 三个纵坐标演示,更多纵坐标可以按照此方法类推
figure;
y3 = 10*cos(3*x);
% 控制 aies 的大小和位置,注意是相对于figure的,范围为[0, 1]
% 三条线绘制到一起,注意数据都标准化到 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;
% 画线
h1 = axes('position', [0.1 0.1 0.5 0.8]);  
plot(x, y1, 'Color', all_colors(1, :), 'LineWidth', 2);
hold on
plot(x, newY2, 'Color', all_colors(2, :), 'LineWidth', 2);
plot(x, newY3, 'o--', 'Color', all_colors(3, :), 'LineWidth', 2);
hold off
ylabel('line1');
h1.YColor = all_colors(1, :);
% 绘制另外两个空的坐标轴
h2 = axes('position', [0.65 0.1 0.005 0.8]);
% 重复绘制,曲线颜色用白色,和figure背景色一致,看不出来即可
plot(x, y2, 'w')
% 颜色,位置,曲线标签
set(h2, 'ycolor', all_colors(2, :), 'yaxislocation', 'right', 'xtick', [])
% 边界显示不清楚,所以画一条线
hold on
limX2 = get(h2, 'Xlim');
limY2 = get(h2, 'Ylim');
plot([limX2(2), limX2(2)], limY2, 'Color', all_colors(2, :));
hold off
% 取消边框
box off
ylabel('line2');
%
h3 = axes('position', [0.75 0.1 0.005 0.8]);
plot(x, y3, 'w')
set(h3, 'ycolor', all_colors(3, :), 'yaxislocation', 'right', 'xtick', [])
hold on
limX3 = get(h3, 'Xlim');
limY3 = get(h3, 'Ylim');
plot([limX3(2), limX3(2)], limY3, 'Color', all_colors(3, :));
hold off
box off
ylabel('line3');
% 取消坐标轴的颜色,和figure统一
% set(h1, 'color','none')
% set(h2, 'color','none')
% set(h3, 'color','none')
% figure背景设置成白色
set(gcf,'color','white'); 完整版
【2.2.7 多个Y轴】Matlab科研论文作图 2.2.8  旋转多边形






clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
m = 3;
n = 41;
d_angle = 2.25;
rotate = 45;
shift = [0, 0];
figure
SpiralPolygon(m, n, d_angle, rotate, shift, all_colors, 1.5);
colormap(all_themes{1});
m = 4;
figure
SpiralPolygon(m, n, d_angle, rotate, shift, all_colors, 1.5);
figure;
V = SpiralPolygon(m, n, -d_angle, rotate, shift, all_colors, 1.5);
hold on
dx = max(V(1, :)) - min(V(1, :));
dy = max(V(2, :)) - min(V(2, :));
shift = [dx, 0];
SpiralPolygon(m, n, d_angle, rotate, shift, all_colors, 1.5);
shift = [dx, dy];
SpiralPolygon(m, n, -d_angle, rotate, shift, all_colors, 1.5);
shift = [0, dy];
SpiralPolygon(m, n, d_angle, rotate, shift, all_colors, 1.5);
hold off 2.2.9  带箭头流线
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
[x, y] = 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);
figure;
lines = streamline(x, y, u, v, startx, starty);
for i = 1:length(lines)
    lines(i).Color = all_colors(i, :);
    lines(i).LineWidth = 2;
end
% 下面开始画箭头,涉及到坐标的转换
% 获取 Axes 位置
posAxes = get(gca, 'Position');
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 获取 Axes 范围
limX = get(gca, 'Xlim');
limY = get(gca, 'Ylim');
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('arrow', xNew, yNew, 'color', all_colors(6, :));
end
hold off
title('带箭头的流线图');

完整版
【2.2.9 带箭头流线】Matlab科研论文作图 2.2.10  极坐标绘图技巧


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
figure;
theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
tiledlayout(1, 2);
nexttile;
polarplot(theta, rho, 'Color', all_colors(1, :), 'LineWidth', 2);
nexttile;
rMax = 2*max(rho);
% 这个看不到线,因为只有一个重复的点
polarplot([0, 2*pi], [rMax, rMax]);   
hold on
polarplot(theta, rho, 'Color', all_colors(2, :), 'LineWidth', 2);
hold off 2.2.11  条形分布图


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
n = 50;
x = linspace(-10, 10, n);
y = gauss(n, 5) ;
figure;
% 设置边缘颜色和宽度
bar(x, y, 'EdgeColor', 'none', 'BarWidth', 1, 'FaceColor', all_colors(1, :));
hold on
plot(x, y, 'Color', all_colors(6, :), 'LineWidth', 2);
hold off 2.3  三维绘图 2.3.1  给球面贴背景图


clear;clc;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 读取地图文件
image = imread('data\WorldMap.jpg');
% 生成一个球面数据
[x, y, z] = sphere(200);
% 绘制球体
p = surf(x, y, z);
% 去网格线
shading interp;
p.CData = image;
% 纹理贴图
p.FaceColor = "texturemap";
axis equal;
axis off
% 光源,看起来更有立体感
% light
% lighting gouraud
% 光源颜色
handle = light('Color', 'w');
t = 0;
while t < 100
    t = t + 1;
    view([t 10]);
    lightangle(handle, t, 0);
    pause(0.01);
end 2.3.2  三维矢量场图


clear;clc;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 产生数据
[X, Y, Z] = peaks(30);  
% 矢量场,曲面法线
[U, V, W] = surfnorm(X, Y, Z);  
% 箭头长度、颜色
quiver3(X, Y, Z, U, V, W, 0.5, 'k');     
hold on
surf(X,Y,Z);   
xlim([-3, 3]);
ylim([-3, 3]);
colormap(all_colors(1:30, :));
%  网格线不显示
shading interp
hold off
view(0, 90); 2.3.3  单独设置子图的colormap




clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
[x, y, z] = 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, 'Colormap', cMap);
% 用 freezeColors 方法
figure;
subplot(1,2,1);
surf(x, y, -z);
freezeColors;
subplot(1,2,2);
surf(x, y, -z);
colormap(hot);
% 一个坐标轴
figure;
h1 = surf(x, y, z);
freezeColors;
hold on
h2 = surf(x, y, z + 5);
hold off
colormap(hot);
% 读取本地的 figure 文件进行二次编辑
fig = openfig('data\MultiColormap.fig');
cmap = fig.Colormap;
% 多个子图
cmap1 = fig.Children(1).Colormap;
cmap2 = fig.Children(2).Colormap;
% 数据 figure --> axes --> plot
% ax = get(gcf, 'Children');
% plt = get(gca, 'Children');
x = fig.Children(2).Children(1).XData;
y = fig.Children(2).Children(1).YData;
z = fig.Children(2).Children(1).ZData;
figure;
surf(x, y, z);
colormap(cmap1);
freezeColors;
hold on
surf(x, y, z + 5);
hold off
colormap(all_themes{4});完整版
【2.3.3 单独设置子图的colormap】Matlab科研论文作图 2.3.4  曲面裁剪
clear;clc;close all;





% 获取到颜色 [all_themes, all_colors] = GetColors();             % 生成多峰图 figure; n = 300; [x, y, z] = peaks(n); % 绘制原图 subplot(2, 2, [1,3]) surf(x, y, z); xlim([-3, 3]); ylim([-3, 3]); shading interp view(0, 90) % 裁剪 z(z > 1) = NaN; subplot(2, 2, 2) surf(x, y, z); xlim([-3, 3]); shading interp view(0, 90) subplot(2, 2, 4) surf(x, y, z); colormap(all_themes{1}); shading interp view(0, 45)
完整版
【2.3.4 曲面裁剪】Matlab科研论文作图 2.3.5  三维曲线、散点图
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();  
%%%%% 三维曲线图
figure;
t = 0:pi/20:10*pi;
xt = sin(t);
yt = cos(t);
plot3(xt, yt, t, '-o', 'Color', all_colors(6, :), 'MarkerSize', 10, ...
    'MarkerFaceColor', all_colors(1, :), 'LineWidth', 2);
figure;
x = -20:10:20;
y = linspace(0, 10, 100);
% 生成 5 组数据
z = zeros(5, 100);
z(1, :) = gaussmf(y, [0.5 3]);
z(2, :) = gaussmf(y, [0.6 4]);
z(3, :) = gaussmf(y, [0.7 5]);
z(4, :) = gaussmf(y, [0.8 6]);
z(5, :) = gaussmf(y, [0.9 7]);
for i = 1:5
    % x 方向每条曲线都是一个值
    xx = x(i)*ones(1, 100);
    % z 方向的值,每次取一条
    zz = z(i, :);
    % plot3 在 xyz 空间绘制曲线,保证 x y z 长度一致即可
    plot3(xx, y, zz, 'LineWidth', 2);
    hold on
end
hold off
% 定制颜色
set(gca, 'colororder', all_themes{1});
legend('line1', 'line2', 'line3', 'line4', 'line5');
% 如果把渐变曲线和三维曲线结合起来
figure;
x = linspace(0, 10, 100);
y = zeros(5, 100);
y(1, :) = gaussmf(x, [0.5 3]);
y(2, :) = gaussmf(x, [0.6 4]);
y(3, :) = gaussmf(x, [0.7 5]);
y(4, :) = gaussmf(x, [0.8 6]);
y(5, :) = gaussmf(x, [0.9 7]);
for i = 1:5
    fill3([i*ones(size(x)), NaN], [x, NaN], [y(i, :), NaN], [x NaN], 'EdgeColor', 'interp', 'LineWidth', 2)
    hold on
end
hold off
%%%%% 三维散点图
figure;
[X,Y,Z] = sphere(16);
x = [0.5*X(:); 0.75*X(:); X(:)];
y = [0.5*Y(:); 0.75*Y(:); Y(:)];
z = [0.5*Z(:); 0.75*Z(:); Z(:)];
S = repmat([70, 50, 20],numel(X), 1);
C = repmat([1, 2, 3], numel(X), 1);
s = S(:);
c = C(:);
h = scatter3(x, y, z, s, c);
h.MarkerFaceColor = all_colors(6, :);
figure;
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 + 10, x, 'filled');
% 定制颜色
colormap(all_colors);









2.3.6  等高线图
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
figure;
[X, Y, Z] = peaks;
subplot(2, 2, 1);
contour(X, Y, Z, 20, 'LineWidth', 2);
subplot(2, 2, 2);
contour(X, Y, Z, '--', 'LineWidth', 2)
subplot(2, 2, 3);
v = [1, 1];
contour(X, Y, Z, v, 'LineWidth', 2);
x = -2:0.2:2;
y = -2:0.2:3;
[X, Y] = meshgrid(x, y);
Z = X.*exp(-X.^2-Y.^2);
subplot(2, 2, 4);
contour(X, Y, Z, 'ShowText','on', 'LineWidth', 2);
% 定制颜色
colormap(all_themes{1});
figure('Position', [0, 0, 900, 400]);
subplot(1, 3, 1);
[X, Y, Z] = sphere(50);
contour3(X, Y, Z, 'LineWidth', 2);
[X, Y] = 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], 'ShowText', 'on', 'LineWidth', 2)
[X, Y, Z] = peaks;
subplot(1, 3, 3);
contour3(X, Y, Z, [2 2], 'LineWidth', 2);
% 定制颜色
colormap(all_colors(1:9, :));
%%%%% 等高线填充图
figure;
tiledlayout(2, 2, 'TileSpacing', 'compact');
nexttile
[X, Y, Z] = peaks(50);
contourf(X, Y, Z);
nexttile
contourf(X, Y, Z,'--');
% 限定范围
nexttile
contourf(X, Y, Z, [2 3], 'ShowText', 'on');
nexttile
contourf(X, Y, Z,[2 2]);
% 定制颜色
colormap(all_colors(1:18, :));





2.3.7  绘制伪彩图和投影图
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 创建一个 colormap
map = GenColormap(all_themes{1}, 64);
x = linspace(-3, 3, 30);
y = linspace(-4, 4, 40);
[X, Y] = meshgrid(x, y);
Z = peaks(X, Y);
z1 = max(Z);
z2 = max(Z, [], 2);
figure;
subplot(3, 3, [1, 2]);
plot(x, z1, 'LineWidth', 2);
subplot(3, 3, [6, 9]);
plot(z2, y, 'LineWidth', 2);
subplot(3, 3, [4, 5, 7, 8]);
surf(x, y, Z);
colormap(map);
xlim([-3, 3]);
ylim([-4, 4]);
view(0, 90);
shading interp
figure;
% 3*3 布局
tiledlayout(3, 3, 'TileSpacing', 'Compact');
% 占据 1*2,也就是 1 2
nexttile([1, 2]);
plot(x, z1, 'LineWidth', 2);
% 从第 6 个开始,占据 2*1,也就是 6 和 9
nexttile(6, [2, 1]);
plot(z2, y, 'LineWidth', 2);
% 从第 4 个开始,占据 2*2,也就是 4 5 7 8
nexttile(4, [2, 2]);
surf(x, y, Z);
colormap(map);
xlim([-3, 3]);
ylim([-4, 4]);
view(0, 90);
shading interp

完整版
【2.3.7 绘制伪彩图和投影图】Matlab科研论文作图 2.4  四维绘图 2.4.1  slice切片显示
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 创建 colormap
map = GenColormap(all_themes{1});
[X, Y, Z] = meshgrid(-2:0.2:2);
V = X .* exp(-X.^2 - Y.^2 - Z.^2);
% 切片位置
xslice = [-1.2, 0.8, 2];   
yslice = [];
zslice = 0;
s = slice(X, Y, Z, V, xslice, yslice, zslice);
% 裁剪
for i = 1:length(s)
    s(i).XData(10:end, 10:end) = nan;
    s(i).YData(10:end, 10:end) = nan;
    s(i).ZData(10:end, 10:end) = nan;
end
% 加 colorbar 方便看值
colorbar
colormap(map)
shading interp

2.5  函数方程可视化 2.5.1  一元方程 2.5.2  二元方程 2.5.3  三元方程






完整版
【2.5 函数方程可视化】Matlab科研论文作图 2.6  特殊绘图 2.6.1  动态趋势线可视化
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();  
% 数据,可以补充最好
y = [34,34,34,53,57,60,60,64,69,89,106,125,161,233,345,445,572,717,1010,1322,1264,1678,3489,...
     4629,5894,9345,14250,19624,22043,32717,46332,53268,65285,83507,101657,121117,139675,...
     161367,184183,206207,236339,270473,312076,334125,363349,394182,425828,463433,498674,...
     530384,559245,586941,610632,641397,674829,710021,738697,762496,789383,825306,844992,...
     877497,916348,955488,985060,1004942,1029878,1056646,1092656,1125305,1156744,1185167];
len = length(y);
x = 1:len;
% 第一个点为标记点
plot(x(1), y(1), 'o', 'Color', all_colors(1, :), 'MarkerSize', 10, 'MarkerFaceColor', all_colors(1, :));
hold on
% 循环画图
for i = 2:len
    % 画两个点
    plot(x(i-1:i), y(i-1:i), 'Color', all_colors(1, :), 'LineWidth', 3);
    % 设置一下范围
    xlim([1, 1.5*x(i)]);
    ylim([0, 1.5*y(i)]);
    % 删掉之前的文本和标记
    delete(findobj('Type','text'));
    delete(findobj('Marker','o'));
    % 画标记点
    plot(x(i), y(i), 'o', 'Color', all_colors(6, :), 'MarkerSize', 10, 'MarkerFaceColor', all_colors(6, :));
    % 添加标注
    text(x(i),y(i),['     美国:', num2str(y(i))], 'Color', all_colors(1, :));  
    title('美国新冠数据');
    % 暂停 0.1s
    pause(0.1)
end
hold off

完整版
【2.6.1 动态趋势线可视化】Matlab绘制动态趋势线 2.6.2  Newton-Raphson、Julia分形
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 创建 colormap
map = GenColormap(all_themes{2}, 64);
n = 1000;
m = 1000;
f = @(z) z^8 - 1;
df = @(z) 8*z^7;
[X, Y] = 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);
colormap(map);
% hold on
% plot([1, -1, 0, 0], [0, 0, 1, -1], '.k', 'MarkerSize', 20);
% hold off
shading flat
axis tight manual off

% xlim([-0.5, 0]);
% ylim([0.5, 1]);
% 保存成视频
% set(gca, 'nextplot', 'replacechildren');
% v = VideoWriter('NRfractal.avi');
% 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;
[X, Y] = 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);
colormap(map);
shading flat
axis tight manual off



完整版
【2.6.2 Newton-Raphson、Julia分形】数学之美:Matlab绘制分形图 2.6.3  分形树叶
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 初始点的位置
x = [0.5; 0.5];        
% 绘制初始点
plot(x(1), x(2), '.', 'Color', all_colors(3, :), 'MarkerSize', 10);
% 设置判断向量
h = [0.75, 0.90, 0.98, 1.00];
b1 = [0; 1.5];
b2 = [0; 1.5];
b3 = [0; 0.4];
% 构造仿射变换矩阵
A1 = [0.75, 0.04; -0.04, 0.75];
A2 = [0.20, -0.3; 0.25, 0.23];
A3 = [-0.15, 0.32; 0.26, 0.24];
A4 = [0, 0; 0, 0.15];
%循环绘制
hold on
for i = 1 : 1000
    r = rand;
    if r < h(1)
        x = A1 * x + b1;
    elseif r < h(2)
        x = A2 * x + b2;
    elseif r < h(3)
        x = A3 * x + b3;
    else
        x = A4 * x;
    end
    plot(x(1), x(2), '.', 'Color', all_colors(3, :), 'MarkerSize', 10);
    pause(0.001);
    % drawnow 太慢了
end
hold off

2.6.4  在指定区域内随机生成不相交不相切的圆
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 限定范围
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,:) = [xPos, yPos, r];
    % 判断每个圆的位置是否不相切、不相交
    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('Position', [xPos-r, yPos-r, 2*r, 2*r], 'Curvature', [1 1], 'EdgeColor', all_colors(1, :), 'LineWidth', 2);
            axis equal
        else
            r = rand;
            xPos = rand*(width-2*r) + r;  
            yPos = rand*(height-2*r) + r;
            paras(num,:) = [xPos,yPos,r];
            % 防止死循环
            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('Position', [xPos-r, yPos-r, 2*r, 2*r], 'Curvature', [1 1], 'EdgeColor', all_colors(1, :), 'LineWidth', 2);
                axis equal
            end
        end      
    end
end
axis([0 width 0 height])
box on
hold off

完整版
【2.6.4 在指定区域内随机生成不相交不相切的圆 】Matlab科研论文作图 2.6.5  创建gif动图
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
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, 'LineWidth', 3, 'Color', all_colors(idx, :));
    title(['y = x^', num2str(idx)]);
end
% 获取绘制对象
fig = figure;
for idx = 1:len
    y = x.^idx;
    plot(x, y, 'LineWidth', 3, 'Color', all_colors(idx, :));
    title(['y = x^', num2str(n(idx))])
%     drawnow
%     pause(0.1);
    frame = getframe(fig);
    im{idx} = frame2im(frame);
end
% 输出文件名
filename = 'data\testAnimated.gif';
for idx = 1:len
    % 制作gif文件,图像必须是index索引图像
    [A, map] = rgb2ind(im{idx}, 256);
    if idx == 1
        imwrite(A, map, filename, 'gif', 'LoopCount', Inf, 'DelayTime', 0.3);
    else
        imwrite(A, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 0.3);
    end
end

clear;clc;
% 保存文件名
filename = 'Model.gif';  
% 4张图
for i = 1:4
    % 图片路径
    fileName = [num2str(i), '.jpg'];      
    img = imread(fileName);
    % 重定义尺寸
    img = imresize(img, [256, 256]);      
    imshow(img);
    % 不显示窗口
    set(gcf, 'visible', 'off');   
    % 获取位置
    q = get(gca, 'position');  
    % 设置左边距离值为零
    q(1) = 0;  
    % 设置右边距离值为零
    q(2) = 0;     
    % 重新设置位置
    set(gca, 'position', q);
    frame = getframe(gcf, [0, 0, 200, 200]);  
    im = frame2im(frame);      
    imshow(im);
    [I, map] = rgb2ind(im, 256);
    if i == 1
        imwrite(I, map, filename, 'gif', 'Loopcount', inf, 'DelayTime', 0.3);
    else
        imwrite(I, map, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 0.3);
    end
end



2.6.6  梯度下降法的下降方向


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 创建一个 colormap
map = GenColormap(all_themes{1});
%% 一元函数梯度下降法
% 示例:f(x) = min{(x - 1)^2}
% 梯度:g(x) =  2 * (x - 1)
% 学习率,一般设置小一点,否则容易在最小值附近震荡或者不收敛
yita = 0.25;   
x1 = -5 : 0.1 : 5;
y1 = (x1 - 1).^2;
iteMax = 1000;
xInit = 4;
yInit = (xInit - 1)^2;
err = 1e-6;
figure('Position', [50, 50, 900, 400]);
tiledlayout(1, 2, 'TileSpacing', 'compact');
nexttile
plot(x1, y1, 'b', 'LineWidth', 2)
xlim([-5, 5])
ylim([-1, 25])
hold on
plot(xInit, yInit, 'ok', 'MarkerFaceColor', 'k')
for i = 1 : iteMax
    % x = x + yita * grad;
    xNew = xInit - yita * 2 * (xInit - 1);
    yNew = (xNew - 1)^2;
    % 退出条件
    if abs(xNew - xInit) < err
        break;
    else
        PlotLineArrow(gca, [xInit, xNew], [yInit, yNew], 'k', 'k', 2)
        xInit = xNew;
        yInit = yNew;
        disp(['第', num2str(i), '次迭代结果:', num2str(xInit)]);
        plot(xNew, yNew, 'ok', 'MarkerFaceColor', 'k')        
    end
end
hold off
title('梯度下降');

%% 多元函数梯度下降法
% 示例:f(x) = min{x1^2 + x2^2}
% 梯度:g(x) = [2 * x1; 2 * x2]
[x, y] = meshgrid(-5:0.5:5, -5:0.5:5);
z = x.^2 + y.^2;
initX = 4;
initY = 3;
initZ = initX^2 + initY^2;
initValue = [initX; initY];
nexttile
contourf(x, y, z, 20);
colormap(map);
shading interp
hold on
grad = zeros(1, 2);
e = 0.1;
yita = 5;   % Adagrad 更快收敛
for i = 1 : iteMax
    % 标准的梯度法  x = x + yita * grad;
%     newValue = initValue - yita * [2 * initX; 2 * initY];
    % Adagrad 法    x = x + yita * inv(G) * grad;
    grad = grad + [(2 * initX)^2, (2 * initY)^2];
    newValue = initValue - yita * diag(1 ./ sqrt(grad + e)) * [2 * initX; 2 * initY];
    % 退出条件
    if norm(newValue - initValue) < err
        break;
    else
        newX = newValue(1);
        newY = newValue(2);
        newZ = newX^2 + newY^2;
%         plot([initX, newX], [initY, newY], '-ok', 'MarkerFaceColor', 'r')
        PlotLineArrow(gca, [initX, newX], [initY, newY], 'k', 'k', 2)
        initValue = newValue;
        initX = newX;
        initY = newY;
        initZ = newZ;
        disp(['第', num2str(i), '次迭代结果:', num2str(newValue')]);   
    end
end
hold off
title('梯度下降'); 2.6.7  目标沿指定轨迹运动


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 生成轨迹
x = linspace(0, 2*pi, 20);
y = sin(x);
minX = min(x);
maxX = max(x);
minY = min(y);
maxY = max(y);
% 在特定位置绘制轨迹图
h1 = axes('position', [0.1, 0.1, 0.8, 0.8]);
plot(x, y, 'Color', all_colors(1, :), 'LineWidth', 2);
% 设置显示范围
xlim([minX, maxX]);
ylim([minY, maxY]);
% 图片尺寸
sizeQQ = 0.05;
posX = 0.1;
poxY = 0.85;
% 图像的位置
h2 = axes('position', [posX poxY sizeQQ sizeQQ]);
% 显示图片
imshow('data\qq.bmp');
for i = 1 : length(x)
    % 计算图片的位置
    posX = (x(i) - minX) / (maxX - minX) * 0.8 + 0.1;
    posY = (y(i) - minY) / (maxY - minY) * 0.8 + 0.1;
    % 删除之前的图片
    delete(h2);
    % 在新的位置显示
    h2 = axes('position', [posX posY sizeQQ sizeQQ]);
    imshow('data\qq.bmp');
    % 暂停以显示动态过程
    pause(0.1);
end 2.6.8  看起来像拼接两个Axis


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
x1 = 0:0.1:2;
y1 = x1;
x2 = 2:0.1:4;
y2 = x2 + 1;
ax = axes();
plot(x1, y1, 'Color', all_colors(19, :), 'LineWidth', 2);
hold on
plot(x2, y2, 'Color', all_colors(24, :), 'LineWidth', 2);
fill([0, 2, 2], [0, 0, 0.5], all_colors(1, :));
fill([2, 4, 2], [0.5, 0, 0.5], all_colors(1, :));
fill([0, 2, 2], [0.5, 0.1, 0.5], all_colors(3, :));
fill([2, 4, 2], [0.1, 0.5, 0.5], all_colors(3, :));
fill([1.9, 2.1, 2, 2.1, 1.9, 1.8], [0, 0, 2.5, 5, 5, 2.5], 'w');
hold off
% 设置一些属性
grid on
ax.XTickLabel = {'0', '0.5', '1', '1.5', '', '3.5', '4', '4.5', '5'};
ax.GridLineStyle = '--'; 2.6.9  设置特殊的图例




clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 生成曲线数据
x = 0:0.2:12;
y1 = besselj(1, x);
y2 = besselj(2, x);
y3 = besselj(3, x);
% 先看正常绘图时的 legend,显示出来的线型、标记、颜色和曲线是对应的
figure
plot(x, y1, '-o', 'Color', all_colors(1, :), 'LineWidth', 2);
hold on
plot(x, y2, '-*', 'Color', all_colors(2, :), 'LineWidth', 2);
plot(x, y3, '-s', 'Color', all_colors(3, :), 'LineWidth', 2);
hold off
legend('legend1', 'legend2', 'legend3');
% 如果要让图例颜色都是黑色怎么实现
% 一个很笨但有效的方法,重新绘制一遍将原图覆盖
figure
plot(x, y1, '-ok', 'LineWidth', 2);
hold on
plot(x, y2, '-*k', 'LineWidth', 2);
plot(x, y3, '-sk', 'LineWidth', 2);

plot(x, y1, '-o', 'Color', all_colors(1, :), 'LineWidth', 2);
plot(x, y2, '-*', 'Color', all_colors(2, :), 'LineWidth', 2);
plot(x, y3, '-s', 'Color', all_colors(3, :), 'LineWidth', 2);
hold off
% 只显示前面三条曲线的legend
legend('legend1', 'legend2', 'legend3');
% 如果想显示指定曲线的legend
figure
h1 = plot(x, y1, '-ok', 'LineWidth', 2);
hold on
h2 = plot(x, y2, '-*k', 'LineWidth', 2);
h3 = plot(x, y3, '-sk', 'LineWidth', 2);
h4 = plot(x, 2*y1, '-o', 'Color', all_colors(1, :), 'LineWidth', 2);
h5 = plot(x, 2*y2, '-*', 'Color', all_colors(2, :), 'LineWidth', 2);
h6 = plot(x, 2*y3, '-s', 'Color', all_colors(3, :), 'LineWidth', 2);
hold off
legend([h1, h3, h5], 'legend1', 'legend3', 'legend5');完整版
【2.6.9 设置特殊的图例 】Matlab科研论文作图 2.6.10  甲烷模型


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 球面的坐标信息,为了看起来平滑一点,给到 100
[x, y, z] = sphere(100);
% C 大小
C = 10;
% H 大小
H = 5;
figure;
% 大球
surf(C*x, C*y, C*z, 'FaceColor', all_colors(6, :), 'EdgeColor', 'none')
hold on
% 四个小球,都偏离一点位置,准确的位置需要计算,这里演示一个大概位置
surf(H*x, H*y, H*z + 10, 'FaceColor', all_colors(1, :), 'EdgeColor', 'none');
surf(H*x + 10, H*y, H*z - 3, 'FaceColor', all_colors(1, :), 'EdgeColor', 'none');
surf(H*x - 4, H*y - 10, H*z - 3, 'FaceColor', all_colors(1, :), 'EdgeColor', 'none');
surf(H*x - 4, H*y + 10, H*z - 3, 'FaceColor', all_colors(1, :), 'EdgeColor', 'none');
% 坐标轴设置
axis equal off
% 光源,看起来更有立体感
light
lighting gouraud 2.6.11  在随机圆里产生随机点


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
% 半径
r = 8;
% 圆心距
d = 50;
% 圆 1 的坐标,可变
ox1 = 10;
oy1 = 10;
% 圆 2 的坐标,可变,那就随机吧
theta_r = rand*2*pi;
ox2 = ox1 + d*cos(theta_r);
oy2 = oy1 + d*sin(theta_r);
% 用极坐标形式,毫无疑问
theta = linspace(0, 2*pi, 100);
% 圆坐标
x1 = ox1 + r*cos(theta);
y1 = oy1 + r*sin(theta);
x2 = ox2 + r*cos(theta);
y2 = oy2 + r*sin(theta);
% 画图
plot(x1, y1, 'Color', all_colors(19, :), 'LineWidth', 2);
hold on
plot(x2, y2, 'Color', all_colors(24, :), 'LineWidth', 2);
count = 100;
% 散点位置
% 随机半径
rs1 = rand(1, count)*r;
% 随机角度
thetas1 = rand(1, count)*2*pi;
% 确定坐标
xs1 = ox1 + rs1 .* cos(thetas1);
ys1 = oy1 + rs1 .* sin(thetas1);
% 同样来一遍
rs2 = rand(1, count)*r;
thetas2 = rand(1, count)*2*pi;
xs2 = ox2 + rs1 .* cos(thetas2);
ys2 = oy2 + rs1 .* sin(thetas2);
% 画图
plot(xs1, ys1, '.', 'Color', all_colors(1, :), 'MarkerSize', 10);
plot(xs2, ys2, '.', 'Color', all_colors(2, :), 'MarkerSize', 10);
hold off
% 设置一下显示比例
x_range = xlim;
y_range = ylim;
x_len = x_range(2) - x_range(1);
y_len = y_range(2) - y_range(1);
set(gcf, 'Position', [50, 50, x_len*10, y_len*10]); 2.6.12  斜线填充的曲线


clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
syms t
n = 30;
x = linspace(-pi, pi, n);
y = sin(x);
ax = axes;
% 曲线
plot(ax, x, y, 'k');
hold on
% 画带箭头 x 轴和 y 轴
PlotLineArrow(ax, [-2*pi, 2*pi], [0, 0], 'none', 'k', 1);
PlotLineArrow(ax, [0, 0], [-2, 2], 'none', 'k', 1);
% 计算所有的斜线 一条斜线两个点
xx = zeros(1, n);
for i = 1:n
    % 这个方程用来计算斜线的位置
    f1 = 2*(t - x(i));
    f2 = sin(t);
    sol = vpasolve(f1 == f2, t);
    xx(i) = double(sol);
end
yy = sin(xx);
% 画斜线
for i = 1:n
    % 分 x 正负情况
    if x(i) < 0
        plot([xx(i), x(i)], [yy(i), 0], 'Color', all_colors(1, :));
    else
        plot([x(i), xx(i)], [0, yy(i)], 'Color', all_colors(1, :));
    end
end
hold off
% 几个关键点
text(-pi, 0.1, '(-\pi, 0)');
text(pi/2, 1.1, '(-\pi/2, 1)');完整版
【2.6.12 绘制带斜线填充的曲线图】Matlab科研论文作图 2.6.13  球板模型
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();  
% 生成球面数据
[x1, y1, z1] = sphere(101);         
z0 = z1;
% 半径 0.8 之外的不显示
z1(x1.^2 + y1.^2 >= 0.8^2) = nan;   
x0 = linspace(-1.2, 1.2, 25);
z = linspace(-0.6, 0.6, 10);
[x, z] = meshgrid(x0, z);
y0 = zeros(size(x));
[x2, y2] = meshgrid(x0);
% 生成圆柱数据
[x3, y3, z3] = cylinder(0.8);      
s = zeros(size(x2));
% 绘制两个球冠
surf(x1, y1, z1);
hold on
% 绘制圆柱面
surf(x3, y3, 1.2 * (z3 - 0.5));
colormap('hot');
freezeColors;
% 绘制上下两个面
surf(x2, y2, s-0.6);              
surf(x2, y2, s+0.6);
% 绘制四个侧面
mesh(x, y0-1.2, z);
mesh(x, y0+1.2, z);
mesh(y0+1.2, x, z);
mesh(y0-1.2, x, z);
% 绘制两个大的球冠
mesh(1.2*x1, 1.2*y1, 1.2*z0);
hold off
colormap(GenColormap(all_themes{1}, 64));
% 镂空
hidden off
shading interp
axis equal
axis square
axis off

完整版
【2.6.13 球板模型】Matlab科研论文作图 2.6.14  BP神经网络图
clear;clc;close all;
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([x1(i), x2(j)], [y1(i), y2(j)], 'k');
        hold on
    end
end
for i = 1:11
    for j = 1:8
        plot([x2(i), x3(j)], [y2(i), y3(j)], 'k');
    end
end
% 神经元
scatter(x1, y1, 200, 'k', 'MarkerFaceColor', 'r');
scatter(x2, y2, 200, 'k', 'MarkerFaceColor', 'y');
scatter(x3, y3, 200, 'k', 'MarkerFaceColor', 'k');
plot([1.5, 1.5], [0, 11], 'k--');
plot([2.5, 2.5], [0, 11], 'k--');
hold off
axis off
% 文本
text(1.5, 11.75, '输入层');
text(2, 11.75, '隐藏层');
text(2.5, 11.75, '输出层');

2.6.15  由一系列圆构成的圆环
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
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, 'Color', all_colors(1, :));
    hold on
end
hold off
% 限定显示范围
xlim([-3, 3]);
ylim([-3, 3]);
% x y 轴等宽
axis equal
% 紧凑
axis tight

2.6.16  棋盘格
clear;clc;close all;
% 获取到颜色
[all_themes, all_colors] = GetColors();
figure;
% 生成数据点
[x, y] = meshgrid(30:39);
x = x(:);
y = y(:);
scatter(x, y, 100, all_colors(1, :), 'LineWidth', 2);
hold on
% 随机填充几个点
number = 10;
index_x = randi(9, 1, number) + 30;
index_y = randi(9, 1, number) + 30;
scatter(index_x, index_y, 100, all_colors(6, :), 'MarkerFaceColor', all_colors(6, :), 'LineWidth', 2);
hold off
% 显示网格
grid on
% 网格属性
set(gca, 'GridAlpha', 1, 'GridColor', [0 0 0], 'GridLineStyle', '--');
cdra 发表于 2023-10-25 22:30:45|来自:北京 | 显示全部楼层
作为一个正在屏幕前默默打开3dmax的博士科研狗,看到这个问题,不禁思绪万千,瞬间变成话痨。其实很久以前,刚开始搞科研实验的时候,只知道要想创新点、做实验数据和写文章,后来才知道原来掌握绘图技术也是十分地关键。优秀的绘图技术,不仅可以让数据简洁,让心灵愉悦,而且在实站中,会大大提高文章的接收概率!


所谓“见字如面”,漂亮的论文图犹如论文的“颜值”,在这个世界,显得格外高大上。总结来看,需要提升颜值的论文图分为两种:一种是数据图,另一种是示意图。接下来,我就结合自己的硕士、博士经历,给大家分享下,制作漂亮论文图一般所用到的那些“神秘而又熟悉”的软件吧!

√PPT
对的,就是平常用的PPT,它除了演示功能之外,也可以绘制逼格较高的sci论文图!而且,方便简单,容易调整!很多顶级期刊的文章,都能见到PPT工具所绘制图形的影子。
比如绘制一个漂亮的三维的球,就可以方便地用PPT来调制。第一步,绘制5cm高、5cm宽的圆;第二步设置三维格式,按照经验,大约设置为14倍直径即70磅,输入到顶端棱台的宽度与高度中;第三步可以设施渐变填充,里面有很多颜色可以选择;第四步是,可以选择材料和光源角度,从而使球体更加立体,设置心仪的颜色和形状。


此外,PPT还可以绘制一些具体的实际物体,比如说温度计。
第一步在“形状”菜单中点击椭圆,新建一个椭圆形状,再在椭圆的形状格式中,选择“渐变填充”,渐变光圈位置设为“1%”,透明度设置为“25%”,亮度设置为“0%”,得到一个小光圈;


第二步,在“形状”菜单中点击椭圆,新建一个椭圆形状,再在椭圆的形状格式中,大小设置为高“2.4厘米”,宽“2.4厘米”;再在填充菜单中选择“渐变填充”,类型设置为“射线”,位置设为“1%”,得到一个红色光圈;


第三步,组合第一步光圈和第二步光圈,得到温度计水银球;


第四步,“形状”菜单中点击直线,新建一个直线形状,再在椭圆的形状格式中,线条菜单中选择“实线”,宽度设置为“2磅”。制作一条长的直线和十六条短的直线,再把这些直线选择排列菜单,放置对象“对齐”,依次选择“左对齐”和“顶端对齐”,得到温度计示数条;


第五步,“形状”菜单中点击任意闭合图形,新建一个任意闭合图形形状,再在形状格式中,形状选项菜单中选择“渐变填充”,类型设置为“线性”。渐变光圈选择三个,两边红色,中间白色,调整好之后,与第一步的小光圈组合,形成温度计示数槽,同样的,再绘制其他两个白色的外壳;


第六步,将第一步至第五步的元素组合,形成一个温度计。另外通过调节参数,也可以制作成下图右边的三个图,看着还不错,哈哈!


总之,PPT绘制科研图,方便简单,还有很多的东西都可以绘制,比如简单的立体形状、表格、还有流程图都可以方便得到。

√Origin
其实Origin是科研数据处理的基础软件,然而很多人并没有充分利用好这个软件的作图技巧。我是在硕士一年级的时候,那时候在网上报了一个论文写作与发表训练营,训练营专门在上论文润色这个部分课程的时候,老师教会了我一些Origin作图的技巧,后来我也用在了我的硕士论文中。在训练营学习了之后,我才发现其实很多平平无奇的软件隐藏了很多意想不到的功能。
打开Origin软件,我们会发现,在“Plot”下面其实就有很多Origin所展示出来的,可以绘制的一些高大上的图形,可以让数据更加简洁明了。



Origin软件界面

我给大家举个例子,就展示一下如何绘制contour图吧。
第一步,首先打开软件,点击菜单栏中的“file”,子选项中选择“new”,再选择“matrix”,从而新建一个矩阵(matrix);


第二步,在跳出来的matrix界面,设置columns为“4”,rows为“4”,再点击“OK”这样就会得到一个4*4矩阵;


第三步,在跳出来的4*4矩阵界面中,依次输入数据,并且上方还有个小矩阵,为图形的预览;


第四步,在菜单选项中点击“Plot”,再点击“Contour”,选择其子选项中的“color fill”,就得到了如下右图所示的图形了;


第五步,修改图形颜色,可以在菜单栏中的Palettes中选择自己喜欢的颜色进行调节。图形的边框等参数都是可以修改的。



√Chemdraw与Chem3D
我们在做图形的时候,往往不知道如何去绘制分子式,其实分子式的绘制,主要要用的就是chemdraw这款软件了。在chemdraw我们可以绘制各种苯环、镜像等化学分子式。
比如绘制一个苯酚分子式。
第一步,在左侧工具栏,选择苯环结构,点击并绘制在空白处;


第二步,点击直线工具,并绘制在苯环的右侧;


第三步,点击文字工具,在直线的右侧输入“OH”,这样一个简单的苯酚分子式就画好了。


为了进一步提升分子式的“颜值”,我们还需要对chemdraw所绘制的平面分子式进行处理,很简单的一种方法就是将chemdraw绘制出来的分子式直接拖到chem3D软件中,这样就得到了立体的分子式了。在chem3D中可以改变分子式的旋转角度、颜色还有模型,这个大家摸索摸索就知道了。



Chem3D绘制科研绘图示例

√PS
PS软件常常被爱好漂亮的女生拿来修图,而这款软件同样也可以用来制作一些好看的科研元素,是科研绘图中重要的工具,大量地被用来绘制TOC封面和文章示意图。
就拿我绘制的一幅图来说,PS主要分为图层、工具和菜单部分。在PS中利用图层很容易在图形后面插入背景,比如我这里面的宇宙背景。另外一些白色的雾气则是通过笔刷工具得到;而红色与蓝色的光斑则是用笔刷、橡皮差、图层等组合而成,对应的教程网上都有,所需要做的就是熟悉软件,一步一步去模仿学习。
雾气学习链接:https://jingyan.baidu.com/article/a501d80cc939f1ad630f5eeb.html
光斑学习链接:https://www.bilibili.com/video/av586543063/



PS绘制科研绘图示例

√3Dmax
近年来,3dmax这款软件收到了越来越多的关注,这款软件可以绘制很多立体图形,并且有自带渲染效果,图形十分好看,因此收到了广泛的关注。这个软件绘制的图形以立体几何居多,可以借鉴以下的实例。



3Dmax绘制科研绘图示例

3Dmax软件的网上教程视频很多,比如b站上的课程也很丰富。下面就我之前绘制的简单的图形作为实例,给大家简单分享一下:
第一步,利用工具绘制一定大小的几何体,我这里主要是圆柱体和圆球,在对象类型栏下,依次点击“球体”和“圆柱体”,再右击球体,里面有移动、旋转等选择操作,对其进行“缩放”操作,在Z方向缩放后可以得到左边的这个椭球形状。


第二步,利用“移动”“旋转”工具对这些几何体进行移动组合。得到下面这个图形,这个图形其实就是ATP转换酶的样子。


第三步,再对组合的物质赋予材质,在菜单栏中选择“渲染”,再选择“材质编辑器”,再选择“精简材质编辑器”;在材质弹出框中,可以设置颜色为“枣红色”,反射颜色为“白色”,反射光泽为“0.91”,光泽“1.0”,IOR“1.6”等,再赋予给选定的对象;


第四步,渲染出图,选择菜单项中的“渲染”,点击“渲染设置”,弹出的窗口中设置渲染区域为“视图”,图片宽度“640”,图片高度“480”,光圈宽度“36.0”,点击“渲染”,最后渲染出来的图片如右图所示,为方便可以设置为不同格式的图片文件。追求图片小一点,可存为“jpg” 文件格式;追求图片清晰点,同时无背景,可存为“png” 文件格式;如果想图片最清晰,下次还可以用3Dmax打开修改的话,建议存为“tiff”文件格式。



√ANSYS
ANSYS软件是融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析软件。ANSYS可以做结构分析,确定结构的变形、应变、应力和反作用力等;还可以做热分析,计算物体的稳态或瞬态温度分布,以及热量的获取或损失、热梯度、热通量等;还可以做电磁分析,用于计算磁场,包括静磁场、交变磁场、瞬态磁场、交变电磁场等;还可以做流体分析,用于确定物体的流动和热行为,包括不可压缩或可压缩流体、层流及湍流,以及多组分流等;另外还能做耦合场分析,以考虑两个或多个物理场之间的相互作用。
因此,ANSYS软件在各大顶级期刊都有不俗的表现,下面就是用ANSYS处理出来的一些顶级期刊(包括science\mature\PNAS以及其他的顶级杂志)图形。



基于ANSYS一些杂志绘制的科研绘图

介绍到这里,一般SCI论文绘制的科研图所需要的软件基本就介绍完了,掌握了这些软件咱们来进行一篇SCI文章的实例解析,看看用到了那些软件。
这篇文章的第一幅图,如下所示。这里面的诸如太阳能电池板、气罐、烧杯等都是可以在网上找到图片素材的,而里面的数据是Origin画的,箭头用PPT就可以解决,而纳米颗粒用3dmax比较好画,光斑则可以在PS中实现,所有的元素也是在PS中组合得到。



实例SCI文献第一幅图

文章的第二幅图,如下所示。中间的数示意直线、箭头、文字可以在PPT中画,而其他的立体元素都可以在3dmax中得到。



实例SCI文献第二幅图

文章的第三幅图,如下所示。A\B\C三幅图都是在Origin得到,而其他的图是SEM/STM等测试软件直接得到的,中间的箭头是在PPT中得到的。



实例SCI文献第三幅图

文章的第四幅图,如下所示。A\B\C三幅图都是在Origin得到,D图是在别的文献中总结得到。



实例SCI文献第四幅图

文章的第五幅图,如下所示,都是在Origin得到的。



实例SCI文献第五幅图

因此分享到这里,我还想跟各位学弟学妹说的是,软件仅仅是让我们的数据更加好看一些,表达更加清楚简洁一些。而真正决定文章档次的还得是我们的原始数据,我们的课题的研究意义。最后祝大家能天天有data,年年有paper!
loooog 发表于 2023-10-25 22:30:51|来自:北京 | 显示全部楼层
您可以轻松绘制类似这种图(贴部分图,部分图直接搬自官网,违权可删除)
10W字《Python可视化教程1.0》来了!





























<hr/>推荐阅读

pythonic生物人:Python可视化笔记43篇合集(建议收藏)
pythonic生物人:从哪些方面着手提高Python?Python社区“老司机们”的这本书讲清楚了!
Python 从入门到精通推荐看哪些书籍呢?
你所读的统计学方向,有哪些不错的讲义(Notes)?
你是如何自学R语言的?
pythonic生物人:13个高清图助快速上手Python: NumPy/Pandas/SciPy/Matplotlib?
有哪些你看了以后大呼过瘾的数据分析书?
pythonic生物人:丰富的Python可视化“武器库”:从PyViz到Matplotlib
GitHub上都有哪些值得关注学习的R开源项目?
机器学习、数据科学 如何进阶成为大神?
作为一个研究生,有哪些你直呼好用的科研神器?
作为统计的博士生,你都读过哪些对你影响深远的统计书籍?
欢迎关注 @pythonic生物人
滋滋629 发表于 2023-10-25 22:31:12|来自:北京 | 显示全部楼层
专业制图神器!!!在线强推10个超好用的作图软件哦~
(p.s. 大家在评论提到的orgin和SPSS芳老师在另外一个回答有详细提到了,并附了简单操作教程哦~快戳 如何在论文中画出漂亮的插图?)
一、Lucidchart

Lucidchart结合了图表、数据可视化等功能,能够帮助读者快速阅读,除此之外Lucidchart还给大家提供了许多不同用途的模板,方便一些不会画画的小白上手,这些模板包括概念图、ER图、组织流程图、思维导图等等。
【数据流程图】


【价值流程图】


【思维导图】


二、 Prism

Prism是一种数据分析软件,拥有着八种不同类型的数据表,由于使用群体中可能存在着对统计知识了解不深的同学,因此这款软件还在界面设置上用非统计学术语言给同学们提供了数据分析使用指南,从常见到特定的分析方法(非线性回归、t检验、单向、生存分析等),是一款对同学们非常友好的软件。


此外,在这款软件的官网上还提供了部分统计方法的教学视频:



Prism官网的t检验视频教程

三、MATLAB

说完上面两个软件之后,芳老师再来给大家安利一个偏理工科方面的制图软件——MATLAB。其应用领域十分广泛,有机器学习、机器人技术、计算生物学等等:


【计量生物学的数据分析】


【衍生产品的定价】


四、Sigmaplot

最后,芳老师将隆重地给大家推出一款2D和3D图表的制作之王——Sigmaplot。这一款软件可给同学们提供百余种不同的2D和3D图表,无论是简单的散点图还是复杂的森林图,Sigmaplot都有。有这个还愁找不到精美的数据可视化表现形式嘛?




值得芳老师吹爆的还有Sigmaplot还给大家提供了丰富的图库,无需自己画图哦:


五、Tableau

Tableau是一款被应用得非常广泛,能够给你提供多种可视化方案的软件,不仅如此,它还有解释数据的功能。




六、Qlikview & Qliksense

Qlikview里面的图表等都是交互式的,它可以通过你的一个操作,立即同步更新所有对象,还可以显示数据的各种形态并查出异常值。


此外,Qlikview还可以将这些得到的可视化形式整合在一起,有助于同学们去横向比较
感谢评论区的知友提醒哦~ 下面提供的配图其实是QlikSense。QlikSense和Qlikview呢,是两个产品,其中Qliksense是一种直观的自主数据可视化程序,可以充分利用自助可视化、自定义开发和嵌入式分析,充分和Qlikview核心功能相似,都能够利用相同的底层数据模型,并支持交互式、沉浸式的发现体验。



再次感谢评论区的知友提醒哦~ 配图为QlikSense

七、FusionCharts

说到这个FusionCharts,其得到的可视化形式可谓真的是一场视觉盛宴啊!!不管是它的形状还是配色都不得不让芳老师这座冰山动心。颜值这么高也就算了,实力也不差——从简单的柱状图到复杂的漏斗图,FusionCharts都有。FusionCharts给各位同学们提供了百余种图表和上千个地图,话不多说,芳老师就让你们来看看这让我动心的神仙图吧:




此外,FusionCharts简直就像个贴心的小姐姐,还给同学们介绍了图表的适用范围如何使用,甚至连图表的局限性解决方式也全盘托出,OMG,i了i了。


八、Highcharts

Highcharts这款也给大家提供了非常多色彩也丰富的图表哦,除了2D、3D,它还提供动态图表呢~


九、Datawrapper

不晓得任何的代码也不懂设计,Datawrapper可以带同学们飞:

  • 第一步,从Excel等中导入数据(支持XLS/CSV/网址)
  • 第二步:点击选项,叮咚,完成辽~




十、Plotly

Plotly与上一款不同,它需要大家有一定的代码基础,但是与之相对的,它的能力很高,可以处理很多复杂的数据。
第一步:利用Python或者是R建立数据库。


第二步:用单个git命令进行数据部署。


第三步:出图辽~


以上这些绘图软件,同学们可以各取所需,希望同学们喜欢哈~

最后,如果大家对于科研背景提升论文发表「科研课题辅导」「名校科研助理申请」有任何想法的话,十分欢迎大家来戳一戳芳老师(一般人芳老师是不会告诉ta客服微信滴:invisor003,记得备注“知乎学术科研”哈~~~)❤️❤️ 喜欢记得点赞收藏转发
<hr/>【推荐阅读】

  • SCI论文写作必备网站神器,论文语言学术范走起!
  • SCI图文摘要不会做怎么破?芳老师六个要点大揭秘!!!
  • InVisor学术科研:号外!最新SCI论文发表流程小技巧大公开!
  • 如何在论文中画出漂亮的插图?

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则