gpt4 book ai didi

python-2.7 - 使用 python bokeh.palettes 的多线图

转载 作者:行者123 更新时间:2023-12-03 10:04:46 24 4
gpt4 key购买 nike

我试图在下面的代码中为列表“w”的长度绘制折线图。当我使用 Bokeh 中的 spectral11 时,我得到的只是图表上的 11 行,其中列表包含 24 个参数。有没有其他调色板可以让我绘制列表“w”中的所有行

#Import the library
import pandas
import bokeh
import MySQLdb
from bokeh.plotting import figure, output_file, show
from bokeh.palettes import Spectral11


w=['F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','G1','G2','G3','G4','G5','G6','G7','G8','G9','G10','G11','G12']

p = figure(plot_width=800, plot_height=500, x_axis_type="datetime")
p.title.text = 'Click on legend entries to hide the corresponding lines'
# Open database connection
db = MySQLdb.connect("localhost","user","password","db" )

在下面的 for 循环中,只形成了 11 个数据帧,最终绘制了这 11 条线。

for name, color in zip(w, Spectral11):
stmnt='select date_time,col1,w,test_value from db where w="%s"'%(name)
df=pandas.read_sql(stmnt,con=db)

p.line(df['date_time'], df['test_value'], line_width=2, color=color, alpha=0.8, legend=name)

p.legend.location = "top_left"
p.legend.click_policy="hide"

output_file("interactive_legend.html", title="interactive_legend.py example")

show(p)

下面是代码的结果图 the resultant image of the above code

最佳答案

问题是 zip 在较短列表的末尾截断了。

In [1]: from bokeh.palettes import Spectral11

In [2]: w=['F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','G1','G2','G3','G4','G5','G6','G7','G8'
...: ,'G9','G10','G11','G12']

In [3]: for name, color in zip(w, Spectral11):
...: print(name, color)
...:
F1 #5e4fa2
F2 #3288bd
F3 #66c2a5
F4 #abdda4
F5 #e6f598
F6 #ffffbf
F7 #fee08b
F8 #fdae61
F9 #f46d43
F10 #d53e4f
F11 #9e0142

选择比您的 w 列表更长的调色板可以解决这个问题(正如@PabloReyes 提到的)。您也可以使用 itertools.cycle .

In [4]: import itertools

In [5]: for name, color in zip(w, itertools.cycle(Spectral11)):
...: print(name, color)
...:
F1 #5e4fa2
F2 #3288bd
F3 #66c2a5
F4 #abdda4
F5 #e6f598
F6 #ffffbf
F7 #fee08b
F8 #fdae61
F9 #f46d43
F10 #d53e4f
F11 #9e0142
F12 #5e4fa2
G1 #3288bd
G2 #66c2a5
G3 #abdda4
G4 #e6f598
G5 #ffffbf
G6 #fee08b
G7 #fdae61
G8 #f46d43
G9 #d53e4f
G10 #9e0142
G11 #5e4fa2
G12 #3288bd

您可能还想使用 line_dash争论。

In [6]: import bokeh.plotting
...: import numpy as np
...: import pandas as pd
...:
...: bokeh.plotting.output_file('cycle_demo.html')
...: lines = np.random.random((100, len(w))) + np.arange(24)
...: df = pd.DataFrame(lines)
...: df.columns = w
...:
...: line_dash_styles = [[10, 0], [20, 1], [10, 1], [5, 1]]
...: p = bokeh.plotting.figure()
...: for name, color, line_dash in zip(w, itertools.cycle(Spectral11), itertools.cycle(line_dash_styles)):
...: p.line(np.arange(100), df[name], color=color, legend=name, line_dash=line_dash)
...:
...: p.legend.location = "top_left"
...: bokeh.plotting.show(p)
...:

enter image description here

关于python-2.7 - 使用 python bokeh.palettes 的多线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43326784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com