正值和负值的不同颜色的散点图

Scatter Plot with different color for positive and negative values

这是我的问题

这是我的两个 DataFrame 的示例(我实际上有 30 列)

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.DataFrame({"Marc":[6,0,8,-30,-15,0,-3],
                   "Elisa":[0,1,0,-1,0,-2,-4],
                   "John":[10,12,24,-20,7,-10,-30]})

df1 = pd.DataFrame({"Marc":[8,2,15,-12,-8,0,-35],
                   "Elisa":[4,5,7,0,0,1,-2],
                   "John":[20,32,44,-30,15,-10,-50]})

我想创建一个具有两种不同颜色的散点图: 如果 df1 的分数为负,则为 1 种颜色;如果为正,则为一种颜色,但我真的不知道该怎么做。

我已经使用 matplotlib 做到了

plt.scatter(df,df1);

我也检查了这个 link 但问题是我有两个 Pandas Dataframe 而不是这个 link 上的 numpy 数组。因此我不能使用 c= np.sign(df.y) 方法。 我想保留 Pandas DataFrame,因为我有很多专栏,但我确实坚持了这一点。

如果有人有解决方案,欢迎您!

您可以传入颜色数组,但它似乎只适用于一维数组:

# colors as stated
colors = np.where(df1<0, 'C0', 'C1')

# stack and ravel to turn into 1D
plt.scatter(df.stack(),df1.stack(), c=colors.ravel())

输出: