mengherankan saya tidak menemukan deskripsi lurus ke depan tentang cara menggambar lingkaran dengan matplotlib.pyplot (tolong tidak ada pylab) mengambil sebagai pusat input (x, y) dan jari-jari r. Saya mencoba beberapa varian ini:
import matplotlib.pyplot as plt
circle=plt.Circle((0,0),2)
# here must be something like circle.plot() or not?
plt.show()
... tapi tetap tidak berhasil.
python
matplotlib
Max Li
sumber
sumber
plt.Circle(..)
mengarahkan kematplotlib.patches.Circle()
. Jadi solusi tanpa pyplot adalahcircle = matplotlib.patches.Circle(..); axes.add_artist(circle)
.Jawaban:
Anda harus menambahkannya ke sumbu. A
Circle
adalah subclass dariArtist
, danaxes
memilikiadd_artist
metode.Berikut ini contoh melakukan ini:
Ini menghasilkan gambar berikut:
Lingkaran pertama adalah pada asal, tetapi secara default
clip_on
adalahTrue
, sehingga lingkaran terpotong kapan pun ia melampaui luaraxes
. Lingkaran ketiga (hijau) menunjukkan apa yang terjadi ketika Anda tidak memotongArtist
. Itu melampaui sumbu (tetapi tidak di luar angka, yaitu ukuran gambar tidak secara otomatis disesuaikan untuk merencanakan semua artis Anda).Unit untuk x, y dan jari-jari sesuai dengan unit data secara default. Dalam hal ini, saya tidak merencanakan apa pun pada sumbu saya (
fig.gca()
mengembalikan sumbu saat ini), dan karena batasnya tidak pernah ditetapkan, standarnya adalah rentang x dan y dari 0 hingga 1.Berikut ini adalah kelanjutan dari contoh, yang menunjukkan bagaimana unit penting:
yang mengakibatkan:
Anda dapat melihat bagaimana saya mengatur isi lingkaran ke-2
False
, yang berguna untuk melingkari hasil utama (seperti titik data kuning saya).sumber
matplotlib.pyplot.Circle == matplotlib.patches.Circle
mengevaluasiTrue
, jadi mereka mungkin alias.Versi ringkas dari jawaban yang diterima, untuk dengan cepat memasukkan lingkaran ke plot yang ada. Lihat jawaban yang diterima dan jawaban lain untuk memahami detailnya.
Ngomong-ngomong:
gcf()
berarti Dapatkan Gambar Saat Inigca()
berarti Dapatkan Sumbu Saat Inisumber
dir(fig)
menunjukkan kepada saya lebih dari 30 metode 'dapatkan', tetapigca
tidak memilikiget_current_axis
alias. Jawaban seperti ini sangat bagus.plt.gca()
alih - alihplt.gcf().gca()
Jika Anda ingin merencanakan serangkaian lingkaran, Anda mungkin ingin melihat posting ini atau intisari ini (sedikit lebih baru). Pos menawarkan fungsi bernama
circles
.Fungsi
circles
kerjanya sepertiscatter
, tetapi ukuran lingkaran yang diplot ada dalam unit data.Ini sebuah contoh:
sumber
transform=ax.transAxes
harus dilakukanmplleaflet
? Jika ya, bisakah Anda memberikan contoh?matplotlib
, saya kira itu harus kompatibelmplleaflet
walaupun saya tidak pernah mencoba.Atau, jika Anda mau, lihat
path
s, http://matplotlib.sourceforge.net/users/path_tutorial.htmlsumber
Jika Anda bertujuan untuk memiliki "lingkaran" mempertahankan rasio aspek visual 1 tidak peduli apa data koordinatnya, Anda bisa menggunakan metode scatter (). http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.scatter
sumber
Memperluas jawaban yang diterima untuk kata kunci umum. Khususnya:
Lihat lingkaran pada rasio aspek alami.
Secara otomatis memperpanjang batas sumbu untuk menyertakan lingkaran yang baru diplot.
Contoh lengkap:
Perhatikan perbedaan antara
ax.add_patch(..)
danax.add_artist(..)
: dari keduanya, hanya yang pertama membuat mesin autoscaling yang memperhitungkannya (referensi: diskusi ), jadi setelah menjalankan kode di atas kita dapatkan:Lihat juga:
set_aspect(..)
dokumentasi .sumber
fig, ax = plt.subplots()
, jika tidak, Anda akan mendapatkan dua jendela (satu kosong).Saya melihat plot dengan penggunaan (.circle) tetapi berdasarkan apa yang ingin Anda lakukan, Anda juga dapat mencoba ini:
sumber
Halo Saya telah menulis kode untuk menggambar lingkaran. Ini akan membantu untuk menggambar semua jenis lingkaran. Gambar menunjukkan lingkaran dengan jari-jari 1 dan pusat di 0,0 tengah dan jari-jari dapat diedit dari pilihan apa pun.
Semoga berhasil
sumber
Demikian pula untuk menyebarkan plot Anda juga dapat menggunakan plot normal dengan gaya garis lingkaran. Dengan menggunakan
markersize
parameter, Anda dapat menyesuaikan jari-jari lingkaran:sumber