【问题标题】:matplotlib scatter plot colour as function of third and fourth variablematplotlib 散点图颜色作为第三个和第四个变量的函数
【发布时间】:2015-07-30 02:48:30
【问题描述】:

有什么方法可以让我的散点图使用两个变量来设置颜色? IE。 a 设置蓝色级别,b 设置红色级别?类似这样的东西:

import pylab
import numpy
x = numpy.random.random(50)
y = numpy.random.random(50)
a = numpy.random.random(50)
b = numpy.random.random(50)
s = pylab.scatter(x,y,c='red' * a + 'blue'*b)
pylab.colorbar(s)
pylab.show()

【问题讨论】:

  • pylab.scatter(x,y,c=zip(a, b, numpy.zeros(50)))?
  • 太棒了!这对我有用。您将如何为此制作两个颜色条?
  • 您希望这两个颜色条表示什么?在 falsetru 的示例中,点的颜色在两个维度上共同变化(“红色”和“绿色”)。您可以伪造单独的“红色”和“绿色”颜色条,但大多数点都是不同深浅的棕色,不会出现在任何一个颜色条上。您也许可以绘制二维颜色空间,x 轴为红色,y 轴为绿色。

标签: python numpy matplotlib gradient


【解决方案1】:

扩展 falsetru 的答案,您可以使用 imshow 制作二维颜色条:

import numpy as np
from matplotlib import pyplot as plt
x = np.random.random(50)
y = np.random.random(50)
a = np.random.random(50)
b = np.random.random(50)
s = c=zip(a, b, np.zeros(50))
ax = plt.gca()
print ax.get_position()
plt.scatter(x,y,c = s)
#adjust limits to make room for inset axes
plt.xlim(xmax = 1.5)
plt.ylim(ymax = 1.5)
#create inset axes
ax = plt.axes([.7, .675, .2, .2], axisbg='y')
n = 20
red = np.linspace(min(a), max(a), n)
green = np.linspace(min(b), max(b), n)
floats = np.linspace(0, 1, n)
#make arrays of all possible values between 0 and 1
X, Y = np.meshgrid(floats, floats)
#stack the arrays with a third array of zeros
Z = np.dstack((X, Y, np.zeros(X.shape)))
Z = np.rot90(Z)
red = np.round(red[::-1], 2)
green = np.round(green, 2)
plt.imshow(Z)
ticks = np.arange(0, n, 6)
plt.yticks(ticks, [red[i] for i in ticks])
plt.xticks(ticks, [green[i] for i in ticks], rotation = 'vertical')
plt.xlabel('Green')
plt.ylabel('Red')
plt.show()

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多