matplotlib颜色条用于分散


89

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

扩展这个例子,我想做的是:

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

Answers:


196

来自散点图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()

图片范例


我尝试了一下'AxesSubplot' object has no attribute 'colorbar'。我做完了ax.colorbar()...我做错了什么?
卢卡斯·艾玛雷托

使用matplotlib OOP界面时,此示例未提供清晰的应用程序:matplotlib.org/gallery/api/agg_oo_sgskip.html
Ryszard Cetnarski

18

这是添加颜色条的OOP方法

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

完成此操作后,我将使图完全重新缩放,以使所有点都位于最右边图的一小部分之内,并且颜色条是一条横跨底部的非常细的线。
马西斯

plt我认为不建议使用正确的答案,直接使用它来绘制颜色条。您的方式值得推荐。
GoingMyWay

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'])

牵牛星图

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

情节

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.