Octave 如何使用从矩阵派生的标签标记图形系列?

Octave 如何使用从矩阵派生的标签标记图形系列?,octave,Octave,我有很多系列要策划。我想使用矩阵生成系列标签或图例 例如,如果K=[2 4 6],其中K的每个元素对应一个系列,我希望系列标签类似于“K=2”、“K=4”和“K=6” 这是我的密码: function Y=Q(X) Y=0.5.*erfc(X./sqrt(2)) endfunction EbNodB=0:2:20 EbNo=10.^(EbNodB/10) K=[2 4 6] M=2.^K KM=3*K./(M-1) KME=KM'*EbNo X=sqrt(KME) Pb=((4./K)

我有很多系列要策划。我想使用矩阵生成系列标签或图例

例如,如果
K=[2 4 6]
,其中
K
的每个元素对应一个系列,我希望系列标签类似于
“K=2”、“K=4”和“K=6”

这是我的密码:

function Y=Q(X)
    Y=0.5.*erfc(X./sqrt(2))
endfunction

EbNodB=0:2:20
EbNo=10.^(EbNodB/10)
K=[2 4 6]
M=2.^K
KM=3*K./(M-1)
KME=KM'*EbNo
X=sqrt(KME)
Pb=((4./K).*(1-1./sqrt(M)))'.*Q(X)
semilogy(EbNodB,Pb)
title("M-QAM BER")
grid on
grid minor on
#legend(sprintf("K=%d,",K))
这很接近-只是缺少每个图例前面的
“K=“

legend(num2str(K'))

您可以获取sprintf返回的字符串,并使用逗号作为分隔符进行字符串拆分

legend(strsplit(sprintf("K=%d,",K),","))
唯一的麻烦是
警告:图例:忽略额外的标签
,因为在最后一个逗号后有一个空字符串,但这可以通过不传递最后一个值来解决

legend(strsplit(sprintf("K=%d,",K),",")(1:end-1))

助教。工作正常,但我觉得倍频程也应该有矩阵字符串操作,以避免这种手动处理。