ComplexListPlot: como adicionar linhas de preenchimento à origem?

Sep 15 2020

MMA 12. Muitas funções de plotagem de estilo XY suportam a Fillingopção, de modo que, por exemplo, Filling->Axisdeixa cair uma linha de cada ponto de plotagem para o eixo X ou pode ser usada para preencher a área entre a linha e o eixo (apenas um uso de alguns tipos essas opções oferecem).

Quando peço a Wolfram Alpha para representar graficamente as raízes da equação$z^{11}+1=0$, há um bom gráfico na página com linhas de preenchimento até a origem:

Eu quero desenhar as mesmas linhas no MMA (provavelmente usando a ComplexListPlotfunção), mas não consigo encontrar uma maneira fácil de fazer isso. Talvez, massagear a lista de fontes em Directives ou algo ainda menos elegante como esse resolveria o problema, mas suspeito que estou perdendo algo simples.

Qual é a maneira mais simples de desenhar linhas de preenchimento de pontos de plotagem discretos no plano complexo até a origem? Estou começando com este desenho simples

ComplexListPlot[z /. Solve[z^11 + 1 == 0, z], 
   PlotStyle -> {Red, AbsolutePointSize[6]}, 
   Prolog -> {GrayLevel[0.8], Circle[]}]

para reproduzir o gráfico do Alpha (sem os rótulos da caixa e do eixo, mas isso é trivial para adicionar). São as linhas radiais que me confundem com a forma como são aparentemente pouco simples de renderizar.

Respostas

5 kglr Sep 16 2020 at 02:39
lst = z /. Solve[z^11 + 1 == 0, z];

1. Adicione as linhas desejadas em Prolog:

ComplexListPlot[lst, PlotStyle -> {Red, AbsolutePointSize[6]}, 
   Prolog -> {GrayLevel[0.8], Circle[], Line[{{0,0}, #} &/@ ReIm[lst]]}]

Outras alternativas:

2. Pós-processo para injetar as linhas desejadas:

ComplexListPlot[lst, PlotStyle -> {Red, AbsolutePointSize[6]}, 
  BaseStyle -> GrayLevel[.8],  Prolog -> Circle[]] // 
    Normal[#] /. {d_Directive, p_Point} :> { Line[{{0, 0}, #}] & /@ First[p], d, p} &

3. Crie um segundo gráfico com a entrada Thread[{0, lst}]e a opção Joined -> Truee combine-o com o gráfico original usando Show:

Show[ComplexListPlot[Thread[{0, lst}], Joined -> True,  PlotStyle -> GrayLevel[0.8]], 
 ComplexListPlot[lst, PlotStyle -> {Red, AbsolutePointSize[6]}],
 Prolog -> {GrayLevel[0.8], Circle[]}]

6 cvgmt Sep 16 2020 at 00:42

O ComplexListPlotapenas algum tipo de PolarPlot, para que possamos usar PolarGridLinespara adicionar linhas.

Para obter uma lista de pontos complexos, podemos usar Argpara obter o ângulo polar.

Atualizar

pts = z /. Solve[z^11 + 1 == 0, z];
ComplexListPlot[pts, PlotStyle -> {Red, AbsolutePointSize[6]}, 
 PolarAxesOrigin -> {0, 1}, PolarGridLines -> {Arg[pts], {1}}, 
 GridLinesStyle -> Gray, Frame -> True]

Original

ComplexListPlot[z /. Solve[z^11 + 1 == 0, z], 
 PlotStyle -> {Red, AbsolutePointSize[6]}, 
 PolarAxesOrigin -> {Pi/11, 1}, 
 PolarGridLines -> {Table[i*Pi/11, {i, 1, 22, 2}], {1}}, 
 GridLinesStyle -> Gray, Frame -> True]