八度框图例的宽度不适合大写文本
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;
【问题讨论】:
您可以使用get
和set
查询/修改任何图形对象(包括图例框)的属性。
顺便说一句,我无法重现该问题。默认值在我的设置中运行良好。也许您有一个小型显示器,它限制了图形的可能大小。您可以尝试强制使用足够大的图形大小,以确保图例框中的名称有足够的空间等。
我还没有找到如何获取或设置图例的框宽度。我该怎么做?
盒子的宽度由它的'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 提交了这个。
还值得注意的是,对于所有工具包,绘图命令会清除您首先尝试应用的 title
和 label
设置。这种行为在 Matlab 中是相同的,因此并不是真正的错误。建议等到绘图完成后再应用这些注释。
【讨论】:
我注意到您的绘图查看器与我的不同。在这张图片中显示imgur.com/a/mpdKkHS 这就是为什么我问你使用的是什么图形工具包。运行命令graphics_toolkit
。它说什么? .我的是默认的 qt 工具包。其他选项可能是 gnuplot 或 fltk。您可以更改工具包以查看结果是否更改,例如 graphics_toolkit('fltk')
回到这一点,查看您发布的 imgur 图片,图形窗口右上角的图标表明您正在运行 gnuplot graphics_toolkit。我将通过比较来更新我的答案。以上是关于八度框图例的宽度不适合大写文本的主要内容,如果未能解决你的问题,请参考以下文章
五线谱高低八度标记 ( 高八度标记 | 标记范围的音符整体提升一个八度 | 低八度标记 | 标记范围的音符整体降低一个八度 )