Python 使用不均匀索引值绘制数据帧会创建扭曲的图形
我有一个数据框架,它由几个实验运行组成,在一个特定的建模行为上有不同的“x尺度”,即Python 使用不均匀索引值绘制数据帧会创建扭曲的图形,python,matplotlib,pandas,plot,Python,Matplotlib,Pandas,Plot,我有一个数据框架,它由几个实验运行组成,在一个特定的建模行为上有不同的“x尺度”,即 表达式1:xs=np.linspace(0.005,0.75,10) 表达式2:xs=np.linspace(0.015,0.035,20) 将这些数据组合到一个数据帧中进行处理就像是一个pd.concat一样简单,但我的困难在于绘制结果 ax=v.plot( figsize=(10,13),kind='line', secondary_y='average_rx_delay', logy=True, ti
- 表达式1:xs=np.linspace(0.005,0.75,10)
- 表达式2:xs=np.linspace(0.015,0.035,20)
pd.concat
一样简单,但我的困难在于绘制结果
ax=v.plot(
figsize=(10,13),kind='line',
secondary_y='average_rx_delay',
logy=True,
title="Performance Comparison of Varying Packet Period Rates \n(counts on left, seconds on right)"
)
#ax.set_xlabel('Packet Emmission rate (per second)')
ax.set_ylabel('Packet Count')
正如你所见,数据帧索引被用作你可以说的“系列标题”,但它没有被数字评估,导致不均匀和倾斜的线条
如果按条形图绘制,则更容易理解为什么会发生这种情况
我要找的是像下面这样的东西,但作为线
这是在漫长的道路上缓慢产生的
f, ax1 = plt.subplots()
ax1.scatter(list(v.index),
v.collisions, c='r')
ax1.scatter(list(v.index),
v.tx_counts, c='b')
ax1.scatter(list(v.index),
v.rx_counts, c='g')
ax1.scatter(list(v.index),
v.enqueued, c='y')
ax2=ax1.twinx()
ax2.scatter(list(v.index),
v.average_rx_delay, c='c')
基本上,我希望线条图将v.index
作为x轴值,但坚持使用实际数字
我曾尝试将x=v.index
添加到plot
调用中,以及将索引添加为另一列,并尝试以相同的方式使用新列,但这并不令人高兴
有什么神奇的想法吗?或者我应该开始走漫长的杂乱无章的DIY之路吗
更新
根据@ajean的问题,这就是所选数据的样子。请注意,PER
是上面提到的x=v.PER
尝试的“再次添加”索引列,但它被主.plot
正确地丢弃
看起来您的索引被用作分类输入。您可以尝试df.column\u name=df.column\u name.astype(float)。我是根据这个答案来回答的。如果您想要线而不是点,那么您应该使用plot而不是scatter 我有点困惑,
v.index
是什么样子的?您指出它被用作“系列名称”,但在我看来,这些是列。您的两个x-scale在数据框中的位置?@ajean更新为包含数据视图。基本上,当使用DataFrame绘图时,它似乎忽略了索引可能是数字的而不是简单的分类的想法。长话短说,我在寻找0.015和0.035之间的“直线”,因为所有有趣的事情都发生在这里。嗯。您的第一个绘图示例没有使用x=v.PER
,因此它应该放弃该选项,这很好。也许可以检查一下你有什么类型的索引(即,确保它是Float64Index
,或者它是否可以转换为分类索引)?我觉得plot()。如果您发布了一个数据帧的可粘贴副本,我可以对其进行测试。