更改绘图的 x 轴
change x-axis of a plot
我正在尝试将 2015-2020 年的前 25 周内经过的车辆可视化全部放在一张图表中(每年一条曲线)。
df_data_groups = df_data[(df_data['week']<=25)].groupby(['year','week'])
df_data_weekly = df_data_groups[['NO','nr_of_vehicles']].mean()
fig, ax = plt.subplots()
bp = df_data_weekly['nr_of_vehicles'].groupby('year').plot(ax=ax)
以下是我得到的
x轴不对。它不应该包含年份,只包含星期,但我不知道如何正确解决这个问题。它也不允许我创建一个图例来显示哪些线属于线的颜色,使用:
bp.set_legend()
显示的索引是组中最后一个数据帧的索引。该数据框有一个 2 级索引:年和周。删除第一个索引(年份)将只显示星期:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df_data = pd.DataFrame({'year': np.repeat(np.arange(2015, 2021), 52),
'week': np.tile(np.arange(1, 53), 6),
'nr_of_vehicles': 200_000 + np.random.randint(-9_000, 10_000, 52 * 6).cumsum()})
df_data_groups = df_data[(df_data['week'] <= 25)].groupby(['year', 'week'])
df_data_weekly = df_data_groups[['nr_of_vehicles']].mean()
fig, ax = plt.subplots()
for year, df in df_data_weekly['nr_of_vehicles'].groupby('year'):
df.reset_index(level=0, drop=True).plot(ax=ax, label=year)
ax.legend()
ax.margins(x=0.02)
plt.show()
PS:请注意,在问题的代码中,bp
是一个轴列表,每年一个 ax
。在这种情况下,它们都指向同一个 ax
。 bp
被组织为 pandas 系列,要获得图例,请获取轴之一:bp[2015].legend()
(或 bp.iloc[0].legend()
)。
我正在尝试将 2015-2020 年的前 25 周内经过的车辆可视化全部放在一张图表中(每年一条曲线)。
df_data_groups = df_data[(df_data['week']<=25)].groupby(['year','week'])
df_data_weekly = df_data_groups[['NO','nr_of_vehicles']].mean()
fig, ax = plt.subplots()
bp = df_data_weekly['nr_of_vehicles'].groupby('year').plot(ax=ax)
以下是我得到的
x轴不对。它不应该包含年份,只包含星期,但我不知道如何正确解决这个问题。它也不允许我创建一个图例来显示哪些线属于线的颜色,使用:
bp.set_legend()
显示的索引是组中最后一个数据帧的索引。该数据框有一个 2 级索引:年和周。删除第一个索引(年份)将只显示星期:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df_data = pd.DataFrame({'year': np.repeat(np.arange(2015, 2021), 52),
'week': np.tile(np.arange(1, 53), 6),
'nr_of_vehicles': 200_000 + np.random.randint(-9_000, 10_000, 52 * 6).cumsum()})
df_data_groups = df_data[(df_data['week'] <= 25)].groupby(['year', 'week'])
df_data_weekly = df_data_groups[['nr_of_vehicles']].mean()
fig, ax = plt.subplots()
for year, df in df_data_weekly['nr_of_vehicles'].groupby('year'):
df.reset_index(level=0, drop=True).plot(ax=ax, label=year)
ax.legend()
ax.margins(x=0.02)
plt.show()
PS:请注意,在问题的代码中,bp
是一个轴列表,每年一个 ax
。在这种情况下,它们都指向同一个 ax
。 bp
被组织为 pandas 系列,要获得图例,请获取轴之一:bp[2015].legend()
(或 bp.iloc[0].legend()
)。