matplotlib colorbar for scatter

Pracuję z danymi, które mają 3 parametry kreślenia: x, y, c. Jak utworzyć niestandardową wartość koloru dla wykresu punktowego?

Rozszerzenie tego przykład próbuję zrobić:

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

Ale wynik jest TypeError: You must first set_array for mappable

Author: Community, 2011-05-19

2 answers

From the matplotlib docs on scatter 1:

Cmap jest używany tylko wtedy, gdy c jest tablicą pływaków

Więc colorlist musi być listą pływaków, a nie listą krotek, jak to teraz masz. plt.colorbar () chce obiektu, który można zmapować, takiego jak CircleCollection, które plt.scatter () zwraca. vmin i vmax mogą następnie kontrolować granice paska kolorów. Rzeczy spoza vmin/vmax otrzymują Kolory punktów końcowych.

Jak to działa dla ty?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

Przykład Obrazka

 133
Author: matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 16:14:34

Jeśli szukasz rozproszenia o dwie zmienne i koloru o trzecią, Altair może być świetnym wyborem.

Tworzenie zbioru danych

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

Altair plot

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

Wykres

Tutaj wpisz opis obrazka

 1
Author: Nipun Batra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 04:31:14