我想将一个额外的参数传递给import numpy as np
import pandas as pd
from bokeh.layouts import row, widgetbox
from bokeh.models import CustomJS, Slider, Select
from bokeh.plotting import figure, output_file, show, ColumnDataSource
from bokeh.io import push_notebook, output_notebook, curdoc
from bokeh.client import push_session
output_notebook()
#create sample pandaframe to work with, this will store the actual data
a = np.arange(50).reshape((5,10))
labels = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
val_a = pd.DataFrame(a, columns=labels )
# Here is a dict of some keys that I want to be able to pick from for plotting
axis_map = {
"A": "A",
"B": "B",
"C": "C"
}
#This is to update during the callback
code = ''' var data = val_a;
var val1 = x_axis.value;
var val2 = y_axis.value;
x = data['val1'];
y = data['val2'];
source.trigger('change');
print x
'''
source = ColumnDataSource(data=dict(x=[], y=[]))
callback = CustomJS(args=dict(source=source), code=code)
#Create two select widgets to pick the features of interest
x_axis = Select(title="X Axis", options=sorted(axis_map.keys()), value="A", callback = callback)
callback.args["val1"] = x_axis
y_axis = Select(title="Y Axis", options=sorted(axis_map.keys()), value="B", callback = callback)
callback.args["val2"] = y_axis
#plot the figures
plot = figure(plot_width=400, plot_height=400)
plot.circle(x= "x",y="y", source=source, line_width=3, line_alpha=0.6)
#update the plot
def update():
x_name = axis_map[x_axis.value]
y_name = axis_map[y_axis.value]
plot.xaxis.axis_label = x_axis.value
plot.yaxis.axis_label = y_axis.value
print x_name
print val_a[x_name]
source.data = dict(
x=val_a[x_name],
y=val_a[y_name],
)
controls = [ x_axis, y_axis]
for control in controls:
control.on_change('value', lambda attr, old, new: update())
update()
push_notebook()
#Display the graph in a jupyter notebook
layout = row(plot, x_axis, y_axis)
show(layout, notebook_handle=True)
并打印两次,例如
printf
有没有办法做到这一点?
答案 0 :(得分:15)
如果您使用的是Linux或其他类似UNIX的系统,则可以使用printf("%1$s%1$s\n", "hello");
指定参数编号:
1$
在此示例中,printf("%*d", width, num);
表示"使用第一个参数"。我们也多次使用这种语法,因此我们可以使用一次给定的参数。
Linux man page for printf
提供了更多详细信息:
参数必须与(在类型提升后)正确对应 转换说明符。默认情况下,参数在订单中使用 给出,每个' *'并且每个转换说明符都要求下一个 参数(如果参数不足,则会出错 给出)。还可以明确指定采用哪个参数 每个需要论证的地方,写着"%m $"代替 '%'和" m $"而不是' ',其中十进制整数m表示 在索引的所需参数的参数列表中的位置 从1开始。
printf("%2$*1$d", width, num);
和
Label B;
是等价的。第二种风格允许重复引用 同样的论点。 C99标准不包括使用' $'的样式, 它来自Single UNIX Specification。如果样式使用' $' 如果使用,它必须在所有转换中使用 参数和所有宽度和精度参数,但它可能是混合的 用" %%"不使用参数的格式。可能没有 使用' $'指定的参数数量的差距;例如,如果 如果指定了参数1和3,则还必须指定参数2 格式字符串中的某处。