Matplotlib中用不同颜色绘制误差线

4
我有以下代码,可以生成一个包含垂直和水平误差条的简单图表:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pylab as pl
import matplotlib.pyplot as plt

x=[2,3]
error_x=[0.5,0.4]
y=[25,28]
error_y=[0.6,0.8]
lines={'linestyle': 'None'}
plt.rc('lines', **lines)
pl.plot(x, y, 'ro', markersize=6)
pl.errorbar(x, y, xerr=error_x, yerr=error_y, fmt='b')
pl.xlim(1.3,3.6)
pl.ylim(24.0,29.0)
pl.show()

然而,两个误差条(垂直和水平)都是蓝色的,我不知道如何指定它们的不同颜色。这是可能的吗?例如,我希望所有水平误差条都是蓝色的,所有垂直误差条都是绿色的。


1
相关:https://dev59.com/QnLYa4cB1Zd3GeqPZpmL - ImportanceOfBeingErnest
2个回答

7

使用ecolor关键字:

import pylab as pl
import matplotlib.pyplot as plt

x=[2,3]
error_x=[0.5,0.4]
y=[25,28]
error_y=[0.6,0.8]
lines={'linestyle': 'None'}
plt.rc('lines', **lines)
pl.plot(x, y, 'ro', markersize=6)
el = pl.errorbar(x, y, xerr=error_x, yerr=error_y, fmt='b', ecolor='yellow')
pl.xlim(1.3,3.6)
pl.ylim(24.0,29.0)
pl.show()

输出:

在此输入图像描述

每个柱子和每种方向的不同颜色线条:

import pylab as pl
import matplotlib.pyplot as plt

x=[2,3]
error_x=[0.5,0.4]
y=[25,28]
error_y=[0.6,0.8]
lines={'linestyle': 'None'}
plt.rc('lines', **lines)
pl.plot(x, y, 'ro', markersize=6)
el = pl.errorbar(x, y, xerr=error_x, yerr=error_y, fmt='b', ecolor=['yellow','blue'])
elines = el.get_children()
elines[1].set_color('green')
pl.xlim(1.3,3.6)
pl.ylim(24.0,29.0)
pl.show()

输出:

在此输入图片描述


(注:该内容为HTML代码,翻译后格式不变)

哇,太棒了!但是为什么会出现这个错误?“ValueError:to_rgba:无效的rgba arg“['yellow','blue']”rgba序列的长度应该是3或4” - Wild Feather
你的图表上有两个以上的误差条吗?你可能需要创建一个包含不同数据的更长列表。 - Scott Boston
尝试回到单一的颜色,看看是否有效。el = pl.errorbar(x, y, xerr=error_x, yerr=error_y, fmt='b', ecolor='red') - Scott Boston
1
可能是matplotlib版本问题吗?我使用的是“2.1.0”。 - Scott Boston
1
我刚发现另一种方法,适用于较旧版本的Python,并将其发布为答案。在Python 3中,您的方法也很好用。再次感谢! - Wild Feather
显示剩余6条评论

3

对于使用较旧版本matplotlib的人来说,另一个“技巧”是:

import pylab as pl
import matplotlib.pyplot as plt

x=[2,3]
error_x=[0.5,0.4]
y=[25,28]
error_y=[0.6,0.8]
lines={'linestyle': 'None'}
plt.rc('lines', **lines)
pl.plot(x, y, 'ro', markersize=6)
pl.errorbar(x, y, xerr=error_x, yerr=0, fmt='b', ecolor='b')
pl.errorbar(x, y, xerr=0, yerr=error_y, fmt='g', ecolor='g')
pl.xlim(1.3,3.6)
pl.ylim(24.0,29.0)
pl.show()

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