Python 以高分辨率绘制烛台-理解“;宽度“;参数

Python 以高分辨率绘制烛台-理解“;宽度“;参数,python,numpy,matplotlib,Python,Numpy,Matplotlib,我一直在使用烛台数据的教程,它们对每日图表很有效。然而,我猜,由于它们依赖matplotlib.finance candlestick函数的默认行为,因此在我的理解中,将其切换到日内时,我缺少了一些内容 我的数据如下所示(但我在调用finance.candlestick之前将日期/时间转换为数字) 我使用的代码(除去我所有的尝试)如下所示: fig = plt.figure(figsize=(10, 5)) ax = fig.add_axes([0.1, 0.2, 0.85, 0.7]) # c

我一直在使用烛台数据的教程,它们对每日图表很有效。然而,我猜,由于它们依赖matplotlib.finance candlestick函数的默认行为,因此在我的理解中,将其切换到日内时,我缺少了一些内容

我的数据如下所示(但我在调用finance.candlestick之前将日期/时间转换为数字)

我使用的代码(除去我所有的尝试)如下所示:

fig = plt.figure(figsize=(10, 5))
ax = fig.add_axes([0.1, 0.2, 0.85, 0.7])
# customization of the axis
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both', direction='out', width=2, length=8,
               labelsize=12, pad=8)
ax.spines['left'].set_linewidth(2)
ax.spines['bottom'].set_linewidth(2)

ax.set_ylabel('Quote ($)', size=20)

ax.xaxis.set_major_locator(fiveminutelocator)
ax.xaxis.set_minor_locator(oneminutelocator)

# candlestick call requires the following format:
#    (time, open, close, high, low, ...)
print(bars.to_records())
bars.index = bars.index.map(date2num)
candle_bars = bars[ ['open', 'close', 'high', 'low' ] ]
candle_bars = map(list, candle_bars.to_records())
finance.candlestick(ax, candle_bars, width=0.1, colorup='g', colordown='r')
plt.show()
结果图如下所示:

fig = plt.figure(figsize=(10, 5))
ax = fig.add_axes([0.1, 0.2, 0.85, 0.7])
# customization of the axis
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both', direction='out', width=2, length=8,
               labelsize=12, pad=8)
ax.spines['left'].set_linewidth(2)
ax.spines['bottom'].set_linewidth(2)

ax.set_ylabel('Quote ($)', size=20)

ax.xaxis.set_major_locator(fiveminutelocator)
ax.xaxis.set_minor_locator(oneminutelocator)

# candlestick call requires the following format:
#    (time, open, close, high, low, ...)
print(bars.to_records())
bars.index = bars.index.map(date2num)
candle_bars = bars[ ['open', 'close', 'high', 'low' ] ]
candle_bars = map(list, candle_bars.to_records())
finance.candlestick(ax, candle_bars, width=0.1, colorup='g', colordown='r')
plt.show()

编辑: 问题在于我不理解我收集的“figure.size”(以英寸为单位)“figure.dpi”与matplotlib中传递给Line2D和面片矩形的宽度参数之间的关系

我不太明白那种关系是如何运作的。较小的时间范围(即10毫秒条形图,总范围为10秒)要求finance.candlestick绘图的宽度很小(0.000005似乎可行)。较大范围的时间(日栏和月数据)可以使用默认宽度0.8


所以我不明白的是宽度是用什么来衡量的。它被描述为“点”。然而,在图中摆弄DPI似乎并没有达到我想要的效果。

看起来您正在绘制日期,但没有指定您正在使用日期(尽管您可能正在使用
oneminutelocator
,等等)。(尝试调用ax.xaxis_date())但是,宽度是以数据单位表示的,而不是以点表示的。(笔划宽度以点为单位,而不是矩形的宽度。)Matplotlib的内部日期格式只是一个浮点数,其中差1.0对应一天。因此,10毫秒的条形宽度应为~1e-7。谢谢Joe。。我已经经历了很多这样的反复。数据宽度。。我想这就足够让我解决问题了。当你说笔划宽度时,它包括线条和线条2D之类的吗?还是仅仅是字体?对于笔划(即
线宽
lw
kwarg),无论是哪种类型的艺术家,笔划总是以点为单位。如果您查看文档,它会给出笔划等的单位。文档中没有指定度量单位,这是因为它使用给定的任何单位(数据坐标,除非您另有指定)。一般来说,标记大小、笔划/线宽大小和字体大小以点为单位。(
scatter
的标记大小有点不同。)大多数其他东西都在数据坐标中,除非您提供自定义的
变换。