在Bokeh Timeseries图中,如何指定line_width?

时间:2015-04-08 23:59:49

标签: python time-series bokeh

    ts1 = TimeSeries(
        xyvalues1, index='Time', legend=True,
        title="RSSI and PER", tools=TOOLS, xscale='datetime', xlabel = 'time', ylabel='Rx Power (dB)', width = 1800, height = 300)


    ts2 = TimeSeries(
        xyvalues2, index='Time', legend=True,
        title="EVM", tools = TOOLS, xscale='datetime', xlabel = 'time', ylabel='EVM (dB)', width = 1800, height= 300)
    ts2.x_range = ts1.x_range
    ts2.y_range = ts1.y_range

在上面的代码中,如何指定ts1和ts2的行宽?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题。由于Stack Overflow不是跟踪此类改进和讨论的最佳位置,我建议您在bokeh github项目中向bokeh mailing listopen an issue打开此类问题或讨论: - )

在一些first discussions关于该接口的问题中,在bokeh.charts接口(例如TimeSeries)中添加对stile Charts的支持的想法已经出现了一些。但是现在(对于散景0.8.2)它还不支持。我相信它可以在不久的将来成为bokeh.charts的一部分,但由于它仍然是非常实验性的,我们首先关注的是让这个界面“正确”。

处理渲染器创建图表的图表的特定部分未公开,因此您不能只告诉TimeSeries您想要的行宽,但您可以创建自己的TimeSeries构建器和工厂函数来执行您想要的操作。像这样的东西(:

from bokeh.charts._builder import create_and_build
from bokeh.charts.builder.timeseries_builder import TimeSeriesBuilder
from bokeh.models import ColumnDataSource, DataRange1d, GlyphRenderer, Range1d
from bokeh.models.glyphs import Line
from bokeh.charts.utils import chunk, cycle_colors

class CustomTSBuilder(TimeSeriesBuilder):
    def _yield_renderers(self):
        """Use the line glyphs to connect the xy points in the time series.
        Takes reference points from the data loaded at the ColumnDataSource.
        """
        self._duplet = list(chunk(self._attr, 2))
        colors = cycle_colors(self._duplet, self.palette)

        for i, (x, y) in enumerate(self._duplet, start=1):
            glyph = Line(x=x, y=y, line_color=colors[i - 1], line_width=3)
            renderer = GlyphRenderer(data_source=self._source, glyph=glyph)
            self._legends.append((self._groups[i-1], [renderer]))
            yield renderer

def CustomTimeSeries(values, index=None, xscale='datetime', **kws):
    return create_and_build(
        CustomTSBuilder, values, index=index, xscale=xscale, **kws
    )

注意:请注意,此代码适用于当前版本,但在将来的开发版或官方版本中可能不受支持。