Istnieje przykład ilustrujący numer how to create custom colormaps here. Docstring jest niezbędny do zrozumienia znaczenia cdict
. Gdy pojawi się, że pod pasem, można użyć cdict
takiego:
cdict = {'red': ((0.0, 1.0, 1.0),
(0.1, 1.0, 1.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 0.0, 0.0)), # blue
'green': ((0.0, 0.0, 0.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.1, 0.0, 0.0), # red
(0.4, 1.0, 1.0), # violet
(1.0, 1.0, 0.0)) # blue
}
Chociaż format, cdict
daje dużą elastyczność, uważam za zwykłą gradienty jego format jest raczej nieintuicyjne. Oto funkcja narzędzie, aby pomóc generowania prostych LinearSegmentedColormaps:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
if isinstance(item, float):
r1, g1, b1 = seq[i - 1]
r2, g2, b2 = seq[i + 1]
cdict['red'].append([item, r1, r2])
cdict['green'].append([item, g1, g2])
cdict['blue'].append([item, b1, b2])
return mcolors.LinearSegmentedColormap('CustomMap', cdict)
c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), c('violet'), 0.33, c('violet'), c('blue'), 0.66, c('blue')])
N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(-2, 2, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()
By the way, for-loop
for i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
Działki jeden punkt za każde wezwanie do plt.plot
. Będzie to działać dla niewielkiej liczby punktów, ale stanie się bardzo powolne dla wielu punktów. plt.plot
może rysować tylko w jednym kolorze, ale plt.scatter
może przypisać inny kolor do każdej kropki. Tak więc, droga do przebycia to plt.scatter
.
mógłbyś wyjaśnić swoje pytanie trochę? Na przykład 'c =' określa kolor linii, podczas gdy mówisz o punktach. Możesz określić tylko jeden 'markerfacecolor', scatter może być lepszą opcją, jeśli naprawdę potrzebujesz punktów. I rzeczywiście lista 'ListedColormap' jest wymieniona, a nie ciągła, patrz' LinearSegmentedColormap'. –
To dziwne, ma być punktami i wygląda jak punkty. – Trollbrot
Możesz zejść z kursu, ale to właśnie powinieneś wyjaśnić. Nie możemy zobaczyć, jakiego stylu fabularnego używasz. Jeśli użyjesz 'plt.plot (value, 'o')', będziesz rysować tylko znaczniki i bez linii, ale znaczniki będą miały jeden stały kolor, który nie będzie (i nie będzie się różnić) w zależności od wartości. –