es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminar la aspereza

Estoy tratando de trazar una curva de Spirograph™

In [65]: from matplotlib.pyplot import gca, subplots
    ...: from numpy import exp, lcm, linspace, pi
    ...: 
    ...: def prepare_for_sg():
    ...:     fig, ax = subplots()
    ...:     ax.set_aspect(1)
    ...:     ax.axis(False)
    ...:     return fig, ax
    ...: 
    ...: def plot_sg(R, r, d, Φ=0.0, φ=0.0, ax=None):
    ...:     if ax is None : ax = gca()
    ...:     Ω = 2*pi ;  ω = -Ω*R/r
    ...:     n = lcm(r, R)
    ...:     t = linspace(0, n, n*360+1)
    ...:     xy = (R-r)*np.exp(1j*Ω*(t-Φ)) + d*np.exp(1j*ω*(t-φ))
    ...:     line, = ax.plot(xy.real, xy.imag)
    ...:     line.set_antialiased(True)
    ...: 
    ...: prepare_for_sg() ; plot_sg(56, 42, 13)

In [66]: !xmag

y debajo está lo que obtengo, además de una ventana xmag ampliando un detalle de la curva – no hay un exceso de antialiasing.

¿Qué debo hacer para quitar las irregularidades?


EDITAR
Habiendo cambiado mis gafas, reconozco que hay un poquito de antialiasing (gracias @Thomas).
Con respecto a la sugerencia de Thomas, reducir la densidad de puntos, reduje el número de puntos en un factor de 12 (de 360 por lóbulo a 30) pero no he visto ninguna mejora en la suavidad de la curva (hay el mismo pequeñito poquito de antialiasing), por el contrario, hay una degradación sensible de la representación de la curva en su conjunto.

¿Qué debo hacer para aumentar la agresividad del antialiasing?

imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para aumentar la agresividad del antialiasing en la curva trazada, puedes modificar el rcParams de matplotlib. Específicamente, puedes aumentar el parámetro path.effects, el cual controla la agresividad del antialiasing. Por ejemplo:

    import matplotlib as mpl
    
    mpl.rcParams['path.effects'] = [mpl.patheffects.withStroke(linewidth=0.6, foreground='white')]
    

    Esto aumentará el valor de path.effects a un nivel que debería reducir la rugosidad de la curva. Experimenta con valores diferentes hasta encontrar el antialiasing óptimo para tu gráfica específica.

Comments are closed.