Построить какую-то третью переменную против x и y в разбросе matplotlib? - PullRequest
0 голосов
/ 21 марта 2019

Я довольно плохо разбираюсь в графиках и питоне в целом. Я пытаюсь построить третью переменную против x и y, однако я не совсем уверен, как определить этот аргумент? Таким образом, у меня были бы значения X, которые являются целыми числами, значения y, которые также являются целыми числами, а затем на самом графике я хочу, чтобы результаты модели были показаны. Есть ли способ сделать что-то подобное?

Спасибо.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

На первый взгляд, этот вопрос не на самом деле имеет смысл, потому что обычная диаграмма рассеяния имеет только две оси, и, конечно, вы не можете построить точки с тремя измерениями (x, y и точность).

Однако есть альтернативные способы сделать это.

  1. Использовать цвета
import numpy as np
from matplotlib import pyplot as plt

x = np.random.rand(200)
y = np.random.rand(200)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c=(x + y), cmap='RdPu')

scatter принимает аргумент c, которыйможет быть числовым значением, а также аргументом cmap, который может быть строкой, ссылающейся на colormap.

Объект colormap преобразует числа, представленные в c, в точки вдоль цветакартографирование, которое вы можете рассматривать как градиентный бар.

Использование трехмерных осей
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(5, 5))
ax = Axes3D(fig)

ax.scatter(x, y, (x + y))

Это превращает ваше 3-е измерение, точность, в обычное пространственное измерение.

Используйте размер маркеров

Очень похоже на опцию цвета в первой части, вы можете изменить размер маркеров разброса (если у вас есть представление о шкале значений),Таким образом, основываясь на первом примере, вы также можете сделать:

import numpy as np
from matplotlib import pyplot as plt

x = np.random.rand(200)
y = np.random.rand(200)

fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c='k', s=5*(x + y), cmap='RdPu')

scatter принимает также аргумент s, который изменяет размер маркеров.

1 голос
/ 21 марта 2019

Вы можете использовать цвет для построения третьего значения. Вот очень минимальный пример:

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

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
plt.scatter(x,y, c=z, s=5, cmap=cm.hsv)
cbar= plt.colorbar()
plt.show()

enter image description here


Редактировать

Вы также можете использовать размер маркеров, их прозрачность, значения оттенка или rgb, чтобы отобразить еще больше информации. Вот пример с размером маркера, альфа-уровнем и цветом на перцепционно однородной цветовой карте.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as colors
import matplotlib.cm as cmx

x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
t = np.random.rand(100)
w = np.random.rand(100)
fig, ax = plt.subplots(1, 1)
cmap = plt.get_cmap('plasma')
cNorm  = colors.Normalize(vmin=0, vmax=max(z))
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cmap)
for i in range(100):
    ax.scatter(x[i],y[i], c=scalarMap.to_rgba(z[i]), s=t[i]*100, cmap=cmx.plasma, alpha=w[i], edgecolor='none')
scalarMap.set_array([])
fig.colorbar(scalarMap,ax=ax)
for a in [0.1, 0.5, 0.9]:
    ax.scatter([], [], c='k', alpha=0.5, s=a*100, label=str(a), edgecolors='none')
l1 = ax.legend(scatterpoints=1, frameon=True, loc='lower left' ,markerscale=1)
for b in [0.25, 0.5, 0.75]:
    ax.scatter([], [], c='k', alpha=b, s=50, label=str(b), edgecolors='none')
ax.legend(scatterpoints=1, frameon=True, loc='lower right' ,markerscale=1)
fig.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...