Удивительно, но я не нашел прямого описания того, как нарисовать круг с помощью matplotlib.pyplot (пожалуйста, без pylab), в качестве центра ввода (x, y) и радиуса r. Я попробовал несколько вариантов этого:
import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()
... но до сих пор не получилось.
python
matplotlib
Макс Ли
источник
источник
plt.Circle(..)
направляет кmatplotlib.patches.Circle()
. Таким образом, решение без pyplot будетcircle = matplotlib.patches.Circle(..); axes.add_artist(circle)
.Ответы:
Вы должны добавить его к осям. A
Circle
является подклассом класса anArtist
, и методaxes
имеетadd_artist
метод.Вот пример этого:
Это приводит к следующему рисунку:
Первый круг находится в начале координат, но по умолчанию
clip_on
этоTrue
так, поэтому круг обрезается, когда он выходит за пределыaxes
. Третий (зеленый) круг показывает, что происходит, когда вы не обрезаетеArtist
. Он простирается за пределы осей (но не за пределы фигуры, т. Е. Размер фигуры не регулируется автоматически для построения графика всех ваших художников).Единицы для x, y и радиуса соответствуют единицам данных по умолчанию. В этом случае я ничего не рисовал на своих осях (
fig.gca()
возвращает текущие оси), и, так как ограничения никогда не устанавливались, по умолчанию они находятся в диапазоне от x до y от 0 до 1.Вот продолжение примера, показывающее, как важны единицы измерения:
что приводит к:
Вы можете видеть, как я установил заливку 2-го круга
False
, что полезно для обобщения ключевых результатов (например, моей желтой точки данных).источник
matplotlib.pyplot.Circle == matplotlib.patches.Circle
оцениваетTrue
, так что они, вероятно, псевдонимы.Быстрый сокращенный вариант принятого ответа, чтобы быстро вставить кружок в существующий сюжет. Обратитесь к принятому ответу и другим ответам, чтобы понять детали.
Кстати:
gcf()
значит получить текущий рисунокgca()
значит получить текущую осьисточник
dir(fig)
показывает более 30 методов get, ноgca
не имеетget_current_axis
псевдонима. Такого рода ответы на вопросы фии замечательны.plt.gca()
вместоplt.gcf().gca()
Если вы хотите построить набор кругов, вы можете захотеть увидеть этот пост или эту суть (немного новее). В посте предложена функция с именем
circles
.Функция
circles
работает аналогичноscatter
, но размеры нанесенных кругов указаны в единицах данных.Вот пример:
источник
transform=ax.transAxes
?mplleaflet
? Если да, не могли бы вы привести пример?matplotlib
, я думаю, что он должен быть совместим с,mplleaflet
хотя я никогда не пробовал.Или, если хотите, посмотрите на
path
страницу http://matplotlib.sourceforge.net/users/path_tutorial.html.источник
Если вы хотите, чтобы «круг» поддерживал визуальное соотношение сторон 1 независимо от координат данных, вы можете использовать метод scatter (). http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter
источник
Расширение принятого ответа для общего использования. В частности:
Просмотр кругов в естественном соотношении сторон.
Автоматически расширяет пределы осей, чтобы включить вновь построенные круги.
Автономный пример:
Обратите внимание на разницу между
ax.add_patch(..)
иax.add_artist(..)
: из двух, только первое заставляет автоматическое масштабирование принимать во внимание круг (ссылка: обсуждение ), поэтому после запуска приведенного выше кода мы получим:Смотрите также:
set_aspect(..)
документация .источник
fig, ax = plt.subplots()
, иначе вы получите два окна (одно пустое).Я вижу графики с использованием (.circle), но, основываясь на том, что вы хотите сделать, вы также можете попробовать это:
источник
Здравствуйте, я написал код для рисования круга. Это поможет для рисования всех видов кругов. На рисунке показан круг с радиусом 1 и центром в 0,0 . Центр и радиус можно редактировать на любой выбор.
Удачи
источник
Аналогично точечной диаграмме вы также можете использовать нормальный график со стилем окружности. Используя
markersize
параметр, вы можете настроить радиус круга:источник