Вопрос

В Python, с Matplotlib, как можно разбронировать сюжет пустой круги будут построены? Цель состоит в том, чтобы рисовать пустые круги вокруг немного цветных дисков, уже нанесенных scatter(), Итак, чтобы выделить их, в идеале без необходимости перерисовать цветные круги.

Я старался facecolors=None, но безрезультатно.

Это было полезно?

Решение

Из документация Для рассеяния:

Optional kwargs control the Collection properties; in particular:

    edgecolors:
        The string ‘none’ to plot faces with no outlines
    facecolors:
        The string ‘none’ to plot unfilled outlines

Попробуйте следующее:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.randn(60) 
y = np.random.randn(60)

plt.scatter(x, y, s=80, facecolors='none', edgecolors='r')
plt.show()

example image

Примечание: Для других типов участков см. эта почта на использование markeredgecolor а также markerfacecolor.

Другие советы

Будут ли эти работы?

plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')

example image

или используя участок ()

plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')

example image

Вот еще один способ: это добавляет круг на текущие оси, графику или изображение или что-то еще:

from matplotlib.patches import Circle  # $matplotlib/patches.py

def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
    """ add a circle to ax= or current axes
    """
        # from .../pylab_examples/ellipse_demo.py
    e = Circle( xy=xy, radius=radius )
    if ax is None:
        ax = pl.gca()  # ax = subplot( 1,1,1 )
    ax.add_artist(e)
    e.set_clip_box(ax.bbox)
    e.set_edgecolor( color )
    e.set_facecolor( facecolor )  # "none" not None
    e.set_alpha( alpha )

alt text

(Круги на картинке сформулируются в эллипсы, потому что imshow aspect="auto" ).

В Matplotlib 2.0 есть параметр fillstyleкоторый позволяет лучше контролировать на пути заполнения маркеров. В моем случае я использовал его с помощью Crenverbars, но он работает для маркеров в целомhttp://matplotlib.org/api/_as_gen/matplotlib.axes.axes.eerrorbar.html.

fillstyle принимает следующие значения: [«полный» | «Левый» | «правильно» | «дно» | «верх» | 'никто'

Есть два важных веща, чтобы иметь в виду, когда используете fillstyle,

1) Если MFC установлен на любое значение, это примет приоритет, следовательно, если вы установили FillStyle на «Нет», это не вступит в силу. Поэтому избегайте использования MFC в сопряжении с FillStyle

2) Возможно, вы захотите контролировать ширину края маркера (используя markeredgewidth или mew) Потому что если маркер относительно небольшой, а ширина края толстая, маркеры будут выглядеть как заполненные, даже если они нет.

Ниже приведен пример с использованием CREARBARS:

myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue',  mec='blue')

Поэтому я предполагаю, что вы хотите выделить некоторые очки, которые соответствуют определенным критериям. Вы можете использовать команду PRELUDE, чтобы сделать второй график разброса на высокие точки с пустым кругом и первым вызовом, чтобы построить все точки. Убедитесь, что параметр S достаточно маленький для больших пустых кругов, чтобы заключить меньшие заполненные.

Другой вариант - не использовать Scatter и нарисуйте патчи индивидуально, используя команду Circle / Ellipse. Это в matplotlib.patches, здесь Является ли какой-то пример код на том, как нарисовать круги прямоугольников и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top