补于2021.3.23
出处:http://blog.sina.com.cn/s/blog_49d955150101jyd9.html
data = rand(25)+repmat(1:25,25,1);
H = plot(data); %现在H中有25条线
h1=legend([H(2),H(4)],'2','4'); %部分图例显示:第2条,第4条
set(h1,'Orientation','horizon'); %横排
set(h1,'Box','off'); %不显示边框
legend('Location','SouthEast'); %位置显示在东南(右下)
legend('Location','Best'); %自动选择合适的位置
% 多图例
ah=axes('position',get(gca,'position'),'visible','off');
legend(p1,{legend_tick1},'FontSize',10,'Orientation','horizontal','Box','off','Location','Best');
legend(ah,p2,{legend_tick2},'FontSize',10,'Orientation','horizontal','Box','off','Location','Best');
用上面的代码绘图如下所示:
其实关于location,有如下选择:
位置 | 解释 |
---|
North | Inside plot box near top |
South | Inside bottom |
EastI | nside right |
West | Inside left |
NorthEast | Inside top right (default) |
NorthWest | Inside top left |
SouthEast | Inside bottom right |
SouthWest | Inside bottom left |
NorthOutside | Outside plot box near top |
SouthOutside | Outside bottom |
EastOutside | Outsideright |
WestOutside | Outside left |
NorthEastOutside | Outside top right |
NorthWestOutside | Outside top left |
SouthEastOutside | Outside bottom right |
SouthWestOutside | Outside bottom left |
Best | Least conflict with data in plot |
BestOutside | Least unused space outside plot |
横排指定列数:'NumColumns',10
legend(p,Name,'FontSize',8,'Orientation','horizontal','Box','off','Location','Best','NumColumns',10);
补于2021.3.23
参考:Matlab_GUI gcf、gca 以及gco 的区别用法
https://blog.csdn.net/u013346007/article/details/54377602
目前对gco了解不是很多遍,它们三个的含义如下:
名称 | 含义 |
---|
gcf | 返回当前Figure 对象的句柄值 |
gca | 返回当前axes 对象的句柄值 |
gco | 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure 的CurrentObject属性中。 |
下面是笔者简单的理解:
gcf,gca,gco和ans一样,是matlab中的保留字,但又和ans不一样的地方是,它不会存在于workspace中,但是在command window中输入gcf(即使你之前没有调用过figure),它就会返回一个值,这个值就指向一个figure。
句柄就相当于C中的指针(C中也有句柄好像,奈何笔者只是个半吊子C程序编写者,对句柄的理解还不是很到位)比如笔者运行一个figure
指令,那么此时的gcf
就会指向这个figure,然后gca就指向这个figure的坐标系(这个figure中此时只有一个图,换句话说,就是只有一个坐标系),倘若笔者再调用指令subplot(2,1,2)
,那么此时gcf还是指向这个图,gca指向的是这个图中两行一列第二行的那个子图的坐标系;再调用指令subplot(3,1,1)
,那么此时gcf还是指向这个图,gca指向的是这个图中三行一列第一行的那个子图的坐标系。
Matlab这样的设计真实爽爆了,笔者可以调用函数画图,返回这个图的句柄gcf,然后,可以通过subpolt,gca修改图中元素,最后再通过gcf来保存这个图。非常方便,实用,非常nice!调用函数的时候一般不会直接返回gcf,而是返回一个其他的量,比如pgcf(主要是为了避免和gcf重名,为后续操作带来便利)。这样做的好处在于,我保留了figure1的句柄pgcf1,然后不影响我画其他的图,比如我再画个figure2,pgcf2=gcf
,然后我还想回来改figure1中的标注等,这时候就有妙用了gcf=pgcf1
,然后subplot,gca随便改。
这是笔者刚领悟到这点所码的,不知道笔者所言各位看懂没有,笔者刚产生这种想法,还没来得及实践,反正笔者当前很激动。
经实践,确实可行,只是要注意一点:换gcf之后,gca还停滞在之间的状态,这时候需要subplot一下,若换后的gcf中只有一个图,就subplot(1,1,1)
。
实际上,xticklabel 并不能旋转,视觉上的旋转是通过text实现的。
set(gca,'xticklabel', '');
xt = get(gca, 'XTick');
yt = get(gca, 'YTick');
xtextp = xt;
ytextp = (-0.01*(yt(end)-yt(1)) + yt(1)) * ones(1, length(xt));
text(xtextp, ytextp, satc, 'HorizontalAlignment', 'right', 'rotation', 30, 'fontsize', 10);
plot(x,y);
plot(x1,y1,x2,y2,…,xn,yn);
plot(M);
为了让图形更加美观,可以添加一些辅助元素:
还可以进一步设置包括线的宽度(LineWidth
),标记点的边缘颜色
(MarkerEdgeColor
),填充颜色(MarkerFaceColor
)及标记点的大小(MarkerSize
)等其它绘图属性.
使用示例:
plot(x,y,'b:p')
plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)
之后还可以加点图例等:
%set(gca,'FontName','Times New Roman','FontSize',14,'FontWeight','bold','FontAngle','italic' )%设置坐标轴刻度字体名称,大小,加粗 ,斜体;
title('图形名称')
xlabel('x轴说明')
ylabel('y轴说明')
text(x,y,'图形说明')
legend('图例1','图例2',…)
axis([xmin xmax ymin ymax zmin zmax])
axis equal
axis square
axis auto
axis off
axis on
grid on/off
box on/off
hold on/off
subplot(m,n,p)
上述函数中的说明文字,除了使用标准的ASCII字符外,还可以使用LaTex(一种流行的数学排版软件)格式的控制字符,这样就可以在图形上添加希腊字符,数学符号和公式等内容。在Matlab支持的LaTex字符串中,用/bf
, /it
, /rm
控制字符分别定义黑体、斜体和正体字符,受LaTex字符串控制部分要加大括号{}括起来。例如,text(0.3,0.5,'the usful {/bf MATLAB}')
,将使MATLAB一词黑体显示。一些常用的LaTex字符见表,各个字符可以单独使用也可以和其他字符及命令配合使用。如text(0.3,0.5,'sin({/omega}t+{/beta})')
x=linspace(0,2*pi,100);
y1=sin(x);
plot(x,y1,':r');
title('使用示例');
text(1,0,'0');%标注(1,0)点
ylabel('\Gamma');
xlabel('\theta');
axis equal %纵横坐标轴采用等长刻度
grid on
box on
hold on
x=(2003:5:2022);%
x1=sprintfc('%g',x);%转成字符串数组
plot(Time,CHLAmean');
axis([2002 2022 2.5 4.5]);%here!!
y=(3:0.5:4.5);%here!!
set(gca,'XTick',x,'XTicklabel',x1);
set(gca,'YTick',y);
set(gca,'FontName','Times New Roman');
xlabel('(b) T/year');
ylabel('CHLA/mg\cdotm^{-3}');
1.首先加载一个矩阵:
可以看到,矩阵当中有nan,也有正常数据。为了可以总览全局,我将这些数据放到Excel里面,然后在缩小一下如下图:
然后对矩阵的特征进行一下介绍:
[a,b]=size(m);
num=a*b-numel(find(isnan(a))); %矩阵中除了nan外所有元素的个数
m1=reshape(m,a*b,1); %搞成一个列向量
max1=max(m1); %计算最大值
min1=min(m1); %计算最小值
mean1=nanmean(m1); %计算除nan之外的均值
mode1=mode(m1); %除了nan 返回值最小的那个众数
med1=nanmedian(m1); %求除了nan的中位数
217x217
max1=20.21
min1=1.22
med1=7.055
对数据的样子有了一个大概的了解,下面开始尝试画图。
代码 | 图像 |
---|
– | |
imshow(SST); | |
imshow(SST,[]); | |
F1=mapminmax(SST); %F1 ∈[-1,1]
F1=F1.*0.5+0.5; %F1 ∈[0,1]
% [y,ps] = mapminmax(SST);
% ps.ymin = 0;
% [y,ps] = mapminmax(SST,ps); %这三行与上面两行异曲同工 | |
imagesc(SST); | |
contourf(SST,'LineStyle','none');colormap(jet);colorbar | |
pcolor(SST); | |
A=[0.8 0.1 0.5
0.2 0.4 0.7
0.5 0.3 0.6];
imagesc(A);
colormap jet
colorbar; | |
A=[0.8 0.1 0.5
0.2 0.4 0.7
0.5 0.3 0.6];
imagesc(A);
colorbar
caxis([0 1])
[M, N] = size(A);
set(gca, 'XTick', 1:M,'XTickLabel', {'0','1','2'})%X坐标轴刻度数据点位置、字符
set(gca, 'YTick', 1:N, 'YTickLabel', {'0','1','2'})
loc = get(xlabel(''), 'position');
text(loc(1), loc(2), loc(3), 'Predicted label', 'HorizontalAlignment','center');
set(gca, 'XAxisLocation', 'top')
ylabel('True label')
title('Confusion matrix') | |
目前就会这几种,第六个最好用;imshow()只能显示灰度在[0,1]之间的,大于1的显示为白色;imagesc()将图像显示为彩色,没有取值限制;colormap()可将图像显示为彩色,关于colormap可以参看下面的文章:
https://blog.csdn.net/weixin_42943114/article/details/81811556
下面一起来出一个比较专业的图,所用的数据还是上面那个217x217
的矩阵。
代码如下:
X=117:0.0416666666666:126;
Y=33:0.0416666666666:42;
x0=2*24:2*24:217; % 每隔两度标一下
y0=2*24:2*24:217;
x=119:2:126; %标注用的
y=35:2:42; %标注用的
x1=sprintfc('%g',x);%转成字符串数组
y1=sprintfc('%g',y);%转成字符串数组
n=size(x1,2);
for i=1:n
x1{1,i}=[x1{1,i},'°E'];
y1{1,i}=[y1{1,i},'°N'];
figure1 = figure;
ax2=axes('Parent',figure1);;%有子图时,ax2=subplot(2,3,2);
contourf(SST1,'LineStyle','none')
colormap(jet);
set(gca,'XTick',x0,'XTicklabel',x1); %设置x,y轴
set(gca,'YTick',y0,'YTicklabel',y1);
set(gca,'FontName','Times New Roman'); %更改字体为罗马
xlabel('(a) SST');
set(ax2,'XAxisLocation','top');%把x坐标轴搞到上面去
h=colorbar;
set(get(h,'Title'),'string','K'); %给colorbar加上单位
用的还是2中的那个矩阵
GeoRef = georasterref('Rastersize',size(SST'),'Latlim',[double(min(Lat)),double(max(Lat))],'Lonlim',[double(min(Lon)),double(max(Lon))]);
%数据的写出
% data = flipud(SST');
SST_Tif = ['C:\Users\hp\Documents\MATLAB\','A20160922016121_01.tif'];
geotiffwrite(SST_Tif,flipud(SST'),GeoRef)
注意图的正反,下图才是正着看的:
出处:https://www.csdn.net/gather_2e/MtzaUg0sNzk0LWJsb2cO0O0O.html
实现函数:
function [] = plotBarStackGroups(stackData, groupLabels)
%% Plot a set of stacked bars, but group them according to labels provided.
%% Params:
%% stackData is a 3D matrix (i.e., stackData(i, j, k) => (Group, Stack, StackElement))
%% groupLabels is a CELL type (i.e., { 'a', 1 , 20, 'because' };)
NumGroupsPerAxis = size(stackData, 1);
NumStacksPerGroup = size(stackData, 2);
% Count off the number of bins
groupBins = 1:NumGroupsPerAxis;
MaxGroupWidth = 0.65; % Fraction of 1. If 1, then we have all bars in groups touching
groupOffset = MaxGroupWidth/NumStacksPerGroup;
figure
hold on;
for i=1:NumStacksPerGroup
Y = squeeze(stackData(:,i,:));
% Center the bars:
internalPosCount = i - ((NumStacksPerGroup+1) / 2);
% Offset the group draw positions:
groupDrawPos = (internalPosCount)* groupOffset + groupBins;
h(i,:) = bar(Y, 'stacked');
set(h(i,:),'BarWidth',groupOffset);
set(h(i,:),'XData',groupDrawPos);
hold off;
set(gca,'XTickMode','manual');
set(gca,'XTick',1:5:NumGroupsPerAxis);
set(gca,'XTickLabelMode','manual');
set(gca,'XTickLabel',groupLabels);
调用实例:
Fmean=(1:72);
F=reshape(Fmean,4,18);
A=reshape(F',[18 1 4]);
plotBarStackGroups(A,x1);
set(gca,'FontName','Times New Roman');
legend('Jan.','Feb.','Mar.','Apr.');
xlabel('(b) T/year');
ylabel('F/\mumol\cdotm^{-2}\cdoth^{-1}');
figure(2)
x2=(1:12*40+4);
x21=x2(1:12*13);XCO21=XCO2(1:12*13,1); %第一段
x22=x2(12*16:end);XCO22=XCO2(12*16:end); %第二段
a=polyfit(x21',XCO21,1);%得到拟合参数a 1x2
b=a(1,2);
a1=a(1,1);
y1=a1.*x21+b;
a=polyfit(x22',XCO22,1);%得到拟合参数a 1x2
b=a(1,2);
a=a(1,1);
y2=a.*x22+b;
plot(x2',XCO2,x21,y1,'r:',x22,y2,'r:');
x0=(3:5*12:12*41);
x=(1980:5:2022);%
x1=sprintfc('%g',x);%转成字符串数组
set(gca,'XTick',x0,'XTicklabel',x1);
set(gca,'FontName','Times New Roman');
xlabel('T/year');
annotation('arrow',[0.3,0.25],[0.3,0.35]);%箭头标注
text(36,359,'a1=1.5');%文字标注
annotation('arrow',[0.75,0.80],[0.7,0.65]);%箭头标注
text(440,390,'a1=2.0');%文字标注
ylabel('XCO2/ppm');
补于2021/3/7
参考:https://blog.csdn.net/wokaowokaowokao12345/article/details/92718896
箱型图是我最近才学到的一种图,它主要是用于描述统计量的。它主要由五根横线表示一组统计数据的分布,这五根横线分别为最小值、下四分位数、中位数、上四分位数、最大值,有时还会有异常值。异常值也可以表示为位于分布的整体之外的值,因此可以影响整个数据系列。
异常值通常被认为是由于存在可能低估或高估研究的极值而导致测量误差的原因,因为它与来自群体的随机样本中的其他值具有异常距离。根据所有统计学家遵循的基本标准,对异常值的通用定义是落在第三个四分位数之上或低于第一个四分位数的四分位数距的1.5倍以上。
下面看个例子:
X = [1.2 1.8 3.2 3.8 5.2 5.8];
Y = rand(100, 6);
boxplot(Y, 'positions', X, 'labels', X)
结果:
原博文文尾有两个求最值、中位数的函数,啥时候可能用可以去看看。
此篇博客介绍了一些笔者的matlab绘图经验,其中有早期所写的(当时文笔还比较生疏,虽然现在也好不到哪里去),也有随时间流逝而补充的。当前内容有:线型颜色符号、希腊字母及数学符号、annotation函数、Legend 终极使用plot函数画曲线图、用矩阵画图(imshow、mapminmax、imagesc、contourf、pcolor……)、矩阵转tiff、画堆积柱状图、分段拟合、画箱形图目前篇幅有点长,不忍心将之前写的删除,有计划另开一篇作为这篇的补充。
如下面代码所示,运行结果title和横纵坐标只在第二个
axes显示。
plot(handles.
axes5,tau/tm,ambig(N_fft/2+1,:),tau/tm,ambig(N_fft/2+200,:),'r');
title('不同多普勒频率的切割');
xlabel('归一化时间\T');
ylabel('Amp');
plot(handles.
axes6,freq/B,ambig(N_fft/2+1,:),freq/B,ambig(N_fft/2+200,:),'r');
这个虽然在平时不怎么用到,但是在做matlab GUI的时候,已经在界面上设置了两个axes,但是不能够每次取创建两个新的axes,只能通过他们的handle来切换。handle_s1 = axes('Position', [0.05, 0.5, 0.45, 0.45]);Hd_open = uicontrol('Parent',Hd_p4,'Style','Push',...
'Strin
其中limits 是 [cmin cmax] 形式的二元素向量。
坐标点的颜色索引值在cmin到cmax之间,按线性比例给坐标点涂上颜色,大于等于cmax,全部涂上颜色图最后一行的颜色;小于等于cmin,全部涂上颜色图第一行的颜色。
例子: caxis([20 50]) %小于或等于 20...
MATLAB是一种功能强大的计算机编程语言,可以用它进行绘图和可视化工作。MATLAB中的plot函数可以用来绘制2D图形,包括折线图、散点图和面积图等。使用plot函数时,需要输入要绘制的x和y坐标轴上的数据,也可以设置线条颜色、样式等属性。
在MATLAB中,绘图的流程一般为:先创建一个图形窗口、定义数据并设定绘图样式,然后使用plot函数绘制图像。绘图时要注意横坐标和纵坐标的数据类型和范围,以及图像的标签、标题等细节。
除了plot函数,MATLAB还提供了许多其他绘图函数,如bar、histogram、scatter等,可以满足不同需求下的数据可视化要求。
总之,MATLAB是一款强大的绘图工具,通过plot函数等绘图函数,我们可以快速、有效地绘制出高质量的图像,从而更好地展示和分析数据。