【问题标题】:Pandas Dataframe Plotting with uneven index values creates skewed graphs具有不均匀索引值的 Pandas Dataframe Plotting 创建倾斜图
【发布时间】:2014-11-25 01:27:00
【问题描述】:

我有一个数据框,其中包含多个实验运行,在特定建模行为上具有不同的“x 尺度”到归零,即

  • Exp1: xs = np.linspace(0.005,0.75,10)
  • Exp2: 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 正确丢弃。

【问题讨论】:

  • 我有点困惑,v.index 是什么样的?您表示它被用作“系列名称”,但在我看来这些是列。你的两个 x 尺度在 DataFrame 中的什么位置?
  • @ajean 更新为包含数据视图。基本上在使用 DataFrame 绘图时,它似乎忽略了索引可能是数字而不是简单分类的想法。长话短说,我正在寻找在 0.015 和 0.035 之间有更多细节的“直线”,因为这是所有有趣的事情都发生的地方。
  • 嗯。您的第一个绘图示例不使用x=v.PER,因此它应该丢弃它,这很好。也许检查你有什么样的索引(即确保它是Float64Index 或者它是否会转化为分类)?我觉得plot() 应该可以正常工作,除非你在 pandas 中遇到了错误。如果您发布可复制粘贴的数据框,我可以对其进行测试。

标签: python matplotlib pandas plot


【解决方案1】:

看起来您的索引被用作分类输入。你可以试试 df.column_name = df.column_name.astype(float)。我的答案基于Converting strings to floats in a DataFrame。如果你想要线而不是点,那么你应该使用绘图而不是散点图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2020-04-12
    • 2014-02-09
    • 2017-06-19
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多