Mathematica中如何为不同Z0e的S11函数设置不同颜色并加图例?
解决Mathematica绘图同色无图例问题
直接修改代码,通过显式生成带标签的曲线列表,并添加图例选项即可解决。以下是两种可行的修改方案:
方案一:封装函数+批量生成带标签曲线
Z0eList = {120, 240}; Z0o = 60; ZS = 50; ZL = 100; theta[f_] := (Pi/2)*(f/0.92); (* 将S11计算封装为带Z0e参数的函数 *) S11[z0e_, f_] := Module[{Z11, Z22, Z12, Z21, ABCDpcl, Apcl, Bpcl, Cpcl, Dpcl}, Z11 = -I*(z0e + Z0o)*Cot[theta[f]]/2; Z22 = -I*(z0e + Z0o)*Cot[theta[f]]/2; Z12 = -I*(z0e - Z0o)*Csc[theta[f]]/2; Z21 = -I*(z0e - Z0o)*Csc[theta[f]]/2; ABCDpcl = {{Z11/Z21, (Z11*Z22 - Z12*Z21)/Z21}, {1/Z21, Z22/Z21}}; Apcl = ABCDpcl[[1, 1]]; Bpcl = ABCDpcl[[1, 2]]; Cpcl = ABCDpcl[[2, 1]]; Dpcl = ABCDpcl[[2, 2]]; (Apcl*ZL + Bpcl - Cpcl*ZS*ZL - Dpcl*ZS)/(Apcl*ZL + Bpcl + Cpcl*ZS*ZL + Dpcl*ZS) ]; (* 生成每条曲线的表达式与对应标签 *) curves = Table[ 20*Log[Abs[S11[z0e, f]]], {z0e, Z0eList}, PlotLabel -> "Z0e = " <> ToString[z0e] ]; (* 绘图并添加自定义位置的图例 *) Plot[curves, {f, 0, 4}, PlotRange -> {-50, 0}, Frame -> {{True, False}, {True, False}}, FrameLabel -> {{"S11 (dB)", None}, {"Frequency (GHz)", None}}, PlotLegends -> Placed[LineLegend[Z0eList, LegendLabel -> "Z0e Values"], {0.8, 0.2}] ]
方案二:简化写法+手动指定样式
Z0e = {120, 240}; Z0o = 60; ZS = 50; ZL = 100; theta = (Pi/2)*(f/0.92); (* 定义带Z0e参数的中间变量 *) Z11[z0e_] := -I*(z0e + Z0o)*Cot[theta]/2; Z22[z0e_] := -I*(z0e + Z0o)*Cot[theta]/2; Z12[z0e_] := -I*(z0e - Z0o)*Csc[theta]/2; Z21[z0e_] := -I*(z0e - Z0o)*Csc[theta]/2; S11[z0e_] := Module[{ABCDpcl, Apcl, Bpcl, Cpcl, Dpcl}, ABCDpcl = {{Z11[z0e]/Z21[z0e], (Z11[z0e]*Z22[z0e] - Z12[z0e]*Z21[z0e])/Z21[z0e]}, {1/Z21[z0e], Z22[z0e]/Z21[z0e]}}; Apcl = ABCDpcl[[1, 1]]; Bpcl = ABCDpcl[[1, 2]]; Cpcl = ABCDpcl[[2, 1]]; Dpcl = ABCDpcl[[2, 2]]; (Apcl*ZL + Bpcl - Cpcl*ZS*ZL - Dpcl*ZS)/(Apcl*ZL + Bpcl + Cpcl*ZS*ZL + Dpcl*ZS) ]; (* 直接生成曲线并指定图例、颜色 *) Plot[ Evaluate[Table[20*Log[Abs[S11[z0e]]], {z0e, Z0e}]], {f, 0, 4}, PlotRange -> {-50, 0}, Frame -> {{True, False}, {True, False}}, FrameLabel -> {{"S11 (dB)", None}, {"Frequency (GHz)", None}}, PlotLegends -> {"Z0e=120", "Z0e=240"}, PlotStyle -> {Blue, Red} (* 可选:手动指定曲线颜色增强区分度 *) ]
关键修改说明
- 把S11计算逻辑与Z0e参数绑定,避免列表运算导致的无标签问题
- 通过
PlotLegends选项添加明确的图例标识,支持自定义位置和样式 - 可选通过
PlotStyle手动指定曲线颜色,进一步强化不同Z0e曲线的区分度
内容的提问来源于stack exchange,提问作者Angel Kuan
相关产品推荐
相关产品推荐

