在重叠图上从x轴移除日期matplotlib

时间:2016-01-12 23:19:27

标签: python pandas matplotlib plot

我正在尝试使用matplotlib和pandas显示代表努力量的时间序列线。

我的所有DF都覆盖在一个图中,但是当我做python时似乎剥离了日期的x轴并输入了一些数字。 (我不确定这些来自哪里,但猜测,并非所有日子都包含相同的数据,因此python已恢复使用索引ID号)。如果我绘制其中任何一个,他们会在x轴上找到日期。

任何使x轴显示多个图的日期的提示或解决方案都将非常受欢迎。

这是带时间轴的单个数字图: single figure plot with time axis

我用来绘制的代码是

fig = pl.figure()
ax = fig.add_subplot(111)
ax.plot(b342,color='black')
ax.plot(b343,color='blue')
ax.plot(b344,color='red')
ax.plot(b345,color='green')
ax.plot(b346,color='pink')
ax.plot(fi,color='yellow')
plt.show()

这是具有奇怪x轴的多图阴影: multiple plots without time axis

2 个答案:

答案 0 :(得分:0)

我找到了一个能够满足我想要的答案,似乎调用plt.plot并没有使用日期作为x轴,但是使用pandas文档调用它就可以了。

ax = b342.plot(label='342')
b343.plot(ax=ax, label='test')
b344.plot(ax=ax)
b345.plot(ax=ax)
b346.plot(ax=ax)
fi.plot(ax=ax)

enter image description here plt.show()

我想知道是否有人知道hwo在这里更改标签?

答案 1 :(得分:0)

一种选择是根据DataFrame索引手动指定x轴,然后使用matplotlib直接绘图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# make up some data
n = 100
dates = pd.date_range(start = "2015-01-01", periods = n, name = "yearDate")

dfs = []

for i in range(3):
    df = pd.DataFrame(data = np.random.random(n)*(i + 1), index = dates,
                      columns = ["FishEffort"] )
    df.df_name = str(i)
    dfs.append(df)

# plot it directly using matplotlib instead of through the DataFrame
fig = plt.figure()
ax = fig.add_subplot()

for df in dfs:
    plt.plot(df.index,df["FishEffort"], label = df.df_name)

plt.legend()
plt.show()

enter image description here

另一种选择是使用Pandas连接您的DataFrames和plot。如果你给你的" FishEffort"在加载数据时或通过DataFrame.rename填写正确的标签名称,然后将自动指定标签。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n = 100
dates = pd.date_range(start = "2015-01-01", periods = n, name = "yearDate")

dfs = []

for i in range(3):
    df = pd.DataFrame(data = np.random.random(n)*(i + 1), index = dates,
                      columns = ["DataFrame #" + str(i) ] )
    df.df_name = str(i)
    dfs.append(df)

df = pd.concat(dfs, axis = 1)
df.plot()

enter image description here