如何实现对数据帧的Linecollection来用不同的颜色为一行着色?

时间:2019-10-06 11:02:02

标签: python-3.x matplotlib colors line-plot

我需要根据情况用不同的颜色线绘制子图。 为此,我尝试使用LineCollection。但是对于我的数据,我会收到错误消息,无法找到如何对我的数据使用它的方法。我与这个堆栈堆叠在一起,有人可以给我提示如何使其工作。

我的数据接下来显示:

age_gps_data ref_station_id river_km    
1.0     2421.0          667.5144925407869   
0.5     2421.0          667.5144592533758   
1.0     2421.0          667.5144249505418   
0.5     2421.0          667.5143958295257   
1.0     2421.0          667.5143629441299   
0.5     2421.0          667.5143266152246   
1.0     2.0     667.5142970594003   
0.5     2.0     667.5142580343961   
1.0     2.0     667.5142211073334   
0.5     2.0     667.5141878187346   

我尝试此解决方案,但出现错误:

 filename = "G:\\ais_evaluation\\track_AIS_2route.csv"
 df2 = pd.read_csv(filename, delimiter=';')

 segments = []
 color = np.zeros(shape=(10,4))
 x = df2['river_km'].tolist()
 y = df2['age_gps_data'].tolist()

 i = 0
 z = df2.ref_station_id

 for x1, y1, x2, y2 in zip(x, x[1:], y, y[1:]):

    if z == 2.0:
       color[i] = colors.to_rgba('Crimson')
    else:
        color[i] = colors.to_rgba('slategray')
    segments.append([(x1, y1), (x2, y2)])
    i += 1 

 lc = mc.LineCollection(segments, colors=color, linewidths=2)
 fig, ax = pl.subplots()
 ax.add_collection(lc)
 ax.autoscale()
 ax.margins(0.1)
 pl.show()     

我遇到此错误:

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(

如何根据参数ref_station_id改进此代码以使用不同的颜色实现river_km vs age_gps_data行? 我是python新手,不胜感激。

1 个答案:

答案 0 :(得分:1)

您的问题来自if z == 2.0:行。 z是熊猫系列df2.ref_station_id),因此不能等于2.0。

我没有完全遵循您代码的逻辑,所以我不能肯定地告诉您该怎么做,但是看起来您需要像{{1一样,同时遍历z的值}}和x,并测试y而不是z本身的后续值是否等于2.0

例如:

z

编辑,下面是一个完整的功能代码:

for x1, y1, x2, y2, z0 in zip(x, x[1:], y, y[1:], z):
    if z0 == 2.0:
    (...)

enter image description here