我试过其他线程,但无法解决。我正在尝试创建一个离散的颜色栏。许多代码似乎可以正常工作,但确实出现了离散条,但标签错误,并且引发了错误:“未找到可用于创建颜色条的可映射对象。首先定义一个可映射对象,例如图像(带有imshow)或轮廓集(带有轮廓f)。”
可以肯定的是,该错误是因为我在plt.colorbar中缺少一个参数,但是不确定它要求什么或如何定义它。
以下是我所拥有的。感激任何想法:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
norm = mpl.colors.BoundaryNorm(np.arange(-0.5,4), cmap.N)
ex2 = sample_data.plot.scatter(x='order_count', y='total_value',c='cluster', marker='+', ax=ax, cmap='plasma', norm=norm, s=100, edgecolor ='none', alpha=0.70)
plt.colorbar(ticks=np.linspace(0,3,4))
plt.show()
最佳答案
实际上,对colorbar
的第一个论点应该是ScalarMappable
,这将是散点图PathCollection
本身。
设定
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({"x" : np.linspace(0,1,20),
"y" : np.linspace(0,1,20),
"cluster" : np.tile(np.arange(4),5)})
cmap = mpl.colors.ListedColormap(["navy", "crimson", "limegreen", "gold"])
norm = mpl.colors.BoundaryNorm(np.arange(-0.5,4), cmap.N)
熊猫密谋
问题是熊猫无法直接为您提供对此
ScalarMappable
的访问。因此,可以从轴上的集合列表中捕获它,如果仅存在一个集合:ax.collections[0]
,这很容易。fig, ax = plt.subplots()
df.plot.scatter(x='x', y='y', c='cluster', marker='+', ax=ax,
cmap=cmap, norm=norm, s=100, edgecolor ='none', alpha=0.70, colorbar=False)
fig.colorbar(ax.collections[0], ticks=np.linspace(0,3,4))
plt.show()
Matplotlib绘图
可以考虑直接使用matplotlib绘制散点图,在这种情况下,您可以直接使用
scatter
函数的返回值作为colorbar
的参数。fig, ax = plt.subplots()
scatter = ax.scatter(x='x', y='y', c='cluster', marker='+', data=df,
cmap=cmap, norm=norm, s=100, edgecolor ='none', alpha=0.70)
fig.colorbar(scatter, ticks=np.linspace(0,3,4))
plt.show()
两种情况下的输出是相同的。
关于python - 在matplotlib中创建离散色条,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53360879/