从具有负值和正值的熊猫数据框中绘制

我有一个如下所示的数据框:


MM Initial Energy   MM Initial Angle    QM Energy   QM Angle

0   13.029277   120.0   18.048  120.0

1   11.173115   125.0   15.250  125.0

2   9.411475    130.0   12.668  130.0

3   7.762888    135.0   10.309  135.0

4   6.239025    140.0   8.180   140.0

5   4.853004    145.0   6.286   145.0

6   3.617394    150.0   4.633   150.0

7   2.544760    155.0   3.226   155.0

8   1.646335    160.0   2.070   160.0

9   0.934298    165.0   1.166   165.0

10  0.419003    170.0   0.519   170.0

11  0.105913    175.0   0.130   175.0

12  0.000000    -180.0  0.000   -180.0

13  0.105988    -175.0  0.130   -175.0

14  0.420029    -170.0  0.519   -170.0

15  0.937312    -165.0  1.166   -165.0

16  1.650080    -160.0  2.070   -160.0

17  2.548463    -155.0  3.227   -155.0

18  3.621227    -150.0  4.633   -150.0

19  4.856266    -145.0  6.286   -145.0

20  6.236939    -140.0  8.180   -140.0

21  7.760035    -135.0  10.309  -135.0

22  9.409117    -130.0  12.669  -130.0

23  11.170671   -125.0  15.251  -125.0

24  13.033293   -120.0  18.048  -120.0

我想用 x 轴上的角度和 y 轴上的能量来绘制数据。这听起来很简单,但是会发生什么是 pandas 或 matplotlib 以我的情节看起来分裂的方式对 X 轴值进行排序。这是它的样子:

http://img3.mukewang.com/633eb7ba0001320606130389.jpg

但是,这就是我想要的:

http://img1.mukewang.com/633eb7c300011ea706440389.jpg

我的代码如下:


df=pd.read_fwf('scan_c1c2c3h31_orig.txt', header=None, prefix='X')


df.rename(columns={'X0':'MM Initial Energy',

                          'X1':'MM Initial Angle',

                          'X2':'QM Energy', 'X3':'QM Angle'}, 

                 inplace=True)


df=df.sort_values(by=['MM Initial Angle'], axis=0, ascending=True)

df=df.reset_index(drop=False)


df2=pd.read_fwf('scan_c1c2c3h31.txt', header=None, prefix='X')

df2.rename(columns={'X0':'MM Energy',

                          'X1':'MM Angle',

                          'X2':'QM Energy', 'X3':'QM Angle'}, 

                 inplace=True)


墨色风雨
浏览 66回答 1
1回答

Helenr

如果您不需要重新调整绘图,我会根据正角绘图0-360并手动重新标记刻度:fig, ax = plt.subplots()(df.assign(Angle=df['MM Initial Angle']%360)   .plot(x='Angle', y=['QM Energy','MM Initial Energy'], ax=ax))ax.xaxis.set_major_locator(MultipleLocator(20))x_ticks = ax.get_xticks()x_ticks = [t-360 if t>180 else t for t in x_ticks]ax.set_xticklabels(x_ticks)plt.plot()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python