Có ví dụ minh họa là how to create custom colormaps here. Chuỗi tài liệu là điều cần thiết để hiểu ý nghĩa của cdict
. Một khi bạn nhận được rằng dưới vành đai của bạn, bạn có thể sử dụng một cdict
như thế này:
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
}
Mặc dù định dạng cdict
cung cấp cho bạn rất nhiều tính linh hoạt, tôi tìm cho đơn giản gradients định dạng của nó là khá unintuitive. Đây là một chức năng hữu ích để giúp tạo LinearSegmentedColormaps đơn giản:
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()
Bằng cách này, các for-loop
for i in range(0, len(array_dg)):
plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())
lô một điểm cho mỗi cuộc gọi đến plt.plot
. Điều này sẽ làm việc cho một số lượng nhỏ các điểm, nhưng sẽ trở nên rất chậm cho nhiều điểm. plt.plot
chỉ có thể vẽ một màu, nhưng plt.scatter
có thể gán màu khác nhau cho mỗi chấm. Vì vậy, plt.scatter
là con đường để đi.
Ông có thể làm rõ câu hỏi của bạn một chút? Ví dụ, 'c =' chỉ định màu của đường kẻ, trong khi bạn đang nói về các điểm. Bạn chỉ có thể chỉ định một 'markerfacecolor', phân tán có thể là một lựa chọn tốt hơn nếu bạn thực sự muốn điểm. Và thực sự 'ListedColormap' được liệt kê, không liên tục, xem' LinearSegmentedColormap'. –
Điều đó thật kỳ lạ, nó được cho là điểm và nó trông giống như điểm. – Trollbrot
Bạn có thể tắt khóa học, nhưng đó là những gì bạn nên làm rõ. Chúng tôi không thể thấy phong cách cốt truyện bạn đang sử dụng. Nếu bạn sử dụng 'plt.plot (giá trị, 'o')', bạn sẽ chỉ vẽ các dấu và không có dòng, nhưng các điểm đánh dấu sẽ có một màu cố định mà không (và không thể) thay đổi theo giá trị. –