我有一个函数可以做一些绘图并返回一个轴对象:
def custom_plot(x, y, ax=None):
if ax is None:
ax = plt.gca()
ax.scatter(x, y)
return ax
ax = custom_plot(range(10), range(10))
colorbar(ax)
最后一行会抛出错误(应该如此)。 ax.get_children()
返回行对象的列表,因此不适合传递给colorbar。是否可以通过轴访问散射对象,或者是否有必要返回分散,例如, s = plot.scatter(x,y,);return ax, scatter
。
类似,但不是答案:
答案 0 :(得分:1)
抱歉,误解了这个问题。从源代码中,scatter函数似乎只返回一个路径集合,而不是以我注意到轴类的任何方式添加它。
根据情节的条件,最简单的方法就是将你的情节复制到颜色条指令中:
import matplotlib.pyplot as plt
def custom_plot(x, y, ax=None):
if ax is None:
ax = plt.gca()
ax.scatter(x, y, c = x)
return ax
x,y = range(10), range(10)
ax = custom_plot(x,y)
plt.colorbar(ax.scatter(x, y, c = x))
plt.show()
实际上,您正在从没有快捷变量的轴再现绘图。但是,它不是解决问题的理想方案。
注意:我会留下这篇文章,以防万一它可以帮到你。如果不告诉我,我会删除它。
原始帖子:
您可以为散点图本身创建一个变量,并将其用作参数。也就是说你也应该为颜色提供一个地图变量。以下示例改编自您的代码:
import matplotlib.pyplot as plt
def custom_plot(x, y, ax=None):
if ax is None:
ax = plt.gca()
axp = ax.scatter(x, y, c = x) # You have to give a map variable for the colorbar.
return ax,axp # also return the plot itself
ax,axp = custom_plot(range(10), range(10))
plt.colorbar(axp) # give the plot as argument to colorbar
plt.show()
,结果如下: