Pandas - 散点图 - cmap 标签的旋转

Pandas - scatter plot - rotation of cmap label

我正在通过 pandas 直接绘制简单的散点图。

我的数据框有 A、B、C 列。

我绘制 A 与 B 的关系图,并通过颜色可视化 C 值。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    %matplotlib inline

代码:

    ycol_label = 'B'
    xcol_label = 'A'
    
    f = df1.plot.scatter(x=xcol_label, y=ycol_label, c='C', cmap='coolwarm')
    
    h = plt.ylabel(ycol_label)
    h.set_rotation(0)
    type(f)

如何更改最右侧的 C 标签的方向?

我想旋转它并显示为 B 标签显示(在最左侧)。

我什至很难 google 因为我不知道这个 最右边的元素
被称为(带有冷暖色标的那个)。我基本上想旋转该元素的标签。

我不知道如何使用 pandas 绘图,但是使用普通的 matplotlib 绘图它是这样工作的:

x = np.random.random(50)
y = np.random.random(50)
c = np.arange(50)
fig, ax = plt.subplots()
f = ax.scatter(x, y, c=c, cmap='coolwarm')
cbar = plt.colorbar(f)

ax.set_xlabel('x axis')
ax.set_ylabel('y axis', rotation=0)
cbar.set_label('z axis', rotation=0)

输出:

---编辑---

这是pandas绘图版本:

x = np.random.random(50)
y = np.random.random(50)
c = np.arange(50)
df1 = pd.DataFrame({'a': x, 'b': y, 'c': c})
ycol_label = 'b'
xcol_label = 'a'

f = df1.plot.scatter(x=xcol_label, y=ycol_label, c='c', cmap='coolwarm')

ff = plt.gcf()
cax = ff.get_axes()[1]
cax.set_ylabel('test', rotation=0)

h = plt.ylabel(ycol_label)
h.set_rotation(0)

type(f)

输出:

另一种使用 pandas 和一些底层 matplotlib 对象的解决方案。

    x_column_label = 'A'
    y_column_label = 'B'
    
    color_column_label = 'C'
    
    ax = df1.plot.scatter(x=x_column_label, y=y_column_label, c=color_column_label, cmap='coolwarm', figsize=(12,6), s=80)
    
    print('================================================================================')
    
    # Here ax is the AxesSubplot object 
    print(ax)
    
    # Get the Figure object from the AxesSubplot object
    f = ax.get_figure()
    
    print(f)
    
    # Get the objects on the axis
    pc = ax.collections
    
    print(pc)
    
    print(len(pc))
    
    # Assumes the colorbar was plotted last 
    color_bar = pc[-1].colorbar
    color_bar.set_label(color_column_label, rotation=0)
    
    h = ax.set_ylabel(y_column_label, rotation=0)
    
    print(color_bar)
    
    print('================================================================================')