de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 user2386081
user2386081
Question

Matplotlib scatter plot legend

Saya membuat sebuah 4D scatter plot grafik untuk mewakili suhu yang berbeda di daerah tertentu. Ketika saya membuat legenda, legenda menunjukkan simbol yang benar dan warna, tetapi menambahkan garis melalui itu. Kode I'm menggunakan adalah:

colors=['b', 'c', 'y', 'm', 'r']
lo = plt.Line2D(range(10), range(10), marker='x', color=colors[0])
ll = plt.Line2D(range(10), range(10), marker='o', color=colors[0])
l = plt.Line2D(range(10), range(10), marker='o',color=colors[1])
a = plt.Line2D(range(10), range(10), marker='o',color=colors[2])
h = plt.Line2D(range(10), range(10), marker='o',color=colors[3])
hh = plt.Line2D(range(10), range(10), marker='o',color=colors[4])
ho = plt.Line2D(range(10), range(10), marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),numpoints=1, loc='lower left', ncol=3, fontsize=8)

Saya mencoba mengubah Line2D untuk Menyebarkan dan menyebar. Menyebarkan kembali kesalahan dan menyebarkan berubah grafik dan kembali kesalahan.

Dengan menyebarkan, aku berubah range(10) ke daftar yang berisi titik-titik data. Setiap daftar berisi baik x, y, atau z variabel.

lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, marker='x', color=colors[0])
ll = plt.scatter(xLoLo, yLoLo, zLoLo, marker='o', color=colors[0])
l = plt.scatter(xLo, yLo, zLo, marker='o',color=colors[1])
a = plt.scatter(xAverage, yAverage, zAverage, marker='o',color=colors[2])
h = plt.scatter(xHi, yHi, zHi, marker='o',color=colors[3])
hh = plt.scatter(xHiHi, yHiHi, zHiHi, marker='o',color=colors[4])
ho = plt.scatter(xHOutlier, yHOutlier, zHOutlier, marker='x', color=colors[4])
plt.legend((lo,ll,l,a, h, hh, ho),('Low Outlier', 'LoLo','Lo', 'Average', 'Hi', 'HiHi',     'High Outlier'),scatterpoints=1, loc='lower left', ncol=3, fontsize=8)

Ketika saya menjalankan ini, legenda tidak ada lagi, itu adalah sebuah kotak putih kecil di sudut dengan apa-apa di dalamnya.

Ada saran?

50 2013-07-01T19:12:15+00:00 4
 sodd
sodd
Pertanyaan edit 21 Januari 2016 в 2:09
Pemrograman
python
matplotlib
scatter-plot
legend
Solution / Answer
 sodd
sodd
1 Juli 2013 в 7:35
2013-07-01T19:35:25+00:00
Lebih
Sumber
Sunting
#19802399

2D scatter plot

Menggunakan menyebarkan metode matplotlib.pyplot modul harus bekerja (setidaknya dengan matplotlib 1.2.1 dengan Python 2.7.5), seperti pada contoh kode di bawah ini. Juga, jika anda menggunakan scatter plot, gunakan scatterpoints=1 daripada numpoints=1 legenda panggilan untuk hanya memiliki satu titik untuk setiap legenda entri.

Dalam kode di bawah ini saya've digunakan nilai acak daripada merencanakan kisaran yang sama berulang-ulang, membuat semua plot terlihat (yaitu tidak tumpang tindih satu sama lain).

import matplotlib.pyplot as plt
from numpy.random import random

colors = ['b', 'c', 'y', 'm', 'r']

lo = plt.scatter(random(10), random(10), marker='x', color=colors[0])
ll = plt.scatter(random(10), random(10), marker='o', color=colors[0])
l  = plt.scatter(random(10), random(10), marker='o', color=colors[1])
a  = plt.scatter(random(10), random(10), marker='o', color=colors[2])
h  = plt.scatter(random(10), random(10), marker='o', color=colors[3])
hh = plt.scatter(random(10), random(10), marker='o', color=colors[4])
ho = plt.scatter(random(10), random(10), marker='x', color=colors[4])

plt.legend((lo, ll, l, a, h, hh, ho),
           ('Low Outlier', 'LoLo', 'Lo', 'Average', 'Hi', 'HiHi', 'High Outlier'),
           scatterpoints=1,
           loc='lower left',
           ncol=3,
           fontsize=8)

plt.show()

3D scatter plot

Untuk plot pencar di 3D, gunakan plot metode, seperti legenda yang tidak mendukung Patch3DCollection sebagai dikembalikan oleh menyebarkan metode Axes3D misalnya. Untuk menentukan markerstyle anda dapat memasukkan ini sebagai posisi argumen dalam metode panggilan, seperti yang terlihat pada contoh di bawah ini. Opsional satu dapat memiliki argumen untuk kedua linestyle dan penanda parameter.

import matplotlib.pyplot as plt
from numpy.random import random
from mpl_toolkits.mplot3d import Axes3D

colors=['b', 'c', 'y', 'm', 'r']

ax = plt.subplot(111, projection='3d')

ax.plot(random(10), random(10), random(10), 'x', color=colors[0], label='Low Outlier')
ax.plot(random(10), random(10), random(10), 'o', color=colors[0], label='LoLo')
ax.plot(random(10), random(10), random(10), 'o', color=colors[1], label='Lo')
ax.plot(random(10), random(10), random(10), 'o', color=colors[2], label='Average')
ax.plot(random(10), random(10), random(10), 'o', color=colors[3], label='Hi')
ax.plot(random(10), random(10), random(10), 'o', color=colors[4], label='HiHi')
ax.plot(random(10), random(10), random(10), 'x', color=colors[4], label='High Outlier')

plt.legend(loc='upper left', numpoints=1, ncol=3, fontsize=8, bbox_to_anchor=(0, 0))

plt.show()

 sodd
sodd
Jawaban edit 2 Juli 2013 в 2:44
103
0
 Amir
Amir
30 Maret 2019 в 3:02
2019-03-30T03:02:12+00:00
Lebih
Sumber
Sunting
#19802400

Berikut ini's cara yang lebih mudah untuk melakukan hal ini (sumber: di sini):

import matplotlib.pyplot as plt
from numpy.random import rand

fig, ax = plt.subplots()
for color in ['red', 'green', 'blue']:
    n = 750
    x, y = rand(2, n)
    scale = 200.0 * rand(n)
    ax.scatter(x, y, c=color, s=scale, label=color,
               alpha=0.3, edgecolors='none')

ax.legend()
ax.grid(True)

plt.show()

Dan anda'akan mendapatkan ini:

Lihat di sini untuk legenda sifat

 Amir
Amir
Jawaban edit 9 April 2019 в 7:51
3
0
 OliverQ
OliverQ
23 Oktober 2019 в 6:09
2019-10-23T06:09:02+00:00
Lebih
Sumber
Sunting
#19802402

jika anda menggunakan matplotlib versi 3.1.1 atau di atas, anda dapat mencoba:

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

x = [1, 3, 4, 6, 7, 9]
y = [0, 0, 5, 8, 8, 8]
classes = ['A', 'B', 'C']
values = [0, 0, 1, 2, 2, 2]
colours = ListedColormap(['r','b','g'])
scatter = plt.scatter(x, y,c=values, cmap=colours)
plt.legend(handles=scatter.legend_elements()[0], labels=classes)

results2

3
0
 Avelanche
Avelanche
29 Agustus 2019 в 11:06
2019-08-29T11:06:36+00:00
Lebih
Sumber
Sunting
#19802401

Jawaban yang lain tampak sedikit rumit, anda hanya dapat menambahkan sebuah parameter 'label' dalam menyebarkan fungsi dan yang akan menjadi legenda untuk rencana anda.

import matplotlib.pyplot as plt
from numpy.random import random

colors = ['b', 'c', 'y', 'm', 'r']

lo = plt.scatter(random(10), random(10), marker='x', color=colors[0],label='Low Outlier')
ll = plt.scatter(random(10), random(10), marker='o', color=colors[0],label='LoLo')
l  = plt.scatter(random(10), random(10), marker='o', color=colors[1],label='Lo')
a  = plt.scatter(random(10), random(10), marker='o', color=colors[2],label='Average')
h  = plt.scatter(random(10), random(10), marker='o', color=colors[3],label='Hi')
hh = plt.scatter(random(10), random(10), marker='o', color=colors[4],label='HiHi')
ho = plt.scatter(random(10), random(10), marker='x', color=colors[4],label='High Outlier')

plt.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),
          fancybox=True, shadow=True, ncol=4)

plt.show()

Berikut ini adalah output

0
0
Related communities 6
Python Indonesia
Python Indonesia
24 648 pengguna
Programmer Python Indonesia. Group ini dikelola oleh sejumlah admin. Baca pesan tersemat / pinned message: https://t.me/pythonID/217588
Buka telegram
Indonesian Python Warriors
Indonesian Python Warriors
1 441 pengguna
Di grup ini tidak ada kewajiban untuk menggunakan username dan foto. Yang tidak boleh adalah spamming. Gak boleh baper, kalau nanya yang bener, eror jangan difoto pake HP, gunakan screenshot, code copas ke pastebin.com lalu share link ke sini.
Buka telegram
Python-ID Jogja
Python-ID Jogja
956 pengguna
Buka telegram
BASIC PYTHON INDONESIA
BASIC PYTHON INDONESIA
248 pengguna
Buka telegram
Python Newbie Indonesia
Python Newbie Indonesia
195 pengguna
Peraturan grup Python Newbie 🌻Dilarang spam 🌻Dilarang menggunakan bahasa kasar 🌻Dilarang beriklan di grup tanpa seizin admin Beberapa video dasar python dapat diliat melalui channel youtube juan aditya Jangan lupa untuk subscribe ya🙏
Buka telegram
PythonWealth Indonesia 🇮🇩
PythonWealth Indonesia 🇮🇩
27 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Elena Nudel
Terdaftar 9 jam yang lalu
2
firdaus faizal
Terdaftar 10 jam yang lalu
3
Виталий Теслюк
Terdaftar 2 hari yang lalu
4
shokir qochqorov
Terdaftar 2 hari yang lalu
5
Roxana Elizabeth CASTILLO Avalos
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
TR
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi