matplotlib colorbar for scatter

时间:2011-05-19 19:28:33

标签: python colors matplotlib

我正在使用数据有3个绘图参数的数据:x,y,c。如何为散点图创建自定义颜色值?

扩展此example我正在尝试:

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

但结果为TypeError: You must first set_array for mappable

3 个答案:

答案 0 :(得分:157)

来自散点1上的matplotlib文档:

  仅当c是浮点数组

时才使用

cmap

所以colorlist需要是一个浮点数列表,而不是你现在拥有的元组列表。 plt.colorbar()想要一个可映射的对象,比如plt.scatter()返回的CircleCollection。 然后vmin和vmax可以控制颜色条的限制。 vmin / vmax以外的东西得到端点的颜色。

这对你有什么用?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

Image Example

答案 1 :(得分:2)

如果您希望分散两个变量并按第三个颜色分散颜色,Altair可能是一个很好的选择。

创建数据集

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

Altair情节

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

剧情

enter image description here

答案 2 :(得分:0)

这里the OOP way添加了一个颜色栏:

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)