Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用不均匀索引值绘制数据帧会创建扭曲的图形_Python_Matplotlib_Pandas_Plot - Fatal编程技术网

Python 使用不均匀索引值绘制数据帧会创建扭曲的图形

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

我有一个数据框架,它由几个实验运行组成,在一个特定的建模行为上有不同的“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,
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()。如果您发布了一个数据帧的可粘贴副本,我可以对其进行测试。