这建立在

Jens Boldsen’s answer之上,它添加了以下内容:

>可以旋转表示图例中错误栏的线条使其垂直,或保持默认的水平方向;

>该行的末尾用短线“关闭”.

该方法非常通用,因为它支持:

>任意颜色,线型和标记作为错误栏的参数.请注意,实际条形图始终绘制为实线,没有标记(使用指定的颜色).这是根据errorbar行为.

>新创建的短线随图例移动.

>这些线的宽度是可配置的参数.此外,errobar的长度是垂直情况下的参数.两者都以相对于图例的标准化单位定义.

根据Matlab版本,该方法略有不同,因为R2014b中引入的图形对象发生了变化.此外,图例中的errobar线可以是水平的或垂直的.

所以有四种情况.

案例I:Pre-R2014b,图例中的水平误差条

绘制数据和图例后,代码将遵循以下步骤:

>获得传奇的孩子们

>在这些孩子中找到合适的路线

>获取其x和y坐标

>利用这些坐标,在每一端创建两条短线.将这些线条作为传奇的子项,以便它们随之移动.

该代码已在Matlab R2010b中测试过.

%// Define graph aspect

color_spec = 'r'; %// color of data and bars.

linestyle_spec = '--'; %// linestyle for data. The bars are always solid

marker_spec = 'o'; %// marker for data

wid = .12; %// width of bar in legend. Normalized units

%// Plot errobar

h_er = errorbar([1 2], [2 3], [0.1 0.2], [color_spec linestyle_spec marker_spec]);

%// Add dummy line for legend (as per Jens Boldsen) and create legend

hold on;

plot(0,0,color_spec); %// linestyle is always solid with no marker

h_le = legend('Mean','Standard deviation','Location','north');

%// Add short lines at each end of line in the legend

c_le = get(h_le, 'Children'); %// step 1

h_li = findobj(c_le, 'linestyle','-', 'color',color_spec, 'marker','none'); %// step 2

h_li = h_li(1); %// in case there's more than one

li_x = get(h_li,'XData'); %// step 3

li_y = get(h_li,'YData');

line(li_x([1 1]), li_y+wid*[-.5 .5], 'parent',h_le, 'color',color_spec); %// step 4

line(li_x([2 2]), li_y+wid*[-.5 .5], 'parent',h_le, 'color',color_spec);

案例II:R2014b,图例中的水平误差条

在Matlab R2014b中,图例不再是轴对象,也没有子对象.因此,必须针对案例I修改步骤1和2:

>创建图例时获取图例的图标

>在这些图标中查找相应的行

>获取其x和y坐标

>利用这些坐标,在每一端创建两条短线.使这些线与初始线共享父线,以便它们与图例一起移动.

此外,此Matlab版本中的新语法有助于简化代码.

%// Define graph aspect

color_spec = 'r'; %// color of data and bars.

linestyle_spec = '--'; %// linestyle for data. The bars are always solid

marker_spec = 'o'; %// marker for data

wid = .12; %// width of bar in legend. Normalized units

%// Plot errobar

h_er = errorbar([1 2], [2 3], [0.1 0.2], [color_spec linestyle_spec marker_spec]);

%// Add dummy line for legend (as per Jens Boldsen)

hold on;

plot(0,0,color_spec); %// linestyle is always solid with no marker

%// Create legend and add short lines at each end of line in the legend

[~, icons] = legend('Mean','Standard deviation','Location','north'); %// 1

li = findobj(icons, 'type','line', 'linestyle','-'); %// 2

li = li(1); %// in case there's more than one

li_x = li.XData; %// 3

li_y = li.YData;

line(li_x([1 1]), li_y+wid*[-.5 .5], 'parent',li.Parent, 'color',color_spec); %// 4

line(li_x([2 2]), li_y+wid*[-.5 .5], 'parent',li.Parent, 'color',color_spec);

案例III:Pre-R2014b,图例中的垂直错误栏

这与情况I类似,但需要摆弄线条的x和y坐标.此外,引入了一个新参数来控制图例中错误栏的长度.

%// Define graph aspect

color_spec = 'r'; %// color of data and bars.

linestyle_spec = '--'; %// linestyle for data. The bars are always solid

marker_spec = 'o'; %// marker for data

wid = .04; %// width of bar in legend. Normalized units

len = .45; %// length of main bar in legend. Normalized units

%// Plot errobar

h_er = errorbar([1 2], [2 3], [0.1 0.2], [color_spec linestyle_spec marker_spec]);

%// Add dummy line for legend (as per Jens Boldsen) and create legend

hold on;

plot(0,0,color_spec); %// linestyle is always solid with no marker

h_le = legend('Mean','Standard deviation','Location','north');

%// Add short lines at each end of line in the legend

c_le = get(h_le, 'Children');

h_li = findobj(c_le, 'linestyle','-', 'color',color_spec, 'marker','none');

h_li = h_li(1); %// in case there's more than one

set(h_li,'XData', repmat(mean(get(h_li,'XData')),1,2));

set(h_li,'YData', mean(get(h_li,'YData'))+len*[-.5 .5]);

li_x = get(h_li,'XData');

li_y = get(h_li,'YData');

line(li_x+wid*[-.5 .5], li_y([1 1]), 'parent',h_le, 'color',color_spec);

line(li_x+wid*[-.5 .5], li_y([2 2]), 'parent',h_le, 'color',color_spec);

案例IV:R2014b,图例中的垂直错误栏

同样,这与案例II类似,但有一些摆弄线的坐标.

%// Define graph aspect

color_spec = 'r'; %// color of data and bars.

linestyle_spec = '--'; %// linestyle for data. The bars are always solid

marker_spec = 'o'; %// marker for data

wid = .05; %// width of small bars in legend. Normalized units

len = .45; %// length of main bar in legend. Normalized units

%// Plot errobar

h_er = errorbar([1 2], [2 3], [0.1 0.2], [color_spec linestyle_spec marker_spec]);

%// Add dummy line for legend (as per Jens Boldsen)

hold on;

plot(0,0,color_spec); %// linestyle is always solid with no marker

%// Create legend, modify line and add short lines

[~, icons] = legend('Mean','Standard deviation','Location','north');

li = findobj(icons, 'type','line', 'linestyle','-');

li = li(1); %// in case there's more than one

li.XData = repmat(mean(li.XData),1,2);

li.YData = mean(li.YData)+len*[-.5 .5];

li_x = li.XData;

li_y = li.YData;

line(li_x+wid*[-.5 .5], li_y([1 1]), 'parent',li.Parent, 'color',color_spec);

line(li_x+wid*[-.5 .5], li_y([2 2]), 'parent',li.Parent, 'color',color_spec);

matlab plot errorbar,如何为MATLAB errorbar plot的点和垂直线设置不同的图例?相关推荐

  1. matlab数据可视化总结,机器学习----Matlab数据可视化总结(plot篇)

    前言 通过资料的整理,使用Matlab语言的plot函数将数据可视化,plota函数也是一个比较常用的二维绘图函数,针对向量或矩阵.如果你也想试一试,初学者记得使用clf.close或close al ...

  2. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

  3. 根据坐标如何在matlab中l连成曲线,matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样...

    matlab中,如何将两条曲线画在一个坐标系里,plot(x1,x2,y1,y2)还是怎样以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快 ...

  4. matlab绘制分组条形图的误差棒errorbar

    matlab绘制分组条形图的误差棒errorbar 代码分享 参考资源 代码分享 efficiency=[35.61 44.58 44.68 46.72 41.35;49.89 50.97 50.16 ...

  5. Matlab——Simulink输出的数据怎么利用plot函数绘图

    Matlab--Simulink输出的数据怎么利用plot函数绘图 1.将需要导出的数据添加至To Workspace模块. 2.设置To Workspace模块的名称并配置好模式,一般选择array ...

  6. matlab yticklable,Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings)

    Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings) 我有一个情节: x = [0 1 2 3]; y = [0 0 1 1]; ...

  7. MATLAB 常用命令和使用语法以及plot画图讲解(一)

    1 常用命令 1.clc - 清除命令行窗口的所有数据. 2.clear - 清除工作区的所有的数据. 3.close - 关闭最后生成的一个图 4.close all - 关闭所有画的图. 2 语法 ...

  8. float gpu 加速_(总结篇)使用 MATLAB GPU 加速计算|MATLAB 并行计算与分布式服务器|MATLAB技术论坛...

    本帖最后由 蓝云风翼 于 2013-12-18 17:28 编辑 注: 利用gpu加速有一下工具 1.JACKET 可从帖子中寻找 2.MATLAB a.并行计算工具箱 gpuArray,查看支持gp ...

  9. 用matlab的数据绘图,[精品]MATLAB常用数据绘图示例 -工程

    1.三维曲线 >> t=0:pi/50:10*pi; >> plot3(sin(2*t),cos(2*t),t) >> axis square >> g ...

最新文章

  1. 在vc6控制台程序中如何调用运行ImageMagick命令行工具
  2. [JDK8] Stream
  3. Tomcat8源码编译及导入Eclipse中研究
  4. openjdk jvm_Java / JVM是如何构建的? 采用OpenJDK是您的答案!
  5. linux 文件重命名或文件移动
  6. TextRank算法可以用来从文本中提取关键词和摘要(重要的句子)
  7. aspnet ajax 1.0中的according控件
  8. Oozie的安装及使用
  9. 以智能制造推动企业数字化转型的方法、路径和举措
  10. Android Toast的时长
  11. c语言键盘符号大全,c语言实现数学符号软键盘源码
  12. Epub电子书的格式(二)
  13. mysql类似于excel的删除重复项_Excel去除重复项的三种常用技巧
  14. 后端使用postman进行测试
  15. 电子学:第010课——实验 9:时间与电容器
  16. 苹果IOS企业开发者账号怎么申请——苹果账号申请记录(未完待续)
  17. 让人着迷的 STP生成树协议
  18. windows10配置jdk8和jdk11并存和切换
  19. php|thinkphp程序合成图片+文字+图片大小调整+正方形转换圆角+去除白色边框
  20. Docker容器获取局域网ip(使用macvlan)

热门文章

  1. java pojo使用_在POJO中使用ThreadLocal进行Java嵌套事务
  2. solr crud_Spring Data Solr教程:CRUD(差不多)
  3. ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)
  4. jsf集成spring_Spring和JSF集成:异常处理
  5. Java中使用ArrayList的10个示例–教程
  6. 从数组到流再到Java 8
  7. Apache Spark:更改架构之前必须解决的5个陷阱
  8. 净值:测试编码器/解码器
  9. 使用tinylog 1.0简化您的日志记录
  10. 指定Gradle构建属性