54430


ある行に値とそのラベルがそれぞれ保存されているデータを折れ線グラフとして表示したいです。  
そのとき、値ごとに振られているラベルで色を分けて表示したいです。

下図は、作りたいグラフのイメージ図です。  
[![書きたいグラフのイメージ](https://i.stack.imgur.com/lBbPh.png)](https://i.stack.imgur.com/lBbPh.png)

横軸がデータのインデックス、縦軸がデータの値、線の色がデータのラベルという対応にしたいと考えています。  
このようなグラフを、PythonかRで作るとすれば、どのようにスクリプトを記述すればいいでしょうか?

参考にしたサイト  
[データの値で色を変える方法](https://matplotlib.org/2.0.2/examples/pylab_examples/multicolored_line.html)  
[散布図で色を変える方法](https://teratail.com/questions/130617)


CC BY-SA 4.0
2019-04-23T08:08:21.493
54425
2019-04-23T12:55:12.460
19500
question
python3 r matplotlib
ラベルによって色が変わる折れ線グラフを書きたい


以下Rとggplot2パッケージ(tidyverseパッケージに含まれる)による例です。

[code]

    library(tidyverse)
    
    dt <- data.frame(
      x = 1:4, 
      y = c(4, 2, 3, 4),
      label = c("a", "b", "a", "a"),
      stringsAsFactors = FALSE
    )
    
    print(dt)
    #>   x y label
    #> 1 1 4     a
    #> 2 2 2     b
    #> 3 3 3     a
    #> 4 4 4     a
    
    dt %>% 
      ggplot() + 
      # group = 1としておくことで1本の線としてつなげる
      # group optionを抜くとlabelごとに線が引かれます
      geom_line(aes(x = x, y = y, group = 1, colour = label))
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/0y5kq.png)](https://i.stack.imgur.com/0y5kq.png)


CC BY-SA 4.0
2019-04-23T11:29:34.757
54430
2019-04-23T11:29:34.757
33043
54425
answer


matplotlib であれば、こんな感じで書けます。

[code]

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.collections import LineCollection
    from matplotlib.colors import ListedColormap
    
    x = [1, 2, 3, 4]
    y = [4.3, 2.5, 3.5, 4.5]
    label = [0,1,0]
    
    cmap = ListedColormap(['b', 'r'])
    
    points = np.array([x, y]).T.reshape(-1,1,2)
    segments = np.concatenate([points[:-1], points[1:]], axis=1)
    lc = LineCollection(segments, cmap=cmap)
    lc.set_array(np.array(label))
    
    ax =  plt.subplot()
    ax.add_collection(lc)
    ax.set_xlim([1,4])
    ax.set_ylim([0,5])
    ax.grid(True)
    plt.show()
    
[/code]

[![出力結果](https://i.stack.imgur.com/85zlu.png)](https://i.stack.imgur.com/85zlu.png)


CC BY-SA 4.0
2019-04-23T12:55:12.460
54433
2019-04-23T12:55:12.460
24801
54425
answer