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

5

我想绘制具有不同范围的多个特征在两个y轴上。每个轴可能包含多个特征。下面的代码片段包括对象“Prin Balances”,它是一个包含按日期索引的float数据类型的df。“Delinquent States”是包含Prin Balances列标题子集的列表。

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')

我的输出需要进行清理,特别是图例。

输入图像描述

欢迎任何建议。


你可以将所有内容绘制在一个图像中,但是从0到0.05的线条显然会与其他线条相距太远。最好的方法是绘制两个子图。 - Vinícius Figueiredo
1个回答

14

就这么简单:

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)

返回:

Plots

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

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')
不是最漂亮的,但你明白重点。

在此输入图片描述


是的,但如何在同一张图上使用2个轴绘制具有不同范围(根据我的问题)的多条线? 您的示例很有用,但并没有回答我的问题 - 除非我漏掉了什么? - GPB
几乎 - 我如何在每个轴上绘制不同颜色的多条线? - GPB
那不就是代码在做的事情吗?每个轴都指代一条线。红线根据最左边的轴进行缩放,蓝线则根据最右边的轴进行缩放。 - Carlo Mazzaferro
我猜你的问题是修辞性的?:-)。我已经更新了我的问题,但我无法弄清如何使用列表为多条线标记图例。 - GPB
好的,事实证明这比预期的要容易。检查编辑,希望现在它能正常工作。 - Carlo Mazzaferro
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接