【问题标题】:Plotting Parallel Coordinates in pandas with different colours在不同颜色的熊猫中绘制平行坐标
【发布时间】:2015-04-22 16:20:45
【问题描述】:

我有一个这样的数据框:

    0   1   2   3   4   5   6   7   8   9   Cluster
0   0.018420    0.003357    0.002626    -0.015603   -0.009005   -0.023671   -0.016316   0.066504    -0.039526   0.037820    For
1   0.017684    0.003434    -0.003338   -0.003904   -0.021871   -0.009454   -0.013772   -0.004610   -0.006150   -0.005746   For
2   0.018857    0.003987    0.001749    -0.019840   0.011184    -0.020451   0.082434    -0.008789   0.000449    0.005445    Against
3   0.020454    0.026437    0.036899    0.027168    -0.018483   -0.001076   0.005831    -0.002117   -0.011288   0.007491    For
4   0.018006    0.005365    0.001298    -0.006953   0.017034    0.006931    0.000268    0.001615    0.016707    -0.017798   Against

Df.columns
Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, u'Cluster'], dtype='object')

最后一列“cluster”指定观察属于“For”集群还是“Against”集群。

我想绘制一个图,以使“支持”的所有观察结果都是相同的颜色,而“反对”的所有观察结果都是相同的颜色。有 2740 个 obs,因此还需要一些线条透明度以提供更好的可视化效果。

我做了以下操作,但即使我指定颜色选项,它也会为两个类绘制相同的红色。

parallel_coordinates(Y_embed,'Cluster',color=["r" if c=="For" else "g" for c in Y_embed.Cluster])

Y_embed 是我的数据框。

如果我没有提到颜色选项,它会默认绘制两种颜色。但我想放上我自己的颜色选项。

有什么建议吗?

【问题讨论】:

    标签: python numpy pandas matplotlib


    【解决方案1】:

    color 参数只是一个颜色列表,每个集群使用一种颜色,而不是每行使用一种颜色。您可以为一个集群绘制绿色图,为另一个集群绘制洋红色图,如下所示:

    parallel_coordinates(data,'Cluster',color=['g','m'])
    

    要使线条透明,您可以为colors 使用rgba 值。

    parallel_coordinates(data,'Cluster',color=[[1,0,0,0.2],[0,1,0,0.9]])
    

    这里第一组是红色的,部分透明,第二组是绿色,大部分是不透明的。

    【讨论】:

    • 知道如何让线条变得有点透明,因为我有很多线条吗?其次,即使在我上面的解决方案中,我也是说将一个集群设为红色(“For”),将其他集群设为绿色(“Against”)。所以它用“For”作为红色进行所有观察,从而给出单独的类。不知道为什么它不这样做
    • 查看我的编辑。我不明白你的第二个问题。
    • 如果我尝试这个我得到错误:IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean array are有效索引
    【解决方案2】:

    您可以通过在每种情况下使用不同的值重复调用 parallel_coordinates 来控制线条的透明度,例如

    lowColorList=["k","k","y","y"]
    midColorList=["c","b","g"]
    topColorList=["r"]
    
    plt.close()
    plt.gcf().clear()    
    fig, ax = plt.subplots()
    
    parallel_coordinates(lowDf, "Cat",color=lowColorList, alpha=0.1)
    
    parallel_coordinates(midDf, "Cat", color=midColorList, alpha=0.4)
    
    parallel_coordinates(topDf, "Cat", color=topColorList, alpha=0.9)
    # remove the pandas legend
    plt.gca().legend_.remove()
    
    plt.xlabel("Each Component of X is Shown on its Own Vertical Axis")
    plt.ylabel("Values")
    plt.title("Finding the Optimal Value of X")
    # add new legend
    topHandle =    mlines.Line2D([],[], color='red',   ls="-", label="Best")
    midHandleOne = mlines.Line2D([],[], color='blue',  ls="-", label="Next Best")
    lowHandle =    mlines.Line2D([],[], color='black', ls="-", label="Worst")
    plt.legend(handles=[topHandle, midHandleOne,lowHandle],loc=1, prop={'size':10})
    

    在情节中,实际上有 8 个类别,但为了使图例易于管理,我将其中一些映射到相同的颜色。

    另外,请注意,pandas 按照遇到类别的顺序从颜色列表中分配颜色,因此如果一组行中有多个颜色,则需要使用 pandas.DataFrame.sort_values (...) 在您的类别变量上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多