Márgenes de matplotlib

Mira la tabla de abajo. En esta tabla, quiero dibujar para formar un círculo con las coordenadas del centro en (45, 0). Pero, como puede ver, el límite inferior del gráfico es cero y no se muestra la mitad de mi círculo. Por lo tanto, necesito extender este gráfico al fondo un poco. El método de “márgenes” de los ejes (ax.margins ()) no funciona, ya que la línea inferior de este gráfico es cero y el cero multiplicado por cualquier número es igual a cero.

Nota: Por favor, no publique respuestas como ax.set_ylim (…) o ax.set_yticks (…). Estoy buscando una solución general para esto como problemas.

Code import matplotlib.pyplot as plt import numpy as np values = np.array([0.00388632352941, 0.00375827941176, 0.00355033823529, 0.00328273529412, 0.00294677941176, 0.00272142647059, 0.00246463235294, 0.00227766176471, 0.00213151470588, 0.00202594117647, 0.00183544117647, 0.00162102941177, 0.00148372058824, 0.00128380882353, 0.00112252941176, 0.000931544117647, 0.000786573529412, 0.000658220588235, 0.000584485294118, 0.000524044117647, 0.000562485294118, 0.000716441176471, 0.000872617647059, 0.00109039705882, 0.00124138235294, 0.00136894117647, 0.00143985294118, 0.00134760294118, 0.00121794117647, 0.00112772058824, 0.00109435294118, 0.00102432352941, 0.00101069117647, 0.00102417647059, 0.00104895588235, 0.00101776470588, 0.00101494117647, 0.000885558823529, 0.00078075, 0.000752647058824, 0.000667691176471, 0.000593220588236, 0.000658647058823, 0.000742117647059, 0.000651470588235, 0.000604647058824, 0.000584573529412, 0.00049530882353, 0.000281235294118, 0.000355029411765]) fig, ax = plt.subplots() ax.bar(np.arange(values.shape[0]), values) plt.show() 

introduzca la descripción de la imagen aquí

En la pregunta no hay círculo, por lo que mi respuesta tampoco incluye ningún círculo.

Para tener algo de espacio alrededor de los datos en el gráfico, puede usar ax.margins(y=ymargin) , donde ymargin es el porcentaje de espacio que se agrega en cada lado de los datos. Es decir, si los datos van de 0 a 1 y agrega ymargin = 0.1 de margen, los ylimits serán (-0.1, 1.1) . (Esto es independiente de si un límite sería cero o no).

Ahora, por defecto, esto no funciona para una gráfica de barras, ya que en el caso general no sería conveniente que las barras comiencen en algún lugar en el air, a diferencia del eje inferior. Este comportamiento es dirigido utilizando una bandera llamada use_sticky_edges . Podemos establecer este indicador en False para recuperar el comportamiento de los márgenes que se aplican a ambos extremos del eje. Para que surta efecto, necesitamos llamar a ax.autoscale_view después.

 import matplotlib.pyplot as plt import numpy as np values = np.array([3.89, 3.76, 3.55, 3.28, 2.95, 2.72, 2.46, 2.28, 2.13, 2.03, 1.84, 1.62, 1.48, 1.28, 1.12, 0.93, 0.79, 0.66, 0.58, 0.52, 0.56, 0.72, 0.87, 1.09, 1.24, 1.37, 1.44, 1.35, 1.22, 1.13, 1.09, 1.02, 1.01, 1.02, 1.05, 1.02, 1.01, 0.89, 0.78, 0.75, 0.67, 0.59, 0.66, 0.74, 0.65, 0.60, 0.58, 0.50, 0.28, 0.36]) fig, ax = plt.subplots() ax.bar(np.arange(values.shape[0]), values) ax.margins(y=0.3) ax.use_sticky_edges = False ax.autoscale_view(scaley=True) plt.show() 

introduzca la descripción de la imagen aquí