我试图用matplotlib.pytplot绘制一个线图,并有一个形状为(42,7)
的三角形框架df。三角形框架具有以下结构(仅显示相关列):
timepoint value point
2021-01-01 10 0
2021-02-01 20 0
....
2021-11-01 10 0
2021-12-01 50 1
2022-01-01 60 1
...
我尝试用以下方式绘制条件颜色(每个point=0的值是蓝色,每个point=1的值是红色):
import numpy as np
col = np.where(df['point'] == 0, 'b', 'r')
plt.plot(df['timepoint'], df['value'], c=col)
plt.show()
我得到错误消息:
ValueError:阵列('b ',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' b','b',' r','r',' r','r',' r','r',' r','r',' r','r',' r','r',' r','r',' r','r',' r','r',' r','r','r'],dtype='<U1')不是颜色的有效值
当我看这个问题ValueError: Invalid RGBA argument: What is causing this error?时,我没有找到任何解决方案,因为我的颜色数组的形状是:col.shape
是(42, )
2条答案
按热度按时间8nuwlpux1#
我不认为你可以在这里使用
np.where
来定义你的线图的颜色(就像他们用here定义散点图一样),因为在前者中,c
参数期望整条线都是一种颜色,而在后者中,你可以提供一个颜色数组来Map到点。所以,这里有一个可能的选择来解决这个问题:
或者使用
pivot
/plot
:输出量:
2ekbmq322#
您遇到的错误是因为plt.plot()函数中的c参数期望每个数据点的有效颜色规范,但您提供的颜色名称数组('b'表示蓝色,'r'表示红色)不是c参数的有效值。
要绘制线图的条件颜色,您可以使用循环遍历DataFrame行,并使用所需的颜色绘制每个线段。以下是您如何做到这一点(使用示例框架):
我们也可以使用
np.where
方法。我们可以使用plt.scatter
来实现,如下面的代码:这是更新后的代码,用于创建线条图,但使用循环来区分颜色:
你可以查看我的kaggle here