八度框图例的宽度不适合大写文本

Posted

技术标签:

【中文标题】八度框图例的宽度不适合大写文本【英文标题】:Octave box legend not proper width with upper case text 【发布时间】:2021-03-07 05:50:46 【问题描述】:

我正在从文件中读取数据并将文件名用作图例,但 Octave 无法正确呈现原始文件名(大写)。

这是我的 Octave 脚本(带有虚拟绘图数据)

files = dir('*.ASC');
fileName = "";

figure
title ("lower case");
xlabel ("xdata");
ylabel ("ydata");

for i = 1:length(files(:,1))
  fileName = files(i,1).name;

  x = i*2
  plot(x, x + 5*x^2, 'DisplayName', lower(fileName));
  hold on;

endfor

h = legend ("location", "northeastoutside");
legend (h, "location", "northeastoutside");
set (h, "interpreter", "tex");
hold off;
grid on;


figure
title ("UPPER CASE");
xlabel ("xdata");
ylabel ("ydata");
for i = 1:length(files(:,1))
  fileName = files(i,1).name;

  x = i*2
  plot(x, x + 5*x^2, 'DisplayName', toupper(fileName));
  hold on;

endfor

h = legend ("location", "northeastoutside");
legend (h, "location", "northeastoutside");
set (h, "interpreter", "tex");
hold off;
grid on;

【问题讨论】:

您可以使用getset查询/修改任何图形对象(包括图例框)的属性。 顺便说一句,我无法重现该问题。默认值在我的设置中运行良好。也许您有一个小型显示器,它限制了图形的可能大小。您可以尝试强制使用足够大的图形大小,以确保图例框中的名称有足够的空间等。 我还没有找到如何获取或设置图例的框宽度。我该怎么做? 盒子的宽度由它的'position'属性决定。例如。试试这个:LPos = get(h, 'position'); LPos += [-0.01, 0, 0.01, 0]; set(h, 'position', LPos); 将框向左移动 1%(图形宽度),同时将其宽度扩展相同的量。 谢谢,但这不会调整图例框的大小。我正在使用 Octave 5.2.0。 【参考方案1】:

在 Windows 10 上运行 Octave 6.2.0 64bit,我没有得到与你相同的结果。 从 cmets 看来,它特定于某些图形工具包。比较所有三个,我可以使用gnuplot 工具包验证您的结果。

我创建了一个文件夹,其中包含三个名为 filenamewithlargename1.ASC(以及 2 和 3)的 ASC 文件,并运行完全从您上面发布的内容复制的脚本。

graphics_toolkit('qt')

graphics_toolkit('fltk')

graphics_toolkit('gnuplot')

因此,您报告的问题似乎是 gnuplot 工具包特有的,并且在 Octave 6.2.0 中仍然存在。

这可以使用以下代码更简单地演示。我不太清楚标签框的宽度是如何确定的,不同的文本长度会不会重现问题:

graphics_toolkit('gnuplot')    

plot([1 2 3],[4 5 6], 'DisplayName','thisisaverylongname');

legend

figure

plot([1 2 3],[4 5 6], 'DisplayName','THISISAVERYLONGNAME');

legend

产生:

我没有在任何特定的标签错误报告中看到这一点,所以我在 Octave 错误跟踪器上以 bug #60433 提交了这个。

还值得注意的是,对于所有工具包,绘图命令会清除您首先尝试应用的 titlelabel 设置。这种行为在 Matlab 中是相同的,因此并不是真正的错误。建议等到绘图完成后再应用这些注释。

【讨论】:

我注意到您的绘图查看器与我的不同。在这张图片中显示imgur.com/a/mpdKkHS 这就是为什么我问你使用的是什么图形工具包。运行命令graphics_toolkit。它说什么? .我的是默认的 qt 工具包。其他选项可能是 gnuplot 或 fltk。您可以更改工具包以查看结果是否更改,例如 graphics_toolkit('fltk') 回到这一点,查看您发布的 imgur 图片,图形窗口右上角的图标表明您正在运行 gnuplot graphics_toolkit。我将通过比较来更新我的答案。

以上是关于八度框图例的宽度不适合大写文本的主要内容,如果未能解决你的问题,请参考以下文章

以八度为单位的默认图例字体大小

八度:使用 bar 和 histc

运行显示绘图的脚本时隐藏主八度音阶窗口

OctConv:八度卷积复现

五线谱高低八度标记 ( 高八度标记 | 标记范围的音符整体提升一个八度 | 低八度标记 | 标记范围的音符整体降低一个八度 )

八度有趣的错误 - 无法定义函数