Python 绘制多个标记,同一行
我有一个df:Python 绘制多个标记,同一行,python,python-2.7,pandas,matplotlib,Python,Python 2.7,Pandas,Matplotlib,我有一个df: 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 你如何: 使用matplotlib.pyplot绘制直线(t1,c_1) 并以特定样式(例如绿色)标记线上(c_
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
你如何:
实现这一点的“常用”方法是什么?假设您有以下数据帧:
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
如果下面的情节是你想要的
它可以使用以下代码生成:
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()
@斯普林特,你对stackoverflow的很多问题都不清楚。很明显,列时间下的t1表示时间(即日期时间,而不是字符串),并且
plt.plot(df['c_1'])
是一个有效的操作,可以根据时间绘制值。如果没有,执行df.reset_index()
的建设性建议将很有帮助。是否有理由将df索引从日期时间索引中重置?如果我想在绘图上显示日期时间,我是否正确地绘图(时间,值)并传递一个有效的(时间,值)坐标标记,它将获得与上述相同的结果?我没有从任何其他位置重置任何内容。因为你们并没有共享任何实际的数据帧,所以我需要发明一个。我现在懂技术了。谢谢分享!