Usiłuję utworzyć wykres rozproszenia i opisać punkty danych różnymi liczbami z listy. Na przykład chcę wykreślić y
vs x
i opatrzyć adnotacjami odpowiednie liczby z n
.
y = [2.56422, 3.77284, 3.52623, 3.51468, 3.02199]
z = [0.15, 0.3, 0.45, 0.6, 0.75]
n = [58, 651, 393, 203, 123]
ax = fig.add_subplot(111)
ax1.scatter(z, y, fmt='o')
Jakieś pomysły?
python
matplotlib
text
scatter-plot
annotate
Labibah
źródło
źródło
Odpowiedzi:
Nie znam żadnej metody kreślenia, która bierze tablice lub listy, ale możesz jej użyć
annotate()
podczas iteracji po wartościach wn
.Istnieje wiele opcji formatowania
annotate()
, patrz strona internetowa matplotlib:źródło
regplot
bez większych zakłóceń.KeyError
- więc zgaduję, żedict()
obiekt jest oczekiwany? Czy jest jakiś inny sposób, aby oznaczyć dane używającenumerate
,annotate
i ramkę danych pandy?for row in df.iterrows():
, a następnie uzyskać dostęp do wartości za pomocąrow['text'], row['x-coord']
itp. Jeśli opublikujesz osobne pytanie, przyjrzę się temu.W wersji wcześniejszej niż matplotlib 2.0
ax.scatter
nie jest konieczne drukowanie tekstu bez znaczników. W wersji 2.0 musiszax.scatter
ustawić odpowiedni zakres i znaczniki dla tekstu.I w tym linku możesz znaleźć przykład w 3d.
źródło
plt.figure(figsize=(20,10))
które nie działają zgodnie z oczekiwaniami, ponieważ wywoływanie tego kodu nie zmienia rozmiaru obrazu. Czekam na twoją pomoc. Dzięki!W przypadku, gdy ktoś próbuje zastosować powyższe rozwiązania do .scatter () zamiast .subplot (),
Próbowałem uruchomić następujący kod
Wystąpiły jednak błędy stwierdzające, że „nie można rozpakować nie iterowalnego obiektu PathCollection”, przy czym błąd wskazuje konkretnie na kodeline rys, ax = plt.scatter (z, y)
W końcu rozwiązałem błąd za pomocą następującego kodu
Nie spodziewałem się, że będzie różnica między .scatter () i .subplot (), powinienem był wiedzieć lepiej.
źródło
Możesz także użyć
pyplot.text
(patrz tutaj ).źródło
Python 3.6+:
źródło
Jako jeden linijka wykorzystująca funkcję list list i numpy:
[ax.annotate(x[0], (x[1], x[2])) for x in np.array([n,z,y]).T]
konfiguracja jest taka sama jak w przypadku odpowiedzi Rutgera.
źródło
Chciałbym dodać, że możesz nawet używać strzałek / pól tekstowych do opisywania etykiet. Oto co mam na myśli:
Który wygeneruje następujący wykres:
źródło