ループを使用してデータをロードおよび/または変更し、Bokehを使用してループ内で結果をプロットします( Matplotlibのaxes.color_cycle
)。これは簡単な例です
import numpy as np
from bokeh.plotting import figure, output_file, show
output_file('bokeh_cycle_colors.html')
p = figure(width=400, height=400)
x = np.linspace(0, 10)
for m in xrange(10):
y = m * x
p.line(x, y, legend='m = {}'.format(m))
p.legend.location='top_left'
show(p)
このプロットを生成します
色のリストとモジュラス演算をコーディングせずに色を循環させて、色の数がなくなったときに繰り返すようにするにはどうすればよいですか?
これに関連してGitHubでいくつかの議論があり、 51 および 2201 が発行されますが、これをどのように機能させるかは明確ではありません。 cycle color
の- documentation を検索したときに得られた4つのヒットには、実際にはページのどこにもWord cycle
が含まれていませんでした。
色のリストを取得して、 itertools
を使用して自分で循環させるのがおそらく最も簡単です。
import numpy as np
from bokeh.plotting import figure, output_file, show
# select a palette
from bokeh.palettes import Dark2_5 as palette
# itertools handles the cycling
import itertools
output_file('bokeh_cycle_colors.html')
p = figure(width=400, height=400)
x = np.linspace(0, 10)
# create a color iterator
colors = itertools.cycle(palette)
for m, color in Zip(range(10), colors):
y = m * x
p.line(x, y, legend='m = {}'.format(m), color=color)
p.legend.location='top_left'
show(p)
2つの小さな変更により、Python 3。
変更:for m, color in Zip(range(10), colors):
事前:for m, color in itertools.izip(xrange(10), colors):
色を循環させる単純なジェネレーターを定義できます。
In python 3:
from bokeh.palettes import Category10
import itertools
def color_gen():
yield from itertools.cycle(Category10[10])
color = color_gen()
またはpython 2(または3):
from bokeh.palettes import Category10
import itertools
def color_gen():
for c in itertools.cycle(Category10[10]):
yield c
color = color_gen()
新しい色が必要なときは、次のことを行います。
p.line(x, y1, line_width=2, color=color)
p.line(x, y2, line_width=2, color=color)
上記の例を次に示します。
p = figure(width=400, height=400)
x = np.linspace(0, 10)
for m, c in Zip(range(10), color):
y = m * x
p.line(x, y, legend='m = {}'.format(m), color=c)
p.legend.location='top_left'
show(p)