Matlab科学图表美化——制作有渐变色线条的图表

本文分享了如何通过调整参数和使用colormap函数来优化MATLAB图表的视觉表现,包括改变颜色渐变、线条样式以及轴刻度设置,以提高图表的清晰度和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写几篇有关画好看一点的科学图表的文章吧~~


参考:

Improving Your MATLAB Figures 点击打开链接


首先尝试参考资料里代码,他在使用minmax有点小问题修改后结果很好

效果:


代码:

clc
clear all
close all

data = {};
data(end+1,:) = {'8/90', 121.8};
data(end+1,:) = {'9/90', 125.8};
data(end+1,:) = {'10/90', 133.5};
data(end+1,:) = {'11/90', 132.4};
data(end+1,:) = {'12/90', 134.1};
data(end+1,:) = {'1/91', 118};
data(end+1,:) = {'2/91', 109.4};
data(end+1,:) = {'3/91', 104};
data(end+1,:) = {'4/91', 107.6};
data(end+1,:) = {'5/91', 112.6};
data(end+1,:) = {'6/91', 112.8};
data(end+1,:) = {'7/91', 109.6};
data(end+1,:) = {'8/91', 111.5};
data(end+1,:) = {'9/91', 110.9};
data(end+1,:) = {'10/91', 108.8};
data(end+1,:) = {'11/91', 109.9};
data(end+1,:) = {'12/91', 107.6};
data(end+1,:) = {'1/92', 102.2};
data(end+1,:) = {'2/92', 100.6};
data(end+1,:) = {'3/92', 101.3};
data(end+1,:) = {'4/92', 105.2};
data(end+1,:) = {'5/92', 110.7};
data(end+1,:) = {'6/92', 114.5};
data(end+1,:) = {'7/92', 113.7};
data(end+1,:) = {'8/92', 112.2};
data(end+1,:) = {'9/92', 112.2};
data(end+1,:) = {'10/92', 111.4};
data(end+1,:) = {'11/92', 111.1};
data(end+1,:) = {'12/92', 107.8};
data(end+1,:) = {'1/93', 106.2};
data(end+1,:) = {'2/93', 105.4};
data(end+1,:) = {'3/93', 105.2};
data(end+1,:) = {'4/93', 107.8};
data(end+1,:) = {'5/93', 110};
data(end+1,:) = {'6/93', 109.7};
data(end+1,:) = {'7/93', 107.8};
data(end+1,:) = {'8/93', 106.2};
data(end+1,:) = {'9/93', 105};
data(end+1,:) = {'10/93', 109.2};
data(end+1,:) = {'11/93', 106.6};
data(end+1,:) = {'12/93', 101.4};
data(end+1,:) = {'1/94', 99.8};
data(end+1,:) = {'2/94', 100.9};
data(end+1,:) = {'3/94', 100.8};
data(end+1,:) = {'4/94', 102.7};
data(end+1,:) = {'5/94', 104.7};
data(end+1,:) = {'6/94', 107.8};
data(end+1,:) = {'7/94', 110.6};
data(end+1,:) = {'8/94', 115.5};
data(end+1,:) = {'9/94', 114.4};
data(end+1,:) = {'10/94', 111.4};
data(end+1,:) = {'11/94', 111.6};
data(end+1,:) = {'12/94', 109.1};
data(end+1,:) = {'1/95', 108.2};
data(end+1,:) = {'2/95', 107.3};
data(end+1,:) = {'3/95', 107.2};
data(end+1,:) = {'4/95', 111.1};
data(end+1,:) = {'5/95', 117.8};
data(end+1,:) = {'6/95', 119.2};
data(end+1,:) = {'7/95', 115.4};
data(end+1,:) = {'8/95', 112.3};
data(end+1,:) = {'9/95', 111.1};
data(end+1,:) = {'10/95', 108.7};
data(end+1,:) = {'11/95', 106.2};
data(end+1,:) = {'12/95', 107.1};
data(end+1,:) = {'1/96', 109};
data(end+1,:) = {'2/96', 108.9};
data(end+1,:) = {'3/96', 113.7};
data(end+1,:) = {'4/96', 123.1};
data(end+1,:) = {'5/96', 127.9};
data(end+1,:) = {'6/96', 125.6};
data(end+1,:) = {'7/96', 122.7};
data(end+1,:) = {'8/96', 120.7};
data(end+1,:) = {'9/96', 120.2};
data(end+1,:) = {'10/96', 120.4};
data(end+1,:) = {'11/96', 123.2};
data(end+1,:) = {'12/96', 123.5};
data(end+1,:) = {'1/97', 123.6};
data(end+1,:) = {'2/97', 123};
data(end+1,:) = {'3/97', 120.5};
data(end+1,:) = {'4/97', 119.9};
data(end+1,:) = {'5/97', 120};
data(end+1,:) = {'6/97', 119.8};
data(end+1,:) = {'7/97', 117.4};
data(end+1,:) = {'8/97', 122.4};
data(end+1,:) = {'9/97', 123.1};
data(end+1,:) = {'10/97', 119.7};
data(end+1,:) = {'11/97', 117.1};
data(end+1,:) = {'12/97', 113.1};
data(end+1,:) = {'1/98', 108.6};
data(end+1,:) = {'2/98', 104.9};
data(end+1,:) = {'3/98', 101.7};
data(end+1,:) = {'4/98', 103};
data(end+1,:) = {'5/98', 106.4};
data(end+1,:) = {'6/98', 106.4};
data(end+1,:) = {'7/98', 105.5};
data(end+1,:) = {'8/98', 102.6};
data(end+1,:) = {'9/98', 100.9};
data(end+1,:) = {'10/98', 101.9};
data(end+1,:) = {'11/98', 99.5};
data(end+1,:) = {'12/98', 94.5};
data(end+1,:) = {'1/99', 93.9};
data(end+1,:) = {'2/99', 92.1};
data(end+1,:) = {'3/99', 98.2};
data(end+1,:) = {'4/99', 113.1};
data(end+1,:) = {'5/99', 113.1};
data(end+1,:) = {'6/99', 111.4};
data(end+1,:) = {'7/99', 115.8};
data(end+1,:) = {'8/99', 122.1};
data(end+1,:) = {'9/99', 125.6};
data(end+1,:) = {'10/99', 124.4};
data(end+1,:) = {'11/99', 125.1};
data(end+1,:) = {'12/99', 127.3};
data(end+1,:) = {'1/00', 128.9};
data(end+1,:) = {'2/00', 137.7};
data(end+1,:) = {'3/00', 151.6};
data(end+1,:) = {'4/00', 146.5};
data(end+1,:) = {'5/00', 148.7};
data(end+1,:) = {'6/00', 163.3};
data(end+1,:) = {'7/00', 155.1};
data(end+1,:) = {'8/00', 146.5};
data(end+1,:) = {'9/00', 155};
data(end+1,:) = {'10/00', 153.2};
data(end+1,:) = {'11/00', 151.7};
data(end+1,:) = {'12/00', 144.3};
data(end+1,:) = {'1/01', 144.7};
data(end+1,:) = {'2/01', 145};
data(end+1,:) = {'3/01', 140.9};
data(end+1,:) = {'4/01', 155.2};
data(end+1,:) = {'5/01', 170.2};
data(end+1,:) = {'6/01', 161.6};
data(end+1,:) = {'7/01', 142.1};
data(end+1,:) = {'8/01', 142.1};
data(end+1,:) = {'9/01', 152.2};
data(end+1,:) = {'10/01', 131.5};
data(end+1,:) = {'11/01', 117.1};
data(end+1,:) = {'12/01', 108.6};
data(end+1,:) = {'1/02', 110.7};
data(end+1,:) = {'2/02', 111.4};
data(end+1,:) = {'3/02', 124.9};
data(end+1,:) = {'4/02', 139.7};
data(end+1,:) = {'5/02', 139.2};
data(end+1,:) = {'6/02', 138.2};
data(end+1,:) = {'7/02', 139.7};
data(end+1,:) = {'8/02', 139.6};
data(end+1,:) = {'9/02', 140};
data(end+1,:) = {'10/02', 144.5};
data(end+1,:) = {'11/02', 141.9};
data(end+1,:) = {'12/02', 138.6};
data(end+1,:) = {'1/03', 145.8};
data(end+1,:) = {'2/03', 161.3};
data(end+1,:) = {'3/03', 169.3};
data(end+1,:) = {'4/03', 158.9};
data(end+1,:) = {'5/03', 149.7};
data(end+1,:) = {'6/03', 149.3};
data(end+1,:) = {'7/03', 151.3};
data(end+1,:) = {'8/03', 162};
data(end+1,:) = {'9/03', 167.9};
data(end+1,:) = {'10/03', 156.4};
data(end+1,:) = {'11/03', 151.2};
data(end+1,:) = {'12/03', 147.9};
data(end+1,:) = {'1/04', 157.2};
data(end+1,:) = {'2/04', 164.8};
data(end+1,:) = {'3/04', 173.6};
data(end+1,:) = {'4/04', 179.8};
data(end+1,:) = {'5/04', 198.3};
data(end+1,:) = {'6/04', 196.9};
data(end+1,:) = {'7/04', 191.1};
data(end+1,:) = {'8/04', 187.8};
data(end+1,:) = {'9/04', 187};
data(end+1,:) = {'10/04', 200};
data(end+1,:) = {'11/04', 197.9};
data(end+1,:) = {'12/04', 184.1};
data(end+1,:) = {'1/05', 183.1};
data(end+1,:) = {'2/05', 191};
data(end+1,:) = {'3/05', 207.9};
data(end+1,:) = {'4/05', 224.3};
data(end+1,:) = {'5/05', 216.1};
data(end+1,:) = {'6/05', 215.6};
data(end+1,:) = {'7/05', 229};
data(end+1,:) = {'8/05', 248.6};
data(end+1,:) = {'9/05', 290.3};
data(end+1,:) = {'10/05', 271.7};
data(end+1,:) = {'11/05', 225.7};
data(end+1,:) = {'12/05', 218.5};
data(end+1,:) = {'1/06', 231.6};
data(end+1,:) = {'2/06', 228};
data(end+1,:) = {'3/06', 242.5};
data(end+1,:) = {'4/06', 274.2};
data(end+1,:) = {'5/06', 290.7};
data(end+1,:) = {'6/06', 288.5};
data(end+1,:) = {'7/06', 298.1};
data(end+1,:) = {'8/06', 295.2};
data(end+1,:) = {'9/06', 255.5};
data(end+1,:) = {'10/06', 224.5};
data(end+1,:) = {'11/06', 222.9};
data(end+1,:) = {'12/06', 231.3};
data(end+1,:) = {'1/07', 224};
data(end+1,:) = {'2/07', 227.8};
data(end+1,:) = {'3/07', 256.3};
data(end+1,:) = {'4/07', 284.5};
data(end+1,:) = {'5/07', 314.6};
data(end+1,:) = {'6/07', 305.6};
data(end+1,:) = {'7/07', 296.5};
data(end+1,:) = {'8/07', 278.6};
data(end+1,:) = {'9/07', 280.3};
data(end+1,:) = {'10/07', 280.3};
data(end+1,:) = {'11/07', 308};
data(end+1,:) = {'12/07', 301.8};
data(end+1,:) = {'1/08', 304.3};
data(end+1,:) = {'2/08', 302.8};
gas = cell2struct(data, {'date', 'price'}, 2);

ndates = numel(gas);

prices = [gas.price];
[M{1:ndates}] = deal(gas.date);

% Prune labels to last two digits
for k = 1 : ndates
	Year{k} = M{k}(end-1:end);
end



figure(1)
clf


% linear plot with color changing according to y-value
X = [1:ndates-1; 2:ndates];
Y = [prices(1:ndates-1) ; prices(2:ndates)]/100;

% Choose colors for lines based on y-value
% Only use subset of available colors
cm = colormap(hot);
mnmx= minmax(prices);
mn=mnmx(:,1);
mx=mnmx(:,2);
pix = round((32-1)*(prices-mn)/(mx-mn))+5;
clrs = cm(pix,:);

% Plot the lines then change color
L = line(X,Y);
for k = 1 : numel(L)
	set(L(k),'Color',clrs(k,:),'LineWidth',2);
end

% Change the aspect ratio of the plot
set(gca,'PlotBoxAspectRatio',[2 1 1])

% Set x-ticks at January of every year
dateind = [6:12:ndates];
set(gca,'XTick',dateind,'XTickLabel',Year(dateind));
axis([1 ndates 0.5 3.50])

% Plot dashed lines from point where price passes even dollar amount
line([1 ndates],[1 1],'Color','k','LineStyle','--')
ix2 = min(find(prices/100 > 2));
line([ix2 ndates],[2 2],'Color','k','LineStyle','--')
ix3 = min(find(prices/100 > 3));
line([ix3 ndates],[3 3],'Color','k','LineStyle','--')
set(gca,'YAxisLocation','right')

% Set ytick and label to only show even dollar amounts
set(gca,'YTick',[1 2 3],'YTickLabel',{'$1', '$2', '$3'});

% Label the axes and set font size
set(gca,'FontSize',14)
xlabel('Year', 'FontSize', 18);
ylabel('Price', 'FontSize', 18);

然后我换一个冷色的:
效果(只能说。。冷色就是冷色。。。。比较难分辨,并且,勉强用到连续图形上出现锯齿。。。):


代码:
clc
clear all
close all


figure(1)

t=0:0.001:2*pi;
y=sin(t)+5;
cm=colormap(winter);
%then mapping
mnmx=minmax(y);
mn=0*mnmx(:,1)+5;
mx=mnmx(:,2);
pix = round((numel(cm)/6-1)*abs(y-mn)/(mx-mn))+1;
clrs = cm(pix,:);

% Plot the lines then change color
for k = 1 : numel(t)
	line(t(k),y(k),'Color',clrs(k,:),'LineWidth',10);
end

技术点:

用colormap获得渐变色,然后分段画就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值