精华内容
下载资源
问答
  • matlab开发-右键单击检查属性。将项目添加到右键单击菜单以打开属性检查器
  • 属性表(或属性网格)列出了 MatLab 值或句柄对象的公共属性,并允许用户使用其自然表示来编辑每个属性值。 特别是, * 字符数组可以作为字符串就地编辑; * 矩阵和向量可以编辑为文本(例如 [1,2;3,4])或在弹出...
  • 画完图后,想通过图窗属性更改一下线条颜色等属性,但是显示错误
  • 属性网格(也称为属性浏览器、检查器、窗格和工作表)显示具有可就地编辑值的(对象)属性列表。 每个属性都有一个关联的语义(或类型),它限制了属性可以采用的可能值并帮助以自然的方式可视化属性值,例如* 字符...
  • 当你需要访问serial对象的属性,使从属属性与get和set方法,只是通过值或从底层serial对象。同样,如果您需要访问serial对象的方法,创建类的方法,只是通过底层serial对象调用。 该模式使用组合物而非继承。这通常...

    我猜你会继续有类似的问题(我想我看到了另一个类似的问题,前几天,可能已经从你的,这表明或许你已经发现这一点)。

    我会建议你不要子类serial。取而代之的是,创建一个类,包装serial,类似如下: classdef MyClass

    properties (Hidden, Access = private)

    myserialobject

    end

    properties

    mySubClassProp1

    mySubClassProp2

    %...

    end

    properties (Dependent)

    mySerialProp1

    mySerialProp2

    %...

    end

    methods

    function obj = MyClass(port)

    obj.myserialobject = serial(port);

    % Set other subclass props

    end

    end

    methods

    function val = get.mySerialProp1(obj)

    val = obj.myserialobject.mySerialProp1;

    end

    function obj = set.mySerialProp1(obj, val)

    obj.myserialobject.mySerialProp1 = val;

    end

    %... pass through get and set for each serial prop you need to access

    function obj = mySerialMethod1(obj, varargin)

    mySerialMethod1(obj.myserialobject, varargin{:});

    end

    %... pass through method for each serial method you need to access

    end

    end

    基本上你有一个类,它有一个serial对象的属性,有一堆属性和作为自己的方法好。当你需要访问serial对象的属性,使从属属性与get和set方法,只是通过值或从底层serial对象。同样,如果您需要访问serial对象的方法,创建类的方法,只是通过底层serial对象调用。

    该模式使用组合物而非继承。这通常(并非总是)好的做法,但在这种情况下,它还可以为您节省超载的所有问题subsref。

    展开全文
  • LSL是将OpenBCI流发送到可以记录或操作数据的应用程序(如Matlab)的好方法。 FFT数据现在可以通过LSL发送,从guiv.4.1.5-beta.3开始。 对于某些数据类型,更改#Chan以匹配数据类型是有帮助的。示例:Focus是单个数字...

    146b89a5586388b598275dde8319941e.png

    什么是图形用户界面?

    GUI小部件是适合OpenBCI GUI界面窗格的小工具。GUI小部件的示例包括时间序列、FFT小部件、网络小部件等。

    在每个小部件的左上角,都有一个下拉菜单,列出了所有可用的小部件。如果您单击下拉列表并从下拉列表中选择一个新的小部件,它将替换该窗口中的当前小部件。您可以通过单击GUI右上角的“layout”按钮来重新安排小部件的布局。

    855e259fde4681e4663dde272cb4b72d.gif            a28d50bf0993d0f434850d6d8ab1f9ed.png 时间序列 时间序列是显示生物传感数据的主要部件。它对电生理信号进行实时处理和显示,每个图形代表一个电极在某个时间点检测到的电压。 它以电压为单位测量信号的绝对振幅,单位为μVrms(微伏,均方根)。 每一个超级皮层都配有与图形用户界面(GUI)相匹配的颜色编码曲线,这是跟踪哪个电极映射到哪个通道的有用方法。            1fb66e9c13d92742e3910de75f764262.png    

    硬件设置

    单击“硬件设置”按钮将打开一个菜单,允许您微调每个通道的PGA增益、偏差和其他硬件设置。

    其他设置

    通道按钮:这些按钮代表每个连接的电极通道。您可以打开/关闭它们来控制是否要从该电极收集数据。

    视图设置

    垂直刻度——控制时间序列中显示的μV范围。注意:设置为自动,以避免切断数据和显示良好的峰值和波谷,根据需要进行微调。

    窗口——控制序列中显示的时间量。

    围栏/近围栏警告

    这些警告表明没有信号或信号不良,您需要检查电极,以确保它们与您的身体接触良好。

    阻抗检查

    发送一个测试电流下引脚检查阻抗。信息以kΩ表示。注意:在检查期间,数据将自动停止流式传输。

               a225de875e205bc65cbfa577c5fbbdcb.png FFT图 这是生物传感工具的标准数据可视化功能。x轴显示各种频率,y轴显示每个频率的相应振幅,单位为μV。默认情况下,这些振幅以对数形式显示(推荐设置),但您可以在log/ln下拉列表中更改此设置。 注:FFT图中的每种颜色都经过颜色编码,以匹配时间序列中的通道。 加速度计 每个OpenBCI板都配备了一个三轴加速计,数据从它流到这个小部件。这个加速度计测量板本身在XYZ轴上的加速度。 轴图形:在图形上直观地显示当前时刻的相对XYZ加速度 时间轴:显示随时间变化的相对XYZ加速度,按轴进行颜色编码。 头部图 头部曲线图显示头部的哪些区域活动最频繁。一个区域的红色越深,该区域的大脑活动就越多。等高线也显示了连接不同区域的相似活动水平。 图上的每个数字对应于时间序列小部件中显示的电极通道。这些数字与Ultracortex Mark IV的建议装配相对应。但是,每一个都可以拖动到不同的位置进行定制配置。

    7d99082b73e1dae66c0f6d0527273ef1.png

    默认节点位置

    d3c2b06df4fff80d66d72475b7eb3774.png

    基于10-20模型

    P7和P8是节点T5和T6的新术语

    极性

    与参考相比,引脚输入可以产生正值或负值。选择“+/-”将显示从参考测量的真实值。因此,如果电压测量值低于参考值,则值将显示为负值(或蓝色),如果电压测量值高于参考值,则值将为正值。或者,“+”将只显示绝对值,而不考虑信号是正还是负。

    b7d4c0e274758b004f7effa39d4e574c.png

    焦点小部件(暂时不推荐)

    从guiv5.0.0开始,在实现更可靠和基于研究的Focus算法之前,这个特性暂时不推荐使用。如果您还想使用这个小部件,可以下载并运行guiv4.2.0。

    这个小部件通过观察通道1和通道2上的α和β波水平来识别一种集中精神状态。它是基于支持聚焦状态的研究,阿尔法水平在0.7-2.0μV之间,β能级在0.0-0.7μV之间。如果你的数据超出这个比率,算法会声明你没有聚焦。

    *为获得最佳结果,请尝试在FFT图中将“平滑”设置为0.98。

    按键:当按键打开时,你可以执行任务,当你集中注意力时,你的向上箭头或空格键都会被按下。否则,它将被释放。

    W_uFocus文件夹:此文件夹包含Focus小部件基于的原始数据,以及有关Arduino输出的材料(包括示例和说明)。

    频带功率

    频带功率小部件显示了不同脑电波类别的相对电压,每种脑电波都代表一个频率的子集,它代表不同的活动状态。这个小部件是一个很好的“一目了然”查看你大脑的活动。

    ae683da7c7d950e442c13bb432635958.png

    波浪类型

    ed4c2300a277a577ae8275880ef78d8d.png 频率(Hz)描述 Gamma 32-100表示感知、学习和解决问题的任务以及警觉。当大脑多个部位有信息处理时,就会发生这种情况。 Beta13-32标志着正常的警觉意识和积极的思维。当你专注于工作、解决问题、学习新概念或积极交谈时,就会发生这种情况。 α8-13表示身心放松。当你闭上眼睛,当一个人在艺术上或在瑜伽的时候,它们就会发生。 θ4-8表示深度放松,创造力、洞察力、意识减退。它们是在做白日梦和冥想时学会的。 δ0.5-4表示睡眠,做梦。当我们享受恢复性、深度、无梦的睡眠时发生。            925849037d88ea15ccad01585a0d3f26.png

    肌电图

    f251b4001a28fd1466728b07c7f5e2fb.gif

    简而言之,我们试图将肌肉的当前弯曲度映射到所述肌肉的“舒适弯曲范围”,然后将其表示为0到1之间的小数。理论上如果放松,值将为0,如果您灵活,则值将转到1。

    电流EMG强度是一组在已知时间窗口内平均(或平滑)的原始电压值的集合。平均值越大,数据越平滑。我们建立了一个上限(圆形可视化器的外深蓝色圆)和一个较低的阈值(内部深蓝色圆),以不断更新“舒适的EMG范围”。然后我们将当前EMG(与通道颜色匹配的填充圆)值映射到上下阈值之间。 在每个通道的圆形可视化工具右侧的条形图中,更清晰地表示了这个伪模拟映射值。上限持续向下爬行,而较低的阈值不断向上爬,直到它们彼此之间距离最小ΔμV。这确保整个系统不会创建过大而不能影响肌肉弯曲的上/下弯曲范围。

    小部件的下拉列表旨在允许您调整此关系的各种参数,有4个下拉列表用于控制某些参数:

    1

    平滑

    这是窗口的大小。如果我们将该值设置为最小设置为0.01秒(即降低平滑值),则数据将非常紧张,但响应迅速。或者,如果我们增加平滑度并将窗口设置为2.0秒,输出将非常平滑,但响应性要低得多。

    2

    μV限制

    这是任何单个数据块中允许μV值的截止点。超过该数字的任何μV值将被切断并设置为该上限μV。这是为了防止数据中不稳定的闪电实质上扭曲平均值。有时,丢弃的包和快速的身体运动会产生与肌肉活动无关的大尖峰。这有助于解释这些问题。

    3

    蠕变

    该值表示上限μV向下爬行的速度,以及下限向上爬行的速度。请注意,通过调整此值,上阈值环和下阈值环将更快地彼此接近。我们通常建议这是缓慢的。如果这太快,而且我们在肌肉激活之间等待的时间太长,那么上阈值将逐渐接近下限,系统将变得敏感。

    4

    最小ΔμV

    该值设置上阈值和下限之间的最小电压范围。上限和下限不能接近此值。通过使该值变大,您将不得不更难弯曲,从0%到100%弯曲,在阈值逐渐接近彼此(也称为最小ΔμV)之后。

    网络

    网络小部件允许将数据流到其他应用程序。继续滚动以了解四种数据类型的解释:串行、UDP、OSC和LSL。要查看如何将其用于我们的不同应用程序,请查看我们的软件页面。 使用网络小部件,您可以发送时间序列、FFT、EMG、频带功率、加速度/辅助和脉冲数据。Accel/Aux选项允许您发送加速计、模拟读取或数字读取数据。确保打开相应的小部件,具体取决于您希望流的数据类型。所有可能输出的详细信息可在GUI网络指南中找到。 串行 能够流式传输一种数据类型。数据以连续的数据包逐位按顺序发送。Serial是在使用OpenBCI和Arduino时可以使用的主要网络协议。

    波特率

    以位/秒为单位的数据传输速率。这应该与为接收应用程序选择的波特率相对应。

    端口

    接收设备的端口。例如,对于Arduino,这可能是一个带有序列号的“USB调制解调器”。           

    9f6ee6f68d9c0977de098c765b6c6819.gif

    UDP协议

    用户数据报协议主要用于在internet上的应用程序之间建立低延迟和允许丢失的连接。UDP协议允许向三个不同的应用程序发送最多三个不同的数据集。

    LSL公司

    9473e16c445d802357843163ff448a96.png 实验室流媒体层是一个同步流数据的系统,用于实时分析或记录。LSL是将OpenBCI流发送到可以记录或操作数据的应用程序(如Matlab)的好方法。 FFT数据现在可以通过LSL发送,从guiv.4.1.5-beta.3开始。 对于某些数据类型,更改#Chan以匹配数据类型是有帮助的。示例:Focus是单个数字输出,所以只需将#Chan设置为1。下面是一个将3种数据类型流式传输到Python的屏幕截图:

    82cbff37cd368376a7572bdeae61a616.png

    您可以在这里找到示例Python脚本。注意:如果依赖项尚未安装,则需要执行pip install pylsl。

    31e2546f2d4cfcaa4458410373450f16.gif

    OSC公司

    开放式声音控制是一种协议,用于连接声音合成器、计算机和其他多媒体设备,如音乐表演或演出控制。OSC的优势包括互操作性、准确性、灵活性以及增强的组织和文档。OSC使用MaxMSP、PureData和Resolume。

    播放小部件

    此小部件仅在播放模式下出现。它允许你选择不同的回放,而不必“停止系统”。小部件的右上角有一个按钮,允许您选择任何OpenBCI播放文件(.txt或.csv)。选择其他类型的文件可能会导致错误。

    脉冲小工具

    此小工具将只在实时模式下为Cyton显示。它使用模拟读取模式从Cyton上标记为D11的管脚获取数据。使用这些数据,小部件将计算每分钟心跳(BPM)和间隔时间(IBI)。使用Networking小部件时,此数据类型将发送BPM、Raw Signal和IBI。

    49668dae16c9b184c7ebaad2a694fdeb.gif

    自定义控件行为 本教程将向您展示如何为OpenBCI GUI创建自定义小部件。只需几个简单的步骤,您就可以将您的小型应用程序添加到OpenBCI GUI的下拉菜单中,以便实时运行专门的应用程序。这些小部件可以直接访问OpenBCI GUI的主数据结构,因此您可以在GUI中对脑电波和其他生物数据进行实验。 有用的背景技能 基于Java编程或Java处理的知识 从处理IDE运行OpenBCI GUI的经验 使用visualstudio代码或处理进行开发人员设置 或者,可以使用Atom对处理包进行编辑

    1

    复制W_模板.pde文件重命名(&R)

    W_模板.pde文件被设计为作为创建小部件的简单起点。首先,复制这个文件并将其重命名为W_myNewWidget.pde,其中“myNewWidget”是与新widget的用途相关的内容!尝试遵守命名约定,并将W_放在前面,以确保您的项目目录中的所有小部件彼此相邻。您需要记住重命名该类,以确保它是唯一的,而不是与W相同的类_模板.pde. 文件的第一个未注释行应为:

    class W_myNewWidget extends Widget {

    2

    将新的小部件添加到widgetManager.pde文件

    在添加任何获取本地数据结构的花哨代码之前,请确保将新的小部件添加到widgetManager.pde文件。通过这样做,您可以确保新的小部件被添加到每个小部件的下拉菜单中。这是很有帮助的,因为现在你可以看到你正在做什么,当你继续开发你的小部件图形。 通过在此处添加,遵循全局实例化小部件的协议: // MAKE YOUR WIDGET GLOBALLY W_timeSeries w_timeSeries;W_fft w_fft;W_networking w_networking;W_BandPower w_bandPower;W_accelerometer w_accelerometer;W_ganglionImpedance w_ganglionImpedance;W_headPlot w_headPlot;W_template w_template1;W_emg w_emg;W_openBionics w_openbionics;W_Focus w_focus;W_PulseSensor w_pulsesensor;W_myNewWidget w_myNewWidget;

    然后,确保“设置”小部件,并通过模仿设置代码行将其添加到所有小部件的数组中:

    ...   w_networking = new W_networking(_this);   w_networking.setTitle("Networking");   addWidget(w_networking, w);   w_myNewWidget = new W_myNewWidget(_this);   w_myNewWidget.setTitle("My New Widget");   addWidget(w_myNewWidget, w);   w_bandPower = new W_BandPower(_this);   w_bandPower.setTitle("Band Power");   addWidget(w_bandPower, w);   ...

    3

    如果需要,添加下拉菜单来控制你的小部件

    注意:在编译GUI之前,需要重命名W底部的全局函数_myNewWidget.pde使它们与W底部的全局函数不同_模板.pde. 在运行GUI时,当小部件的nav中激活相应的下拉列表时,这些功能会自动激活。确保构造函数的addDropdown()函数中的字符串(例如:“Dropdown1”)与.pde文件底部相应全局函数的名称相同。所选菜单项的索引是传递到函数中的内容(即“int n”)。

    //These functions need to be global! These functions are activated when an item from the corresponding dropdown is selected

    void Dropdown1(int n){  

    println("Item " + (n+1) + " selected from Dropdown 1");  

    if(n==0){   

     //do this  

    } else if(n==1){    

    //do this instead  

    }  

    closeAllDropdowns(); // do this at the end of all widget-activated functions to ensure proper widget interactivity ... we want to make sure a click makes the menu close

    }

    void Dropdown2(int n){  

    println("Item " + (n+1) + " selected from Dropdown 2");  

    closeAllDropdowns(); 

    }

    void Dropdown3(int n){  

    println("Item " + (n+1) + " selected from Dropdown 3");  

    closeAllDropdowns(); 

    }

    运行GUI,确保您可以在所有widget左上角的widget下拉菜单中看到您的新widget。如果看不到,请确保正确地执行了上述步骤。

    4

    设计您的自定义小部件

    探索现有的小部件是如何访问GUI内部的数据结构的,看看您是否可以做出一些很酷的东西! 一些很酷的事情要知道:

    每个小部件都有x、y、w、h变量,分别对应于小部件的左边缘(水平像素位置)、小部件的上边缘(垂直像素位置)、像素宽度的#和像素高度的#。当调整屏幕大小或小部件在布局容器中循环时,这些变量会自动更新。在向小部件添加图形时,请根据这些变量执行所有操作,以确保响应能力。

    除了在widgetManager.pde文件,你所有的代码都可以存在于W_myNewWidget.pde文件(如果操作正确)。

    要了解如何访问全局数据结构,如FFT数据和时间序列数据,请查看其他小部件如何在其update()函数中访问数据

    我们向小部件添加下拉列表和单选按钮等功能的一种方法是ControlP5库。

    要了解有关小部件如何工作的更多信息,请查看小工具.pde文件。也就是说,我不建议改变任何东西!

    5

    添加任何下拉设置到会话设置.pde

    从guiv4开始,应用程序尝试自动保存和自动加载用户设置。否则,用户每次都需要重新配置GUI!因此,如果您在新的小部件中使用下拉列表,则需要在中包含这些设置软件设置.pde在save()和load()中。

    上面有一些细节会话设置.pde那应该是有帮助的。只需遵循已经存在的样式即可从JSON中保存和加载。浏览save()或load()中的代码,您将看到一些您最喜欢的小部件的设置。以这个为例!

    6

    初始测试

    调试如果在小部件中添加了println()verbosePrint(),则可以使用控制台日志功能来查看这些消息,或者只需在您喜欢的IDE中查看控制台。

    屏幕大小调整当用户更改GUI屏幕大小时,某些对象可能需要调整大小或重新定位。这就是widget类具有screenResized()方法的原因。在调整图形用户界面大小后,有什么不显示的?这是您需要添加代码的地方。通常,对象x、y、宽度和高度是在小部件实例化时声明的,在screenResized()中使用相对定位再次声明。

    设置要测试一切正常,您应该在Documents/OpenBCI_GUI/Settings/文件夹中的每个数据模式的设置JSON文件中看到数据。可以查看JSON文本。确认新的JSON对象和数据正在写入文件。最后,在配置小部件、保存和加载时确认设置工作正常。

    GUI崩溃使用新小部件使GUI崩溃的最常见方法之一是绘制空数据,或者与draw()相关的其他错误。另一个常见的崩溃是一个异常,它将打印到Atom、VSCode或处理IDE的控制台。

    7

    与全世界分享你的定制小工具

    如果您制作了一个您认为其他人可以从中受益的功能性小部件,请通过向OpenBCI_GUI repo提交一个拉取请求来与全世界共享它! 7e5350bc0e53479ac07147c6954872e9.gif

    “ 嘘!悄悄插播一条小广告 ”

    14608442f114993c15d5275d35f98ab8.gif

    65ad3ae34c94c0e3b1990e408c5ead12.png

    f4e163d964b1246ce4d3804b4a87071f.gif

    07e5d4ce8d91ec5123c97380ceb39276.png

    b6907a02e61d4d98dd5f5b1ae1493b02.png

    BCIduino 8通道脑电放大器具体参数如下: 输入阻抗:1TΩ     输入偏置电流: 300pA 输入参考噪声:1μVpp    采样速率: 250 Hz/500Hz 共模抑制比:-110dB     可调增益放大倍数: 1、2、4、6、8、12、2 分辨率:24 位 ADC,精度最高可达 0.1μV 功耗:正常工作时 39mW,待机时低至仅 10μW 采用可充电锂电池供电,进一步降低来自外部的干扰。 尺寸:50mm*50mm(实物测量,存在细微误差) 图1 BCIduino实物图 图2 BCIduino在普通嘈杂环境下、悬空状态的数据波形,可以观测到并无其他干扰出现 图3 OpenBCI在普通嘈杂环境下、悬空状态的数据波形(测量环境、测量时间、软件滤波器设置参数与图2BCIduino相同)

    6e0c6517f7f1c86a98771b3708083e21.png

    4bf5201c0f6f201814002afe17089b4b.png

    240459a76c0ad89fadd281c23ccbee50.gif

    往期精彩

    ecfb9296e03473bcc19e37533f60310e.gif

    山西航弈生物脑电采集信号放大器拿下欧盟CE认证、通过国家标准检测

    基于独立SSVEP–BCI的机器人轮椅控制系统

    山西航弈生物科技责任有限公司第二届首都高校创新创业大赛获得优秀奖

    ce37385d9e9a64cf01286712817e3d93.png

    客官请留步

    6cf6775856a645be250c6a06db855856.png

    0df859917b48c41ea0296b75d57ba543.gif

    8ce776a7ae61dd9695c4b34292d3e7b9.png

    关注我们

    了解更多信息

    本篇由BCIduino脑机接口开源社区整理或撰写。BCIduino脑机接口社区由来自北京航空航天大学、康奈尔大学、北京大学、首都医科大学等硕博发起成立,欢迎扫码加入社群,备注"BCI",也欢迎采购BCIduino脑电模块(某宝搜索即可)

    展开全文
  • 缘起MATLAB 绘制的图片的默认样式是非常丑的,如果你敢用,肯定是要被老板骂的。默认的绘图大致有这么几个缺点:图幅过大,字体太小,配色难看。当然,我们可以手动调整,但是肯定特别麻烦,需要耐心,恰好我没有...

    4f83e6b2bcfe444bb542d8792f33a49a.png

    缘起

    MATLAB 绘制的图片的默认样式是非常丑的,如果你敢用,肯定是要被老板骂的。默认的绘图大致有这么几个缺点:图幅过大,字体太小,配色难看。当然,我们可以手动调整,但是肯定特别麻烦,需要耐心,恰好我没有耐心,所以我推荐用面向对象的代码来调整图片样式,当然你得准备比较新版本的 MATLAB。

    我接下来讲的内容并不是一个标准,有很多是个人习惯,你们要有那种不求甚解的精神,希望这文章能有些用处。祝大家都顺利发 SCI!

    89a936f685180a4291684ae45c53e82c.png
    MATLAB 默认样式

    思考

    新版本的 MATLAB 中,所有的绘图元素都是一个图形对象。比如整个绘图区域是 figure 对象,坐标轴框起来的绘图区域是 axes 对象,各数据线条是 line 对象。想要了解更多关于图形对象的信息,参阅 MATLAB 官方文档。对图片的样式进行调整,实际上就是对各级图形对象的属性进行调整。

    对图片的调整主要涉及:图片的大小,坐标轴大小,字体及其大小,线条粗细及其颜色,标记大小、类型及其颜色等等。这些都可以通过修改各图形对象的属性来完成,当然,你必须熟悉这些对象的层级关系和对象包括的属性。可以先使用属性查看器查看并修改各图形对象的属性,看看效果,然后将属性的调整操作写入代码。

    2c7476c7ba6a42ea6270d58fefc0b507.png
    MATLAB 图片属性检查器

    图片的大小有一个大致的原则,单张图片的大小不能约等于出版物的整栏宽度,也最好不要远小于出版物的半栏宽度,过大或过小看起来都很别扭。以 A4 纸出版为例,纸张大小 21 cm * 29.7 cm,标准页边距为左右 3.17 cm,上下 2.54 cm。所以文本宽度为 14.66 cm,通常并列摆放两张图片并且最好不随意缩放图片。这样,单张图片的宽度为 7 cm 左右是比较合适的。我个人推荐图片的大小为 7 cm * 5.25 cm,坐标轴大小为 5.25 cm * 4 cm。

    字体看个人喜好了,衬线字体我推荐 Times New Roman,无衬线字体推荐 Arial,大小应该与正文大小一致,10 pt 最佳。中文正文一般为“五号字体”,即 10.5 pt,所以图形对象上 10 pt 的字体大小也很合适。

    坐标轴的线框不易过粗,1 pt 就足够了。

    动手

    因为对图片对象进行样式调整的代码区块是可能被重复使用的,比如说一个脚本里面绘制了多张图片,每一张图片都需要进行相近的样式调整。所以我们将调整图片样式的代码整理成一个函数,

    首先生成 figure,axes,legend 等对象,然后调整其样式。

    % 准备数据
    

    运行的结果如图所示,是不是比默认风格强了一些!

    2cf2eeec4b91e5f28165a24bed62ab0a.png

    继续动手

    同理,其实绘制数据图的过程,是一个生成 line 对象或其他图形对象的过程,这个过程也是高度可重复的。比如,在一张图片里绘制五条线条。所以我么同样把生成 figure,axes,legend 和 line 等对象的过程写成一个函数,

    线条粗细推荐 1 pt,标记的大小推荐 4 或 5 pt。线条和标记的配色根据个人喜好来设置,本例子仅供参考,

    function

    绘制的结果大致如图所示,比默认风格又强了一些。

    6752ef71e5cb0ff43924e3db2e76fb58.png

    最终,我们绘制数据图的过程被抽象为两个步骤,第一步生成 figure,axes,legend 和 line 等对象,第二部调整它们的样式。

    [

    最终的出版效果如下:

    64f5cf67ed03e3dcb6d0f4a801cfe330.png
    出版级别的图片示例

    上面的图片已经比较标准了,非常学术风,老板应该不会再吐槽我了。

    一点细节

    将图片放入幻灯片或者文稿中时,一般可以直接复制图窗,复制的结果是增强型图元文件,虽然是矢量图但却有锯齿,不过还是能满足大部分场景的需求。

    973e2d8cf525a6b1179abf89bb156a8c.png

    但我这里推荐另外一种方法,打印图片到 svg 矢量文件。svg 图片清晰无锯齿,用浏览器就能打开查看。PPT,word 都支持 svg 格式的文件,应该不用担心兼容性问题。

    print

    另外,有时候我们绘制多副图,它们的差别仅仅是坐标轴的区间不一样。难道我们要把绘制第一幅图的操作重复一遍,然后调整坐标轴吗?

    09a96c4e046f1a06d591a8fe3702b28b.png

    不!推荐直接复制这个原来坐标轴上的所有图形对象到新的 figure 对象上。

    fig 

    好了,本篇内容就这样。只教大纲,不讲细节。

    附录

    下文是一些我使用 MATLAB 绘制的,效果还不错的数据图。

    6521c3620ec2f07cca9e9abf6c1c4784.png

    3884090c4c9f6a8304f938d6148a96ba.png
    展开全文
  • 第一步,在.fig文件中,打开各个面板的属性检查器(快速打开方法是双击你要调整的面板),在最下面有一个属性'Visible',我们把它改成'off';这样我们运行进入界面的时候,这个面板是默认暂时不可见的。 第二步,在...

    cd3cabcc1b71a8bf5befc5e96efb5d10.png

    在完成了GUIDE中的控件摆放工作并保存后,我们得到了一个.m文件和一个.fig文件

    下一步就是填写在.m文件中的回调函数了,打开这个自动生成的.m文件,眼前是一片绿蓝白相间的代码:

    5bbe07c575d78d45f5641a4d4ef97cd3.png
    大概这个样子

    你放的控件越多、要实现的功能越复杂,那么你需要编写的函数就越多。

    不过,就像经典问题“把大象装进冰箱需要几步”一样,将庞然大物拆解成几部分开来再看似乎也就没有那么可怖了。下面我将分多个部分大致讲清楚需要写的回调函数。

    (还记得你给每个控件写的标签(Tag)吗?我们在这里要借助它识别各个函数是为哪个控件服务的

    同样先从简单的开始

    一、面板(panel)与单选按钮(Radiobutton)的交互

    (这部分的作用是提高GUI美观度和用户体验,并非必要功能

    以我做的为例,我共用了四个面板,其中一个是一直显示的,另三个的显示状态则和三个按钮的选中状态挂钩:

    de502767fc92f5f1c083765f8e87ecb3.png
    三个单选按钮和三个面板的爱恨情仇

    在写回调之前,先在GUIDE中的对象浏览器中检查一下控件有没有放好在面板上(对象浏览器在视图菜单中可以找到,也可以点击菜单下面那一排图标中从右往左数的第二个):

    35b72789ba4950ca79d6ae6aa0dd6909.png
    我的对象浏览器里是这样的

    (这也是一个好工具,可以让你时刻掌握各个控件的'Style'、'Tag'和'String'

    确认完成后,由于三个部分做起来是一样的,所以以按钮“音量调节”为例:

    • 第一步,在.fig文件中,打开各个面板的属性检查器(快速打开方法是双击你要调整的面板),在最下面有一个属性'Visible',我们把它改成'off';这样我们运行进入界面的时候,这个面板是默认暂时不可见的。
    • 第二步,在.m文件中,用按钮的'Tag'找到这个单选按钮的回调函数(我的'Tag'是'VolumeRadioButton',然后输入如下代码:
    function
    • 第三步,保存后尝试运行,看是否达到了预期效果

    这是一个相对简单的部分,三个单选按钮与面板的函数可以很快完成

    二、面板”歌曲列表“上的两个按钮(Pushbutton)和列表框(Listbox)

    现在回想我们在第一篇文章中说到的,读取歌曲时要输入的重要参数是什么?

    文件路径。

    那怎么让用户告诉我们歌曲文件的路径呢?总不能让用户一个字一个字地敲吧,这样实在太不友好了

    这里再引入一个关键函数,我们将使用到的形态为:

    [

    d795ee1e5c4f66254457360274d9fe61.png
    这是这行代码的作用

    之后以按钮“添加”为例,先说具体思路:

    (如果不想太复杂,推荐将'MultiSelect','on'(多选模式)这一部分去掉,去掉后拼接操作会简单许多

    1. 用uigetfile获取上面所说的三个参数
    2. 先用if结构检验index是否为1:为1则说明是MP3文件,进入后续步骤;为其他值则说明不一定是MP3文件,那么不进入后续步骤(如果你想增强用户体验还可以用msgbox输出一个提示用户的文本框
    3. 进行分类讨论(此处想象你在做数学大题的样子
    4. 当前listbox是否为空?为空则记录原音乐数为0,否则获取当前音乐数量
    5. 是否在uigetfile中点选了多个MP3文件?是则获取点选文件数量,否则记录添加音乐数量为1
    6. 将歌曲名的filename利用上面的音乐数量信息各行排序编号后,与原有listbox里的string拼接后更新listbox的string
    7. 这个时候listbox内储存并显示了了歌曲文件名,但audioplayer的输入参数是全路径!!我们还需要储存文件路径(这里我使用了‘UserData’传递数据;数据传输有很多方法,基于不同情形有不同的合适方法,昨天也有人在评论区问了我相关的问题,关于数据传递方法之后的文章中再解释
    8. 一样的,将filepath处理后与原来listbox中的'userdata'拼接后更新listbox的'userdata'

    思路就是这样,但代码实现中还有一个关于数据类型转换的问题:

    47f27b457adae6dfbdd81b560f8ca06c.png
    多选模式下pathname和filename的数据类型是不同的

    下面贴上这个控件的代码,不想看的可以复制粘贴,也可以实现功能;由于代码中还有一些由于篇幅受限而没有讲到的细节,如果弄不清楚也可以问我:

    function AddPushbutton_Callback(~, ~, handles)
    [FileName, PathName,index] = uigetfile('*.mp3','添加mp3音乐','MultiSelect','on');
    if index == 1
        if iscell(FileName)
            nMusicAdd = size(FileName,2);
        else
            nMusicAdd = 1;
        end
        
        NameStr = get(handles.Listbox,'string');
        
        if ~isempty(NameStr)
            nMusic = size(NameStr,1);
        else
            nMusic = 0;
        end
        
        if ~nMusic
            PathList = repmat({PathName},nMusicAdd,1);
        else
            PathList = get(handles.Listbox,'UserData');
            if nMusicAdd > 1
                PathList = [PathList; repmat({PathName},nMusicAdd,1)];
            else
                PathList = [PathList;{PathName}];
            end
        end
        set(handles.Listbox,'UserData',PathList);
        
        strPrefix = cellstr(strcat(num2str((nMusic + 1 : nMusic + nMusicAdd)', '%02d'), '.'));
        if iscell(FileName)
            strNameAdd = strcat(strPrefix, FileName');
        else
            strNameAdd = strcat(strPrefix, FileName);
        end
        set(handles.Listbox, 'string', [NameStr; strNameAdd]);
    end

    “删除”按键的原理是相同的,就也不赘述了

    这篇好像写得太长了...所以我决定将callback篇分鸽放送

    参考:

    Open file selection dialog box​www.mathworks.com
    830a281efd992924739534638b3dcd9a.png
    展开全文
  • 对于大规模重复的运算,为了提高运算速度,可以将部分核心代码用C++来实现,用编译器编译成动态可执行文件(mex文件),在MATLAB中直接调用。个人亲历,有一段Monte-Carlo仿真的MATLAB代码,在Intel 8700K+32G的机器...
  • 一、修改坐标轴对象属性、 1、修改坐标轴对象属性、 2、xlim / ylim 函数修改坐标轴属性、 3、修改坐标轴文字大小、 4、修改坐标轴刻度 ( 连续刻度 )、 5、修改坐标轴刻度 ( 指定字符串刻度 )、 二、修改线对象属性...
  • 咕咕怪由于昨天有重要的事情所以咕了一天的文章 (感觉写得挺基础的,对各个部分有一定了解的童鞋可以直接跳过了解的部分用Matlab做一个app有几种办法呢?同样的,帮助文档告诉了我们答案:三种。英语好的童鞋看完这...
  • inpect() 函数打开一个图形界面来检查和编辑所有这些属性。 使用命令行调用调用此函数,例如:inspect(get_param(gcb,'Object')); 此功能将菜单项添加到右键单击菜单,以使该图形界面更易于发现。
  • 属性编辑 - 字体设置

    千次阅读 2020-04-09 08:42:45
    字体设置字体属性填充一点小问题 QQ 282397369 字体属性 看教程,初步感觉,网页字体要比VCL的字体来得简单,居然没有粗体、斜体。 只有绘制、填充,可设置字体名称、大小,以及对齐、基线与方向。 我一定是看了个假...
  • MATLAB绘图属性操作

    2021-04-18 14:46:00
    前言 MATLAB的绘图功能十分强大,可以绘制各种各样的图形,数据可视化十分强大,但有时,采用默认的绘图属性,图形的形式符合我们的要求,学会使用图形句柄,并利用句柄修改属性是十分重要的。1.句柄之间的关系在...
  • 1、对横坐标x的修改 如图所示横坐标数值太大,很占...可以直接在属性检查器中修改,对应XTick: 修改Xticklabel(注意不要修改XTICK,不然会定位到真正的横坐标700的地方): 同时修改X轴标签: 最后效果: ...
  • 详细介绍了matlab设置图中字体和线条大小等功能的方法
  • MATLAB 2021 Figure图上加标题、标签 MATLAB2021和先前版本的Figure界面有所不同,Figure中加标题、标签的方法步骤...2. 打开“属性检查器” 3. 在属性检查器内打开“标签”块 4. 在“标签”块中修改标题标签即可 ...
  • 法1:在MATLAB命令行窗口输入guide命令。 法2:在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按钮,再选择“APP”下的"GUIDE"命令。 (2)图形用户界面设计模板 ①空模板 ②带控件对象的图形用户...
  • 输入序列的长度......15 生成多项式示例 [1 0 0 1...1] 输入多项式:[1 1 0 0 1] 初始状态示例 [1 0 0 1...0] 进入初始状态:[1 0 0 0]
  • 打开属性检查器出现了如下错误! 错误使用 event.listener 参数 'source' 必须为句柄元胞数组。 出错 matlab.graphics.internal.propertyinspector.PropertyInspectorManager/inspectObj (第 585 行) this....
  • matlab设置参数

    2021-04-21 18:01:38
    matlab精度设置_计算机软件及应用_IT/计算机_专业资料。format 这个函数不是用于控制运算精度的,它只能控制结果显示类型。运 算的时候还是用 matlab 自己的精度,具体......参数:filename 是文件名,fmt 是图像文件的...
  • 字符对象的常用属性如下:Color属性:字符的颜色。该属性属性值是一个1×3颜色向量。FontAngle属性:字体倾斜形式。如正常’normal’和斜体’italic’等。FontName属性:字体的名称。如’TimesNewRoman’与’Courier...
  • matlab运行参数

    2021-05-03 11:05:01
    matlab [-? ^| -h ^| -help][-c licensefile][-nosplash][-nodesktop ^| -nojvm][-memmgr manager ^| -check_malloc][-r MATLAB_command][-logfile log] [-timing][-noFigureWindows][-automation] [-regserver] [-u...
  • MATLAB GUI程序设计中使文本框接收多行输入的方法 对于文本框来说 Max属性于Min属性数值之差小于等于1时,仅接收单行输入 大于1时,接受多行输入 对于多行情况,set/get到的String应为cell 本系列文章允许转载,转载请...
  • MATLAB面向对象编程属性初始化方法

    千次阅读 2017-05-19 00:38:46
    MATLAB面向对象编程的类构建中,属性的初始化一般有两种方法:一种是使用构造函数,另一种则是在定义属性的时候初始化。  使用构造函数的例子: classdef DemoClass  properties  age;  hight;  end ...
  • 使用Matlab有好几年了,...在程序中可以设置‘FontSize’ 属性值,来改变输出的图形标注的字体大小。若要改变命令窗口或...论文中对图形中标注的文字都有规定,Matlab中默认的文字大小可能不满足要求。在找到这个方...
  • 我试图检测图像中的弯曲输送... 曲线大致是在下图中手动绘制的(红色): 我在matlab中没有找到用于Hough变换的代码或函数来检测这样的平滑曲线(例如,二次多项式:y = a * x ^ 2).任何其他解决方案也欢迎. 这是原始图片:
  • 因此,我发现了一个更大的问题--Matlab似乎根本不尊重我的字体设置 .我当然试过了set(gcf, 'FontName', 'Ubuntu')set(gca, 'FontName', 'Ubuntu')还有像set(findall(gca, 'type', 'text'), 'FontName', 'Ubuntu')和...
  • 在GUI上放上弹出式菜单,然后双击》属性检查器》string》更改string为想要的菜单值。例如 效果: 属性检查器里面的tag属性根据你的想法改,这里就以popupmenu1为属性名。 在程序中使用弹出式菜单的值,使用...
  • 最近用matlab绘制折线图,有一些常用的指令记录下来。首先是加速比的程序代码,具体功能记录在注释里面。x1 = [8 16 32 64 128 256];x2 = [32 64 128 256];y = [1 2 4 8 16 32];y04 = [1 1.7872 3.3846 6.6000 11....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,729
精华内容 1,891
关键字:

matlab属性检查器

matlab 订阅
友情链接: 95174285.rar