研究这个,我找到了使用迭代器和循环绘制n
数据集的答案。
有没有办法在不使用循环的情况下完成?
我有一个数组odata
,其中包含n
列。第一列是横坐标。我想绘制其余部分。
我有一行代码如下:
plt.plot(odata[:,0],odata[:,1:],'-')
这是情节,但我想添加自己的颜色和标签。怎么样?
答案 0 :(得分:0)
您可以使用Line2D的返回值访问创建的plt.plot
个对象,并根据该列表直接设置legend:
labels = ['a', 'b', 'c']
lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
plt.legend(lines, labels)
标签和行的数量不一定必须匹配。如果行数较少,则某些标签将被闲置。如果标签较少,则某些行将不标记。 Here是文档中的图例指南。
要无缝更改颜色的顺序,您需要通过文档中的matplotlib.rc
示例中的this在全局配置中设置循环器,或使用面向对象的API执行你的密谋。然后,您可以在各个轴上使用set_prop_cycle
,而无需弄乱全局设置。
以下是按照个人偏好增加的顺序设置颜色循环仪的三种方法。请注意,我只是在这里展示如何设置颜色,但您也可以控制线条样式的顺序以及其他属性:
设置全局配置:
import matplotlib as mpl
from matplotlib import cycler
from matplotlib import pyplot as plt
labels = ['a', 'b', 'c']
colors = ['r', 'g', 'b']
mpl.rc('axes', prop_cycle=cycler('color', ['r', 'g', 'b', 'y']))
lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
plt.legend(lines, labels)
设置全局配置,但使用rc_context
上下文管理器对您的绘图进行有效的更改:
import matplotlib as mpl
from matplotlib import cycler,rc_context
from matplotlib import pyplot as plt
labels = ['a', 'b', 'c']
colors = ['r', 'g', 'b']
with rc_context(rc={'axes.prop_cycle': cycler('color', ['r', 'g', 'b', 'y'])}):
lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
plt.legend(lines, labels)
首先使用面向对象的API设置绘图,并仅将更改应用于您实际要修改的Axes:
from matplotlib import pyplot as plt
labels = ['a', 'b', 'c']
colors = ['r', 'g', 'b']
fig, ax = plt.subplots()
ax.set_prop_cycle('color', colors)
ax.plot(odata[:, 0], odata[:, 1:], '-')
ax.legend(labels)
我建议将面向对象的API作为一般规则,特别是在独立脚本中,因为它提供了更大的灵活性,并且在准确了解将要操作的对象方面也很清晰。