Python 使用Matplotlib在两个y轴上绘制多条直线

Python 使用Matplotlib在两个y轴上绘制多条直线,python,matplotlib,Python,Matplotlib,我试图在两个y轴上绘制具有不同范围的多个特征。每个轴可能包含多个特征。下面的代码段包括对象“Prin Balances”,它是一个df,包含按日期索引的浮动数据类型。“拖欠状态”是包含主要余额列标题子集的列表 Delinquent_States = ['1 Mos','2 Mos','3 Mos','> 3 Mos'] fig, ax = plt.subplots() plt.plot(Prin_Balances['UPB'], '--r', label='UPB') plt.legend

我试图在两个y轴上绘制具有不同范围的多个特征。每个轴可能包含多个特征。下面的代码段包括对象“Prin Balances”,它是一个df,包含按日期索引的浮动数据类型。“拖欠状态”是包含主要余额列标题子集的列表

Delinquent_States = ['1 Mos','2 Mos','3 Mos','> 3 Mos']
fig, ax = plt.subplots()
plt.plot(Prin_Balances['UPB'], '--r', label='UPB')
plt.legend()
ax.tick_params('Bal', colors='r')

# Get second axis
ax2 = ax.twinx()
plt.plot(Prin_Balances[Delinquent_States],  label=Delinquent_States)
plt.legend()
ax.tick_params('vals', colors='b')
我的输出需要清理,尤其是图例

欢迎任何建议

简单到:

import pandas
import matplotlib.pyplot as plt
import random

# Generate some random data
df = pandas.DataFrame({'a': [random.uniform(0,0.05) for i in range(15)], 
                       'b': [random.uniform(0,0.05) for i in range(15)], 
                       'c': [random.uniform(0.8,1) for i in range(15)],
                       'd': [random.uniform(0.8, 1) for i in range(15)],
                       'e': [random.uniform(0.8, 1) for i in range(15)]})
plt.plot(df)
返回:

不过,我建议将它们分开绘制:

fig, ax = plt.subplots(nrows=2,ncols=1)
plt.subplot(2,1,1)
plt.plot(df['a'], 'r', label='Line a')
plt.legend()

plt.subplot(2,1,2)
plt.plot(df['b'], 'b', label='Line b')
plt.legend()
其中包括:

增加:

可以为绘图的每一侧设置不同的比例:

fig, ax = plt.subplots()
plt.plot(df['a'], '--r', label='Line a')
plt.plot(df['b'], '--k', label='Line b')
plt.legend()
ax.tick_params('vals', colors='r')

# Get second axis
ax2 = ax.twinx()
plt.plot(df['c'], '--b', label='Line c')
plt.plot(df['d'], '--g', label='Line d')
plt.plot(df['e'], '--c', label='Line e')
plt.legend()
ax.tick_params('vals', colors='b')
不是最漂亮的,但你明白了


您可以在一张图像中绘制所有内容,但是0到0.05之间的线条当然会与其他线条相距太远。最好的方法是绘制两个子图。是的,但如何在同一个具有2轴的图形上绘制具有不同范围的多条线(根据我的问题)?你的例子很有用,但不要回答我的问题——除非我遗漏了什么?好了。看看这是否是您正在寻找的@GPBAlmost-如何在每个轴上绘制具有不同颜色的多条线?那么,这不是代码正在做的吗?每个轴都指一条线。红线按最左边的轴缩放,蓝线按最右边的轴缩放。我认为你的问题是修辞性的?:-)。我在问题中添加了一个更新,我不知道如何使用列表标记多行的图例。