3

我目前正在尝试使用 matplotlibsplot_date函数绘制多个日期图。我无法弄清楚的一件事是如何自动为每个图形分配不同的颜色(就像plot在设置之后发生的axes.color_cycle那样matplotlib.rcParams)。示例代码:

import datetime as dt
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

values = xrange(1, 13)
dates = [dt.datetime(2013, i, 1, i, 0, 0, 0) for i in values]
mpl.rcParams['axes.color_cycle'] = ['r', 'g']
for i in (0, 1, 2):
    nv = map(lambda k: k+i, values)
    d = mdates.date2num(dates)
    plt.plot_date(d, nv, ls="solid")
plt.show()

这给了我一个很好的数字,其中有 3 条线,但它们都有相同的颜色。将调用更改plot_date为仅plot导致 3 行红色和绿色,但不幸的是 x 轴上的标签不再有用。

所以我的问题是,有没有什么方法可以让着色工作plot_date像刚才一样简单plot

4

3 回答 3

5

这个讨论中GitHub得出了一个解决这个问题的好方法:

ax.plot_date(d, nv, ls='solid', fmt='')

正如@tcaswell 解释的那样,这个函数是默认设置的,用户可以通过在调用时fmt='bo'传递参数来覆盖它。fmtplot_date()

这样做,结果将是:

在此处输入图像描述

于 2013-06-24T13:50:24.313 回答
0

这不是错误,而是设计选择。两者都有一个默认参数plt.date_plotaxes.date_plot将格式设置为bo.

请参阅https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes.py#L4145https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/pyplot.py #L2997

[在github上留下相同的评论]

唯一能plot_date为您做的事情plot是轴格式化程序的一些配置,您可以手动完成。

import datetime as dt
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


values = xrange(1, 13)
dates = [dt.datetime(2013, i, 1, i, 0, 0, 0) for i in values]
mpl.rcParams['axes.color_cycle'] = ['r', 'g', 'r']
ax = plt.subplot(111)
for i in (0, 1, 2):
    nv = map(lambda k: k+i, values)
    d = mdates.date2num(dates)

    ax.plot(d, nv, '-o')

ax.xaxis_date()
plt.gcf().tight_layout()
plt.show()
于 2013-06-23T18:48:27.733 回答
0

尽管您发现了可能的错误,但您可以解决该问题并创建如下图:

在此处输入图像描述

代码如下。基本上 aplot()是在 之后添加的plot_date()

values = xrange(1, 13)
dates = [dt.datetime(2013, i, 1, i, 0, 0, 0) for i in values]
mpl.rcParams['axes.color_cycle'] = ['r', 'g', 'r']
ax = plt.subplot(111)
for i in (0, 1, 2):
    nv = map(lambda k: k+i, values)
    d = mdates.date2num(dates)
    ax.plot_date(d, nv, ls='solid')
    ax.plot(d, nv, '-o')
plt.gcf().tight_layout()
plt.show()

请注意,另一个'r'是必需的,因为尽管没有显示,但颜色确实在循环plot_date(),如果没有这个,线条将是绿-红-绿。

于 2013-06-22T15:34:10.110 回答