【问题标题】:Not getting the proper graph comparison using Python没有使用 Python 获得正确的图形比较
【发布时间】:2018-06-26 02:26:30
【问题描述】:

我正在尝试比较并获得两个 CSV 文件之间的适当交点。为了更好地理解,我使用图表描述。
但与另一张图相比,我对一张图的印象非常差。
请参阅以下内容:

这是数据:trade-volume.csv
这是真实的图表:
这是数据:miners-revenue.csv
这是真实的图表:

这是我写的比较程序:

import pandas as pd
import matplotlib.pyplot as plt


dat2 = pd.read_csv("trade-volume.csv", parse_dates=['time'])
dat3 = pd.read_csv("miners-revenue.csv", parse_dates=['time'])


dat2['timeDiff'] = (dat2['time'] - dat2['time'][0]).astype('timedelta64[D]')
dat3['timeDiff'] = (dat3['time'] - dat3['time'][0]).astype('timedelta64[D]')

fig, ax = plt.subplots()

ax.plot(dat2['timeDiff'], dat2['Value'])
ax.plot(dat3['timeDiff'], dat3['Value'])

plt.show()

我得到如下输出:

正如人们所看到的,橙色图表非常低,我无法理解这些点,因为它较低。我愿意重叠图表然后检查。

如果不需要更改,请帮助我使用我现有的代码实现它。

【问题讨论】:

  • 第二个数据集的值似乎比第一个低得多,所以这就是您的图表向您显示的内容。
  • @DanielF 感谢您让我更具体地理解这个问题。但是,如果我希望图表与上面 2 幅图像中显示的值完全一致,而不管这些值……这可行吗?
  • 您可以根据@DavidG 做一个辅助 y 轴,但如果您正在寻找“交叉点”,该方法可能不会显示您正在寻找的内容。在这种情况下,您所说的“交叉点”是什么意思?
  • @DanielF 是的,它以相同的颜色显示两个图表

标签: python csv matplotlib graph


【解决方案1】:

问题归结为您的 y 轴。一个最多有 60,000,000,而另一个最多有 6,000,000,000。尝试将这些绘制在同一张图上会导致一条“看起来”像一条直线,即使放大后它不是。

一种可能的解决方案是使用第二个 y 轴(您可以使用 ax.plot() 中的 color= 参数更改线条的颜色:

import pandas as pd
import matplotlib.pyplot as plt

dat2 = pd.read_csv("trade-volume.csv", parse_dates=['time'])
dat3 = pd.read_csv("miners-revenue.csv", parse_dates=['time'])

dat2['timeDiff'] = (dat2['time'] - dat2['time'][0]).astype('timedelta64[D]')
dat3['timeDiff'] = (dat3['time'] - dat3['time'][0]).astype('timedelta64[D]')

fig, ax = plt.subplots()

ax.plot(dat2['timeDiff'], dat2['Value'], color="blue")

ax2=ax.twinx()
ax2.plot(dat3['timeDiff'], dat3['Value'], color="red")

plt.show()

【讨论】:

  • 它有效,但我得到了相同的颜色---蓝色.. 看图片:ibb.co/b8Ls2R
  • ax.plot() 中使用color= 参数。我会更新我的答案
【解决方案2】:

这两种数据都存在于非常不同的规模上。您可以将两者归一化以进行比较。

import pandas as pd
import matplotlib.pyplot as plt


dat2 = pd.read_csv("trade-volume.csv", parse_dates=['time'])
dat3 = pd.read_csv("miners-revenue.csv", parse_dates=['time'])


dat2['timeDiff'] = (dat2['time'] - dat2['time'][0]).astype('timedelta64[D]')
dat3['timeDiff'] = (dat3['time'] - dat3['time'][0]).astype('timedelta64[D]')

fig, ax = plt.subplots()

ax.plot(dat2['timeDiff'], dat2['Value']/dat2['Value'].values.max())
ax.plot(dat3['timeDiff'], dat3['Value']/dat3['Value'].values.max())

plt.show()

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多