Python 通过pandas绘图界面使用颜色栏进行分组散点图

Python 通过pandas绘图界面使用颜色栏进行分组散点图,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,当我从pandas(如中所述)绘制分组散点图时,第二个组需要包含一个颜色栏,我得到一个错误TypeError:您必须首先为mappable设置\u数组 这是因为cmap仅在c是浮点数组时使用。但是,它是独立的,可以完美地工作,并且数据不会在创建两个轴对象之间进行操作 以下是我正在使用的代码: import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.DataFrame(np.random.ran

当我从pandas(如中所述)绘制分组散点图时,第二个组需要包含一个颜色栏,我得到一个错误
TypeError:您必须首先为mappable设置\u数组

这是因为
cmap
仅在
c
是浮点数组时使用。但是,它是独立的,可以完美地工作,并且数据不会在创建两个轴对象之间进行操作

以下是我正在使用的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

# this works stand-alone
#df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues')

# why does this break?
ax = df.plot(kind='scatter', x='D', y='E', color='red', label='Other group')
df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', ax=ax)
plt.show()
两个组应显示在一个绘图中。注意,在绘制A、B和C列之前,绘制D列和E列对我来说很重要,因此后者需要在第二个图中。反之亦然,但我的要求,它打破了

有人知道如何解决这个问题并获得期望的结果吗


提前谢谢

与绘图顺序相反。我认为颜色栏正在混淆应用于哪个图表。因此,我们尝试先用颜色条绘制,然后在顶部应用红色散射

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

# this works stand-alone
#df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues')

# why does this break?
# ax = df.plot(kind='scatter', x='D', y='E', color='red', abel='Other group')
ax = df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', zorder=10)
df.plot(kind='scatter', x='D', y='E', color='red', label='Other group', ax=ax, zorder=1)
plt.show()
输出:

使用zorder


与绘图顺序相反。我认为颜色栏正在混淆应用于哪个图表。因此,我们尝试先用颜色条绘制,然后在顶部应用红色散射

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

# this works stand-alone
#df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues')

# why does this break?
# ax = df.plot(kind='scatter', x='D', y='E', color='red', abel='Other group')
ax = df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', zorder=10)
df.plot(kind='scatter', x='D', y='E', color='red', label='Other group', ax=ax, zorder=1)
plt.show()
输出:

使用zorder:


熊猫似乎对内部制作色条感到困惑。但是,您始终可以使用matplotlib创建颜色栏

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

ax = df.plot(kind='scatter', x='D', y='E', color='red', label='Other group')
df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', ax=ax, colorbar=False)
ax.figure.colorbar(ax.collections[1])   # Note the index 1, which stands
                                        # for second scatter in the axes.
plt.show()

熊猫似乎对内部制作色条感到困惑。但是,您始终可以使用matplotlib创建颜色栏

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

ax = df.plot(kind='scatter', x='D', y='E', color='red', label='Other group')
df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', ax=ax, colorbar=False)
ax.figure.colorbar(ax.collections[1])   # Note the index 1, which stands
                                        # for second scatter in the axes.
plt.show()

在单机版中,两个图形使用的不是相同的
ax
。两个图形分别绘制。在有问题的情况下,您试图使用
ax
在同一个图形中绘制这两个图形。期望的输出是什么?两个单独的图或一个带有两个单独图的单独图,如下面的答案所示!我会详细说明我的问题!在单机版中,两个图形使用的
ax
不同。两个图形分别绘制。在有问题的情况下,您试图使用
ax
在同一个图形中绘制这两个图形。期望的输出是什么?两个单独的图或一个带有两个单独图的单独图,如下面的答案所示!我会详细说明我的问题!谢谢你的帮助。正如我所提到的,我需要在A、B和C列之前绘制D和E。或者在结果方面,A、B和C的标记必须“覆盖”D和E的标记。是否有可能获得此结果?请尝试
zorder
参数。请参阅更新的解决方案。看matplotdocs和完美
zorder
是关键词,你救了我一天;-)谢谢!谢谢你的帮助。正如我所提到的,我需要在A、B和C列之前绘制D和E。或者在结果方面,A、B和C的标记必须“覆盖”D和E的标记。是否有可能获得此结果?请尝试
zorder
参数。请参阅更新的解决方案。看matplotdocs和完美
zorder
是关键词,你救了我一天;-)谢谢!谢谢!我已经接受了另一个答案,因为这是第一个答案,它仍然包含colorbar标签,没有附加代码。非常感谢!我接受了另一个答案,因为这是第一个答案,它仍然包含colorbar标签,没有附加代码。。