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
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()
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
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