Matplotlib Colorbar 缺少 1 个必需的位置参数 : 'mappable'

标签 matplotlib scatter-plot python-3.8 colorbar

我想为下面的数据框创建一个散点图:

df_sample.head(10)

    duration  distance speed
0   26.299999   3.569   8.1
1   6.000000    0.739   7.4
2   25.700001   2.203   5.1
3   34.400002   2.876   5.0
4   3.000000    0.656   13.1
5   29.299999   3.704   7.6
6   10.200000   2.076   12.2
7   4.000000    0.774   11.6
8   9.200000    1.574   10.3
9   10.800000   0.782   4.3

使用下面的代码几乎可以完成它。我想根据速度(黄色:最慢和蓝色:最快)向图中添加颜色条,最终我在最后一行的 fig.colorbar(ax=ax) 处出错。请指教:什么是mappable

with plt.style.context('seaborn-ticks'):

    fig, ax = plt.subplots(figsize = (10, 6))

    ax.set_title('Relationship between Distance & Duration', fontdict={'fontsize': 18, 'fontweight': 'bold'}, loc='left', pad=20)
    ax.scatter(x=df_sample.duration.values, y=df_sample.distance.values, c=df_sample.speed.values, cmap=cm.YlGnBu)

    # remove top & right spines
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)

    # equivalent to 'sns.despine(offset = 5)'
    ax.spines['left'].set_position(('outward', 5))
    ax.spines['left'].set_linewidth(1.2)
    ax.spines['bottom'].set_position(('outward', 5))
    ax.spines['bottom'].set_linewidth(1.2)
    
    # set ticks & ticklabels
    xloc = np.arange(0, 45, 5)
    ax.set_xticks(xloc)
    ax.set_xticklabels(labels=xloc, fontdict={'fontsize': 12})
    ax.set_xlabel('Minute(s)', fontdict={'fontsize': 14, 'fontweight': 'bold'})
    
    yloc = np.arange(6)
    ylab = [f"{int(num)}" for num in yloc]
    ax.set_yticks(yloc)
    ax.set_yticklabels(labels=ylab, fontdict={'fontsize': 12})
    ax.set_ylabel("Distance (KM)" , fontdict={'fontsize': 14, 'fontweight': 'bold'})
    
    fig.colorbar(ax=ax);

enter image description here

最佳答案

您可以将散点图分配给一个变量,例如:

sp=ax.scatter(x=df_sample.duration.values, y=df_sample.distance.values, c=df_sample.speed.values, cmap=cm.YlGnBu)

然后将其作为 mappable object 传递到颜色栏:

fig.colorbar(sp)

关于Matplotlib Colorbar 缺少 1 个必需的位置参数 : 'mappable' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66318314/

相关文章:

pandas - 可视化 pandas 分组数据

matplotlib - 如何更改matplotlib中科学计数法的字体大小?

java - 在散点图上绘制作为 y 函数的二次曲线

d3.js - 如何在nvd3中禁用图例或限制其大小

windows - 从pip安装Meson会导致meson.py丢失

python - 具有 nan 值的同一图上的多个子图

python - 插值由其角节点已知的 3D 表面并使用颜色图对其着色

ios - Coreplot - 改变梯度的 alpha

python - 如何编码照片并将其与网络摄像头输入进行比较?

python - 使用 python 3.8 在 docker 中安装 scikit-learn