名字外轮廓水平的情节

3视图(30天)
马文格哈特
马文格哈特 2021年11月16日
评论道: 明星黾 2021年11月22日
亲爱的社区,
我希望这不是一个复制,我现在做研究了几周的时间,没发现一个解决方案:
有办法把文本外轮廓线的轴吗?见下图:
Backround是,我有一个地图效率与速度(x),扭矩(y)和效率(z)和想的地方权力等值线在contourf情节,把外面的等值线的值右边轴。
提前谢谢,
马文
1评论
dpb
dpb 2021年11月16日
通常情况下,如果你想让某人试图探索修改你的阴谋,把数据和代码让他们产生的起点……不可能有人会花时间去尝试从头重新创建的东西……

登录置评。

接受的答案

明星黾
明星黾 2021年11月16日
我花了比预期更长的时间得到这个工作。
注意: 只有 适用于轮廓,相交 y 设在在右边。策划 山峰 完全混淆了它,所以它给了错误的结果,但是它不会抛出任何错误。
x = 0:0.01:1;
y =双曲正切(x) + 0.05;
z = x (:) * y;
(c、h) = contourf (x, y, z,“ShowText”,“关闭”);
持有
级= h.LevelList;
idx = 1(大小(级));
xlv = xlim;
k1 = 1:元素个数(级)
级(k1);
lc =找到((c(: 1) = =级(k1)) & (mod (c (2:), 1) = = 0));
seglen = c (lc);
seglenix = seglen > 1;
如果任何(seglenix)
k2 = 1:元素个数(seglen (seglenix))
lciv = lc (k2) + (1: seglen (k2));%的水平轮廓指数向量
lciv lcvm = [c (1);c (2, lciv)];%的水平轮廓矩阵
% lcvc {k1, k2} = [c (1, lciv);c (2, lciv)];%水平轮廓单元阵列
[maxx、idxx] = max (lcvm (1:));
%的阴谋(lcvm (1、idxx) lcvm (2, idxx),“p”)
ylbl (:, k1) =(级(k1);idxx lcvm(1日);idxx lcvm (2)];% Y-Label矩阵
结束
结束
%流(' \ n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n”)
结束
% display_ylabel_matrix = ylbl
持有
文本((大小(ylbl(1,:))) *马克斯(xlim) ylbl(3:),组成(' % 0.2 f 'ylbl (:)),“水平的”,“左”,“绿色”,“中间”)
我测试它的功能,它需要满足标准,而且它似乎相当强劲。
3评论
明星黾
明星黾 2021年11月22日
像往常一样,这是我的荣幸!

登录置评。

更多的答案(2)

凯利卡尼
凯利卡尼 2021年11月16日
使用内置的contour-related函数…不,不是真的。轮廓标签Matlab图形的最小可定制的部分之一。为了做到这一点,我建议手动计算预计每个轮廓相交的右边你的情节,然后添加文本对象。
3评论
马文格哈特
马文格哈特 2021年11月22日
谢谢!

登录置评。


亚当Danz
亚当Danz 2021年11月16日
编辑:亚当Danz 2021年11月16日
下面的演示
  1. 产生一个contourf情节
  2. 提取等值线的坐标
  3. 决定与正确的线相交轴边缘
  4. 块文本标签在十字路口(如果有的话)
第二步是通过使用 getContourLineCoordinates 从文件交换。
请注意,这适用于所有轮廓我测试,甚至包括那些不相交的轴(包括他们的标记不会)。
%绘制contourf
x = 0: .1:1;
y = x;
z = x (:)。* y (:) ';
甘氨胆酸ax = ();
厘米= contourf (ax, x, y, z);
%得到轮廓线坐标
contourTable = getContourLineCoordinates(厘米);
%得到指数线相交轴的右边缘
%轴(ax,“紧”)%
intersectsWithY = contourTable。X = = ax.XLim (2);
%去除重复值
edgeCoordinates = [contourTable.X (intersectsWithY) contourTable.Y (intersectsWithY) contourTable.Level (intersectsWithY)];
edgeCoordUnq =独特(edgeCoordinates,“行”);
%的外边缘上添加文本指示水平值正确的轴
(ax,“上”)
xlim (ax, xlim (ax))
ylim (ax, ylim (ax))
文本(edgeCoordUnq (: 1), edgeCoordUnq(:, 2),组成(“% .2g”edgeCoordUnq (: 3)),
“HorizontalAlignment”,“左”,“VerticalAlignment”,“中间”,
“字形大小”,8)
colorbar (ax)
比较标记轮廓的版本,

类别

找到更多的在轮廓图帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!