在绘制完x轴后,我们可以在Python绘图中对其进行排序吗?

在绘制完x轴后,我们可以在Python绘图中对其进行排序吗?,python,matplotlib,jupyter-notebook,Python,Matplotlib,Jupyter Notebook,我试图在一个图中绘制来自两个不同数据帧的两列。 我已经算出了在一个图中绘制它的代码,但是x轴需要以升序排列。在这种情况下我们可以这样做吗 df1=pd.DataFrame({ 'ID': ['A1','A2','A6','A7','A9'], 'F1_S': [23,75,42,77,54] }, columns=['ID', 'F1_S']) df2=pd.DataFrame({ 'ID': ['A3','A4','A5','A8'], 'F1_S': [66

我试图在一个图中绘制来自两个不同数据帧的两列。 我已经算出了在一个图中绘制它的代码,但是x轴需要以升序排列。在这种情况下我们可以这样做吗

df1=pd.DataFrame({ 'ID': ['A1','A2','A6','A7','A9'], 'F1_S': [23,75,42,77,54] },
                 columns=['ID', 'F1_S'])
df2=pd.DataFrame({ 'ID': ['A3','A4','A5','A8'], 'F1_S': [66,43,56,86] },
                 columns=['ID', 'F1_S'])
x1 = list(df1['ID'])
y1= list(df1['F1_S'])
lists1 = sorted(zip(*[x, y1]))
x1, y1 = zip(*sorted(zip(x1, y1)))

x2 = list(df2['ID'])
y2= list(df2['F1_S'])
lists2 = sorted(zip(*[x2, y2]))
x2, y2 = zip(*sorted(zip(x2, y2)))

plt.plot (x1,y1)
plt.plot(x2,y2)

为什么不将两者连接起来呢

pd.concat([df1[['ID', 'F1_S']], df2[['ID', 'F1_S']])\
  .sort_values(by='ID')\
  .plot(x='ID', y='F1_S')
编辑:要使它们成为在同一轴上绘制的独立线,请执行以下操作:

fig, ax = plt.subplots()
df1.sort_values(by='ID')\
   .plot(x='ID', y='F1_S', ax=ax)
df2.sort_values(by='ID')\
   .plot(x='ID', y='F1_S', ax=ax)

调用
df.plot
接受与
plt.plot
相同的KWARG,因此您可以为每个KWARG指定不同的颜色。

不确定这是否完全是您想要的,但如下所示:

import pandas as pd
import matplotlib.pyplot as plt


df1 = pd.DataFrame({'ID': ['A1', 'A2', 'A6', 'A7', 'A9'],
                    'F1_S': [23, 75, 42, 77, 54]},
                   columns=['ID', 'F1_S'])
df2 = pd.DataFrame({'ID': ['A3', 'A4', 'A5', 'A8'],
                    'F1_S': [66, 43, 56, 86]},
                   columns=['ID', 'F1_S'])

df1.set_index('ID', inplace=True)
df1.index.name = None
df1.columns = ['F1_S_1']
df2.set_index('ID', inplace=True)
df2.index.name = None
df2.columns = ['F1_S_2']
df = pd.concat([df1, df2], sort=True).sort_index().interpolate(limit_area='inside')
ax = df.plot()
ax.set_xticklabels(['A0'] + df.index.tolist())
plt.show()
结果是:


df.plot()
轴标签似乎有一个一个错一个错,我不得不在xlabel列表中插入一个伪元素以使其正确显示。

一个可能的解决方案是根据数字索引绘制连接的数据帧,并将刻度设置为类别

import matplotlib.pyplot as plt
import pandas as pd

df1=pd.DataFrame({ 'ID': ['A1','A2','A6','A7','A9'], 'F1_S': [23,75,42,77,54] },
                 columns=['ID', 'F1_S'])
df2=pd.DataFrame({ 'ID': ['A3','A4','A5','A8'], 'F1_S': [66,43,56,86] },
                 columns=['ID', 'F1_S'])
# Rename the column of one of the dataframe
df2 = df2.rename(columns={'F1_S' : 'F2_S'})
# Concatenate dataframes, reset the index (such that it will be numeric)
df3 = pd.concat([df1.set_index("ID"), df2.set_index("ID")], sort=True).sort_index().reset_index()

#Plot each column without nan values, against the numeric index
plt.plot(df3["F1_S"].dropna())
plt.plot(df3["F2_S"].dropna())
# Set labels to category names
plt.xticks(range(len(df3)), df3["ID"])
plt.show()

这样你就可以得到一条线而不是两条。我希望两种不同颜色的图形能够区分哪些点属于哪个数据框架更新后的代码正在用x=df1['ID'],y=df2['F1_S']而不是x=df2['ID'],y=df2['F1_S']@sobek绘制点,但轴标签不整齐,请仔细查看。另外,A8后面应该有一个A9