我试图在一张图中绘制来自两个不同数据框的两列。 我已经找到了将其绘制成一个的代码,但是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)
答案 0 :(得分:1)
一种可能的解决方案是根据数字索引绘制连接的数据框,并将刻度线设置为类别。
wilcox_test_matrix
# X0ct_perfusion_flow
# statistic 1198
# parameter NULL
# p.value 0.7225658
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# X0ipss
# statistic 1339
# parameter NULL
# p.value 0.5417935
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# X0oiief
# statistic 1206
# parameter NULL
# p.value 0.7642678
# null.value 0
# alternative "two.sided"
# method "Wilcoxon rank sum test with continuity correction"
# ...
答案 1 :(得分:0)
为什么不将两者串联?
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,因此您可以为每种颜色指定不同的颜色。
答案 2 :(得分:0)
不确定这是否完全是您想要的东西,但是这里有:
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列表中才能使其正确显示。