В чем разница между совместимостью -source и -target?

Вот немного упрощенный пример, вдохновленный верхним ответом, данным Boris и Hooked (Спасибо за отличную идею!):

1 , Дискретная colorbar

Дискретная панель цвета более активна, поскольку цветовая палитра, сгенерированная mpl.cm.get_cmap(), не является отображаемым изображением, необходимым в качестве аргумента colorbar(). Нужно создать сэмплирование, как показано ниже:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

n_lines = 5
x = np.linspace(0, 10, 100)
y = np.sin(x[:, None] + np.pi * np.linspace(0, 1, n_lines))
c = np.arange(1, n_lines + 1)

cmap = mpl.cm.get_cmap('jet', n_lines)

fig, ax = plt.subplots(dpi=100)
# Make dummie mappable
dummie_cax = ax.scatter(c, c, c=c, cmap=cmap)
# Clear axis
ax.cla()
for i, yi in enumerate(y.T):
    ax.plot(x, yi, c=cmap(i))
fig.colorbar(dummie_cax, ticks=c)
plt.show();

Это приведет к созданию графика с дискретным цветом:


2. Непрерывная цветная панель

Непрерывная цветовая панель менее задействована, так как mpl.cm.ScalarMappable() позволяет нам получить «изображение» для colorbar().

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl


n_lines = 5
x = np.linspace(0, 10, 100)
y = np.sin(x[:, None] + np.pi * np.linspace(0, 1, n_lines))
c = np.arange(1, n_lines + 1)

norm = mpl.colors.Normalize(vmin=c.min(), vmax=c.max())
cmap = mpl.cm.ScalarMappable(norm=norm, cmap=mpl.cm.jet)
cmap.set_array([])

fig, ax = plt.subplots(dpi=100)
for i, yi in enumerate(y.T):
    ax.plot(x, yi, c=cmap.to_rgba(i + 1))
fig.colorbar(cmap, ticks=c)
plt.show();

Это приведет к созданию графика с непрерывной цветной панелью:

[Сторона примечания] В этом примере я лично не знаю, почему cmap.set_array([]) (в противном случае мы получим сообщения об ошибках). Если кто-то понимает принципы под капотом, прокомментируйте:)

38
задан Nayuki 15 May 2016 в 03:11
поделиться