ComplexListPlot: como adicionar linhas de preenchimento à origem?
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
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[]}]
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]