首页 > 解决方案 > 共享 y 轴的条形图和线形子图

问题描述

我正在尝试在水平子图中输出折线图和条形图并共享 y 轴,但我只能输出 1 但不能同时输出两者。

import pandas as pd 
import yfinance as yf  

df = yf.download('SPY',period='1y')[['Adj Close','Volume']] 

df['Bin'] = pd.cut(df['Adj Close'],bins=[200,225,250,275,300,325,350,375,400]) 
df_a = df.groupby('Bin')['Volume'].size().reset_index()
df_a['left'] =  df_a['Bin'].apply(lambda x: x.left)
df_a.set_index('left',inplace=True) 


fig, axes = plt.subplots(ncols=2, sharey=True)
df['Adj Close'].plot(ax=axes[0],kind='line') ## line 1 
df_a['Volume'].plot(ax=axes[1],kind='barh') ## line 2
  1. 如何使两个图(共享 y 轴)一起出现?(第一张图是我只有第 1 行时,第二张图是我有第 1 行和第 2 行时)
  2. 如何使线图具有更长的 x 轴

我尝试删除输出两个图形的“sharey=True”,但 y 轴未对齐。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: pandasmatplotlib

解决方案


df.plot(kind='barh')实际上根据范围索引绘制条形图,即range(len(df))重新标记轴刻度。您可以plt.barh改用:

fig, axes = plt.subplots(ncols=2, sharey=True)
df['Adj Close'].plot(ax=axes[0],kind='line') ## line 1 

# same height with bin width
axes[1].barh(df_a.index, df_a['Volume'], height=25) ## line 2

输出:

在此处输入图像描述


推荐阅读