pandas 更改条形图中的轴x刻度

pnwntuvh  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(139)

我发现自己在用条形图绘制一个数据框架,我称之为barras,它包含了从2017年到2022年的数据。每个月都有3列数据命名为% PRINCIPAL, % APORTES y % E。我希望能够绘制自2009年以来的条形图,即使没有数据。并且只有每个月的第一个月和第六个月出现在x轴标签上,但是我做不到。
这是 Dataframe :

% PRINCIPAL  % APORTES       % ΔE
FECHA                                     
2017-03    25.974253  42.430129  31.595618
2017-04   131.728602  27.057582 -58.786184
2017-05   144.069530  17.564611 -61.634142
2017-06   116.492102  25.948196 -42.440299
2017-07    95.677079  42.383666 -38.060745
             ...        ...        ...
2022-05    86.728444  46.208640 -32.937084
2022-06    87.980394  58.643608 -46.624002
2022-07    73.873644  53.591839 -27.465483
2022-08    72.113597  44.375137 -16.488734
2022-09    52.777619  79.301887 -32.079506

这是我的代码来做这个图形:

barras = pd.concat([I['% PRINCIPAL'],I['% APORTES'],I['% ΔE']], axis=1)
barras.index = pd.to_datetime(barras.index).strftime('%Y-%m')
barras.plot(kind="bar",stacked=True, color = ['b','g','r'], edgecolor='black', width=1, alpha=0.77, figsize=(16,8))
plt.title('PORCENTAJES DE CAUDAL EN TRAMO I')
plt.ylabel("Caudal (%)")
plt.xlabel('Fecha')
plt.legend(loc='best')
plt.savefig("BLOQUE I.png", bbox_inches="tight", dpi=160)

结果:

我想要同样的图表,但从2009年开始,并与x轴标签每六个月。
我想得到这样的东西(我已经用Photoshop做了):

zqry0prt

zqry0prt1#

您可以将您的 Dataframe 与另一个包含您感兴趣的其余日期的 Dataframe 连接起来,然后绘制该 Dataframe 。

# Create dummy data 
dates = pd.date_range('2/2017', '8/2022', freq='M')
values = np.random.uniform(-100, 100, (len(dates), 3))
barras = pd.DataFrame(values, columns=['% PRINCIPAL',  '% APORTES', '% ΔE'], index=dates)

# Create new dataframe with 0s for dates starting from 2009
add_dates = pd.date_range('1/2009', barras.index[-1] + pd.DateOffset(months=-1), freq='M')
df_0 = pd.DataFrame(0, columns=['% PRINCIPAL',  '% APORTES', '% ΔE'], index=add_dates)

# Concatenate everything into a single dataframe
barras = pd.concat([df_0, barras])

# Plot
fig, ax = plt.subplots(1,1, figsize=(16,8))
df_sliced = barras.loc[barras.index.month.isin([1,6])]
df_sliced.set_index(df_sliced.index.strftime('%Y-%m')).plot(
    kind="bar",
    stacked=True,
    color = ['b','g','r'],
    edgecolor='black',
    width=1,
    alpha=0.77,
    ax=ax
    )

plt.title('PORCENTAJES DE CAUDAL EN TRAMO I')
plt.ylabel("Caudal (%)")
plt.xlabel('Fecha')
plt.legend(loc='best')
plt.savefig("BLOQUE I.png", bbox_inches="tight", dpi=160)

相关问题