`PlotLabel` cho các ô trong` Table`

Sep 08 2020

Tôi có một Tablechứa hai mảnh đất, được đưa ra bởi

Table[
 Plot[{Re[f[n]] /. j -> 3, Im[f[n]] /. j -> 3}, {n, 0, 15}, 
  GridLines -> Automatic, PlotRange -> All, PlotLegends -> {"Real", "Imaginary"}, 
  PlotLabel -> f[n]], 
{f, {Sum[Sinc[Pi*(#1 - i*j)], {i, 1, Floor[#1]}] & , 
   (-1 + E^(2*I*Pi*#1))/(j*(-1 + E^((2*I*Pi*#1)/j))) & }}
]

Như bạn có thể thấy, Mathematica đã viết lại PlotLabel(tức là Sum[Sinc[Pi*(#1 - i*j)], {i, 1, Floor[#1]}] &) đầu tiên thành một biểu thức mà nó cho là hữu ích hơn hoặc tự nhiên hơn. Tôi không muốn nó làm điều này. Tôi muốn PlotLabelâm mưu đó trông như thế này:

tức là, như thể nó đã được viết PlotLabel -> "expr". Nhưng nhãn khác đã là cách tôi muốn.

Tôi đã thử nghiệm sử dụng StringFormnhưng nó không giúp ích gì. Làm thế nào để tôi làm điều này? Hay là điều này không thể thực hiện được?

Trả lời

6 kglr Sep 08 2020 at 19:04
Table[Plot[{Re[ReleaseHold@f] /. j -> 3,  Im[ReleaseHold@f] /. j -> 3}, {n, 0, 15}, 
  GridLines -> Automatic, 
  PlotRange -> All, ImageSize -> 350, 
  PlotLegends -> {"Real", "Imaginary"}, 
  PlotLabel ->  f], 
{f, {HoldForm@Sum[Sinc[Pi*(n - i*j)], {i, 1, Floor[n]}], 
   HoldForm[(-1 + E^(2*I*Pi*n))/(j*(-1 + E^((2*I*Pi*n)/j)))]}}]

Bạn có thể thay thế HoldFormvà ReleaseHoldbằng Defervà First, tương ứng, để nhận được kết quả tương tự.

Như Bob Hanlon đã đề xuất trong nhận xét, trong phiên bản 12.0+, bạn có thể sử dụng ReImPlotnhư sau:

 Table[ReImPlot[ReleaseHold[f] /. j -> 3, {n, 0, 15}, 
    GridLines -> Automatic, PlotRange -> All, ImageSize -> 350, 
    PlotLegends -> "ReIm", 
    ReImLabels -> {"Real", "Imaginary"}, 
    ReImStyle -> {ColorData[97][1], {ColorData[97][2], Dashing[{}]}},
    PlotLabel -> f], 
  {f, {HoldForm@Sum[Sinc[Pi*(n - i*j)], {i, 1, Floor[n]}], 
      HoldForm[(-1 + E^(2*I*Pi*n))/(j*(-1 + E^((2*I*Pi*n)/j)))]}}]