Как я могу отобразить несколько точек на градиент цвета вдоль оси Y? - PullRequest
1 голос
/ 20 сентября 2019

Значения моего точечного графика имеют значения от 0 до 1, и я пытаюсь построить его таким образом, чтобы у определенного значения y был определенный цвет, упорядоченный по интенсивности.Например, на карте цветов viridis я хочу, чтобы точки размером около 0,90 были желтыми, а точки около 0,10 - темно-фиолетовыми.Однако я получаю только эти результаты.

import matplotlib
import matplotlib.pyplot as plt

#Generate the data
time = np.arange(50)
a = np.random.random(50)
b = np.ones((50, 50), float)
for t in time: 
    b[i, :] = a

#Creating a color mapping variable
z = np.linspace(0, 1, 50)

#Generating the plot
fig, ax = plt.subplots(figsize=(5,5))
for t in time:
    ax.scatter(np.ones(len(b[t,:])) * t, b[t, :], c = z, cmap = 'viridis', s = 5, vmin = 0, vmax = 1)

plt.show()

Вот как выглядит моя фигура:

Scatter plot image

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Вы были очень близко.Вам просто нужно использовать значения y в качестве аргумента z с картой цветов viridis.Следовательно, единственное, что вам нужно - это c = b[t, :],

for t in time:
    ax.scatter(np.ones(len(b[t,:])) * t, b[t, :], c = b[t, :], cmap = 'viridis', 
               s = 5, vmin = 0, vmax = 1)

enter image description here

0 голосов
/ 20 сентября 2019

Значения одной из осей должны быть отсортированы.

>>> x = np.random.rand(50)
>>> x.shape
(50,)
>>> y = np.linspace(0,1,50)
>>> y.shape
(50,)
>>> plt.scatter(x,y,c=np.linspace(0,1,50))
<matplotlib.collections.PathCollection object at 0x00000000149AB390>
>>> plt.show()
...