Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GNU倍频程Matlab:绘图刻度标记_Matlab_Plot_Octave_Labeling_Xticks - Fatal编程技术网

GNU倍频程Matlab:绘图刻度标记

GNU倍频程Matlab:绘图刻度标记,matlab,plot,octave,labeling,xticks,Matlab,Plot,Octave,Labeling,Xticks,我正在做一个频率图,我想在蜱虫标签上得到一些帮助。 以下是我所拥有的: 如何使1000及以上的所有数字显示为1K、2K、5K等 如何使5010020500,1K,2K,5K,10K上的线条看起来更粗/更黑 在MATLAB中 *不幸的是,我还没有找到如何加粗的具体行 添加以下代码可以将记号转换为第1部分中建议的新名称/格式。对于第2部分,我现在能找到的最好的方法是加粗特定的数字,不幸的是,不是特定的记号/行。此处\bf指示哪些标签要加粗。所有名称都将对应于轴向量比例最初设置的位置。下面代码中的最

我正在做一个频率图,我想在蜱虫标签上得到一些帮助。 以下是我所拥有的:

  • 如何使1000及以上的所有数字显示为1K、2K、5K等
  • 如何使5010020500,1K,2K,5K,10K上的线条看起来更粗/更黑
  • 在MATLAB中 *不幸的是,我还没有找到如何加粗的具体行

    添加以下代码可以将记号转换为第1部分中建议的新名称/格式。对于第2部分,我现在能找到的最好的方法是加粗特定的数字,不幸的是,不是特定的记号/行。此处
    \bf
    指示哪些标签要加粗。所有名称都将对应于轴向量
    比例
    最初设置的位置。下面代码中的最后一行表示当前轴的替换,
    gca


    要调整更多栅格和轴特性,请执行以下操作: 使用MATLAB R2019b运行

    我这样做:

    semilogx([200,1000,5000], [0,6,0]);
    xlim([20 20000]);
    sc = [20:5:35,40:10:100,125:25:175];
    scale = [sc,sc*10,sc*100, 20000];
    xticks(scale);
    xticklabels(scale);
    set(gca,'XMinorTick','Off')
    grid on;
    set(gca,'gridlinestyle',':');
    set(gca,'gridalpha',0.6);
    set (gca, "xminorgrid", "off");
    xg = [50,100,200,500,1000,2000,5000,10000]; #highlight grids
    xx = reshape([xg;xg;NaN(1,length(xg))],1,length(xg)*3);
    yy = repmat([ylim() NaN],1,length(xg));
    line(xx,yy,'Color',[0.65,0.65,0.65]);
    xlabel('frequency (Hz)');
    ylabel('dB');
    X_Scale_Names = {'\fontsize{11}\bf20'; '25'; '30';'35';'40'; '\fontsize{11}\bf50'; '60';
    '70';'80';'90';'\fontsize{11}\bf100';'125';'150';'175';'\fontsize{11}\bf200';'250';'300';'350';'400';
    '\fontsize{11}\bf500';'600';'700';'800';'900';'\fontsize{11}\bf1K';'1.25K';'1.5K';'1.75K';
    '\fontsize{11}\bf2K';'2.5K';'3K';'3.5K';'4K';'\fontsize{11}\bf5K';'6K';'7K';'8K';'9K';'\fontsize{11}\bf10K';'12.5K';'15K';
    '17.5K';'\fontsize{11}\bf20K'};
    set(gca,'xtick',scale,'xticklabel',X_Scale_Names);
    
    但我不认为这是最好/最快/最简单的方法…

    倍频程方法(可能也适用于matlab) 老实说,我不会依靠乳胶的诡计来做到这一点。
    这是我通常做这类事情的方式。
    实际上,由于axis labels对象被视为单个对象,并且您无法将其拆分为多个部分,因此关键在于覆盖一个不可见的、裸露的最小axis对象,该对象仅定义您想要的标签,并根据需要处理这些标签(例如,调整其fontweight、fontsize、xcolor等)


    这种“透明轴对象层”技术通常非常有用,它在设计复杂图形时具有很大的灵活性

    谢谢你的努力!:)这有帮助!我想让刻度线和网格线更黑。。我想知道是否有什么方法可以使整个过程自动化,而不必键入所有标签。。如果标度数>=1000,可以将其除以1000,然后将其转换为字符串,并在其后添加一个K?但我不知道这是否可以做到,以及如何做到……看起来你从另一个用户那里得到了一个惊人的答案,这个用户使用了一种稍微自动化的方法。对于更粗体的特定行/记号,我仍然不确定如何做。通过使用
    set(gca,'linewidth',1)设置当前轴的“线宽”,使所有标记更加粗体将完成此操作。我在回答中添加了一个代码片段来更改网格可见性。谢谢Taso!:)非常优雅的解决方案!你知道有什么方法可以使那些刻度线的网格线变黑吗?你能看一下我的下一个答案,看看我是如何做到的,并告诉我你认为这是一个好方法吗?谢谢(关于网格线的部分)@lucullus与上面的方法完全相同:由于这些网格线只会出现在“特殊”记号所在的位置,您只需将该axes层的“所有”网格线样式设置为黑色即可。事实上,我不得不“欺骗”让它们看起来和另一层一样。我将更新我的示例以向您展示差异。(我现在更新了答案)
    
    semilogx([200,1000,5000],[0,6,0]);
    sc = [20:10:100,125:25:175];
    scale = [sc,sc*10,sc*100, 20000];
    
    Current_Axis = gca;
    Current_Axis.XMinorTick = 'off';
    xlabel('frequency (Hz)'); ylabel('dB');
    xlim([20 20000]);
    grid on;
    
    X_Scale_Names = {'\bf20'; '30'; '40'; '\bf50'; '60';
    '70';'80';'90';'\bf100';'125';'150';'175';'\bf200';'300';'400';
    '500';'600';'700';'800';'900';'\bf1K';'1.25K';'1.5K';'1.75K';
    '\bf2K';'3K';'4K';'\bf5K';'6K';'7K';'8K';'9K';'\bf10K';'12.5K';'15K';
    '17.5K';'20K'};
    
    Current_Axis = gca;
    set(Current_Axis,'xtick',scale,'xticklabel',X_Scale_Names);
    Current_Axis.LineWidth = 1;
    Current_Axis.GridColor = 'k';
    Current_Axis.GridAlpha = 0.5;
    
    semilogx([200,1000,5000], [0,6,0]);
    xlim([20 20000]);
    sc = [20:5:35,40:10:100,125:25:175];
    scale = [sc,sc*10,sc*100, 20000];
    xticks(scale);
    xticklabels(scale);
    set(gca,'XMinorTick','Off')
    grid on;
    set(gca,'gridlinestyle',':');
    set(gca,'gridalpha',0.6);
    set (gca, "xminorgrid", "off");
    xg = [50,100,200,500,1000,2000,5000,10000]; #highlight grids
    xx = reshape([xg;xg;NaN(1,length(xg))],1,length(xg)*3);
    yy = repmat([ylim() NaN],1,length(xg));
    line(xx,yy,'Color',[0.65,0.65,0.65]);
    xlabel('frequency (Hz)');
    ylabel('dB');
    X_Scale_Names = {'\fontsize{11}\bf20'; '25'; '30';'35';'40'; '\fontsize{11}\bf50'; '60';
    '70';'80';'90';'\fontsize{11}\bf100';'125';'150';'175';'\fontsize{11}\bf200';'250';'300';'350';'400';
    '\fontsize{11}\bf500';'600';'700';'800';'900';'\fontsize{11}\bf1K';'1.25K';'1.5K';'1.75K';
    '\fontsize{11}\bf2K';'2.5K';'3K';'3.5K';'4K';'\fontsize{11}\bf5K';'6K';'7K';'8K';'9K';'\fontsize{11}\bf10K';'12.5K';'15K';
    '17.5K';'\fontsize{11}\bf20K'};
    set(gca,'xtick',scale,'xticklabel',X_Scale_Names);
    
    H = semilogx([200,1000,5000], [0,6,0]);
    A = gca();
    B = axes();
    
    subscale = [20:10:100,125:25:175];
    scale    = [subscale,subscale * 10,subscale * 100, 20000];
    
    ScaleTextLabels = {};
    for i = 1 : length( scale )
        if scale(i) >= 1000, ScaleTextLabels{i} = sprintf("%dk", scale(i) / 1000 );
        else,                ScaleTextLabels{i} = num2str( scale(i) );
        end
    end
    
    SpecialTickLabels   = { '50', '100', '200', '500', '1k', '2k', '5k', '10k'};
    ScaleIndices        = 1 : length( ScaleTextLabels );
    SpecialIndices      = nthargout( 2, @ismember, SpecialTickLabels, ScaleTextLabels );
    NormalIndices       = setdiff( ScaleIndices, SpecialIndices );
    
    set( A, 'xgrid', 'on', 'xlabel', 'frequency (Hz)', 'xlim', [20 20000]      , 'xminorgrid', 'off', 'xminortick', 'off', 'xticklabel', ScaleTextLabels(NormalIndices),  'xtick', scale(NormalIndices) , 'ylabel', 'dB', 'gridlinestyle', ':', 'gridcolor', 'k', 'gridalpha', 0.5 );
    set( B, 'xgrid', 'on', 'xlabel', ''              , 'xlim', get( A, 'xlim' ), 'xminorgrid', 'off', 'xminortick', 'off', 'xticklabel', ScaleTextLabels(SpecialIndices), 'xtick', scale(SpecialIndices), 'ylabel', ''  , 'color', 'none', 'fontsize', 12, 'fontweight', 'bold', 'position', get( A, 'position'), 'xcolor', [0,0,0], 'xscale', 'log', 'ylim', get( A, 'ylim'), 'ytick', [], 'gridlinestyle', '--', 'gridcolor', 'k', 'gridalpha', 0.8 );