2017-04-02 6 views
-2

は私がDFを持っている:パンダPyplot複数のマーカー、同じライン

time c_1 c_2 c_3 
t1  v1 NaN t1 
t2  v2 NaN NaN 
t3  v3 t3  NaN 
t4  v4 NaN NaN 
t5  v5 t5  NaN 
t6  v6 NaN t6 

あなたを行う方法:(T1、C_1)ラインをプロットする

  1. 使用matplotlib.pyplot
  2. やマーク特定のスタイル(緑色)の行の(c_2)に対応するすべての点
  3. また、(c_3)のすべての点を別のスタイル(たとえば青色)の同じ行にマークします。
  4. は、読みやすくなるように、そして、マーカー(T1、T3)、T3、T6)と(T5、T6)

を接続するための点線を描く私はポイントへの質問に決裂したが、基本的にI pyplotにはまったく新しいものです。同じ構文で2つの異なるマーカーをスタイルする方法を見つけることはできません。私はまた、たとえそれが可能であれば、マーカーを操作する方法もあまりよく分かりません。

これを達成するための「通常の」方法は何ですか?

+0

@splinter、多くの質問stackoverflowであなたに不透明なようです。 Time列の** t1は時間(つまり文字列ではなくdatetime)**を表し、 'plt.plot(df ['c_1'])'は時間に対して値をプロットする有効な操作であることが明らかです。そうでない場合は、 'df.reset_index()'を実行するための建設的な提案が役に立ちます。 – Yeile

答えて

1

は、このデータフレームを持っていると仮定します

 c_1 c_2 c_3 time 
0 0.548814 NaN 1.0  1 
1 0.715189 NaN NaN  2 
2 0.602763 3.0 NaN  3 
3 0.544883 NaN NaN  4 
4 0.423655 5.0 NaN  5 
5 0.645894 NaN 6.0  6 

次のプロットは、あなたが

enter image description here

た後、それは次のコードを使用して製造することができるしているものである場合:

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(0) 

time = np.arange(1,7) 
c_1 = np.random.rand(6) 
c_2 = time*np.array([np.nan, np.nan, 1, np.nan, 1, np.nan]) 
c_3 = time*np.array([1, np.nan, np.nan, np.nan, np.nan, 1]) 

df = pd.DataFrame({"time":time, "c_1":c_1,"c_2":c_2,"c_3":c_3 }) 

ax = df.plot("time", "c_1") 
ax.plot(df["c_2"], df["c_1"], marker="s", color="limegreen", linestyle="") 
ax.plot(df["c_3"], df["c_1"], marker="o", color="crimson", linestyle="") 

# to be able to draw a line with coordinates 
# from two different columns, we need to join them 
df2 = df[["c_1","c_2"]].dropna() 
df3 = df[["c_1","c_3"]].dropna().rename(columns = {'c_3':'c_2'}, inplace = False) 
df4 = pd.concat([df2, df3]).sort_values(by=["c_2"]) 

ax.plot(df4["c_2"], df4["c_1"], color="burlywood", linestyle=":", lw=2.5) 

ax.set_xlim(0,7) 
plt.show() 
+0

dfインデックスをdatetimeインデックスからリセットする理由はありますか?プロットにdatetimeを表示する場合は、プロット(時間、値)し、有効な(時間、値)座標マーカーを渡して、上記と同じ結果が得られますか? – Yeile

+0

私は何か他のものから何かをリセットしませんでした。実際のデータフレームを共有していないので、私はそれを発明する必要がありました。 – ImportanceOfBeingErnest

+0

大丈夫です。私はこの技術を今理解しています。共有ありがとう! – Yeile

関連する問題