使用多个滑块在 bqplt/jupyter 中创建动态图表
Using multiple sliders to create dynamic chart in bqplt/jupyter
我正在尝试绘制随投资组合权重变化而变化的动态投资组合表现
假设投资组合有 2 个组成部分,每个组成部分的权重为 50%。我想显示一个投资组合图表,其中包含代表组件权重的滑块。然后我希望能够滑动权重值并动态更新投资组合图表。
我已经为包含一个权重的投资组合完成了此操作,但无法弄清楚如何修改超过 1 个权重 - 也许我需要一种不同的方法。
下面的示例用 1 列的随机 df 代替我的投资组合 df - 过程应该相同。
就此示例而言,如果 df 有 2 列 - 我怎样才能使用控制每个权重的 2 个滑块工作?
from bqplot import DateScale, LinearScale, Axis, Figure, Lines
从 ipywidgets 导入 FloatSlider、VBox
将 pandas 导入为 pd
将 numpy 导入为 np
slider = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight A')
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = 轴(标签='Date', 刻度=x_sc, grid_lines='solid')
ax_y = 轴(标签='Price',比例=y_sc,方向='vertical',grid_lines='solid')
line = Lines(y=df['A'],x=df.index, 比例尺={'x': x_sc, 'y': y_sc}, 颜色 = ['#FF0000'])
line2 = 线(y=df['A'],x=df.index , 比例尺={'x': x_sc, 'y': y_sc})
fig = 图(axes=[ax_x, ax_y], marks=[line, line2], title='Price Chart')
def new_chart(值):
new_y = df[['A']]*slider.value
line.y = new_y
slider.observe(new_chart,'value')
VBox([图,滑块])
不确定我是否理解你的意思。你是这个意思吗?
from bqplot import DateScale, LinearScale, Axis, Figure, Lines
from ipywidgets import FloatSlider, VBox
import pandas as pd
import numpy as np
slider = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight A')
sliderB = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight B')
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
df['B'] = np.random.randint(0,100,size=(100, 1))
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='Date', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Price', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc}, colors = ['#FF0000'])
line2 = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc})
fig = Figure(axes=[ax_x, ax_y], marks=[line, line2, ], title='Price Chart')
def new_chart(change):
line.y = df['A']*slider.value + df['B']*sliderB.value
slider.observe(new_chart,'value')
sliderB.observe(new_chart,'value')
VBox([fig,slider,sliderB])
我正在尝试绘制随投资组合权重变化而变化的动态投资组合表现
假设投资组合有 2 个组成部分,每个组成部分的权重为 50%。我想显示一个投资组合图表,其中包含代表组件权重的滑块。然后我希望能够滑动权重值并动态更新投资组合图表。
我已经为包含一个权重的投资组合完成了此操作,但无法弄清楚如何修改超过 1 个权重 - 也许我需要一种不同的方法。
下面的示例用 1 列的随机 df 代替我的投资组合 df - 过程应该相同。
就此示例而言,如果 df 有 2 列 - 我怎样才能使用控制每个权重的 2 个滑块工作?
from bqplot import DateScale, LinearScale, Axis, Figure, Lines
从 ipywidgets 导入 FloatSlider、VBox
将 pandas 导入为 pd
将 numpy 导入为 np
slider = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight A')
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = 轴(标签='Date', 刻度=x_sc, grid_lines='solid')
ax_y = 轴(标签='Price',比例=y_sc,方向='vertical',grid_lines='solid')
line = Lines(y=df['A'],x=df.index, 比例尺={'x': x_sc, 'y': y_sc}, 颜色 = ['#FF0000'])
line2 = 线(y=df['A'],x=df.index , 比例尺={'x': x_sc, 'y': y_sc})
fig = 图(axes=[ax_x, ax_y], marks=[line, line2], title='Price Chart')
def new_chart(值):
new_y = df[['A']]*slider.value
line.y = new_y
slider.observe(new_chart,'value')
VBox([图,滑块])
不确定我是否理解你的意思。你是这个意思吗?
from bqplot import DateScale, LinearScale, Axis, Figure, Lines
from ipywidgets import FloatSlider, VBox
import pandas as pd
import numpy as np
slider = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight A')
sliderB = FloatSlider(value=1, min = 0, max = 1, step = .01, description = 'Weight B')
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
df['B'] = np.random.randint(0,100,size=(100, 1))
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='Date', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Price', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc}, colors = ['#FF0000'])
line2 = Lines(y=df['A']+df['B'],x=df.index , scales={'x': x_sc, 'y': y_sc})
fig = Figure(axes=[ax_x, ax_y], marks=[line, line2, ], title='Price Chart')
def new_chart(change):
line.y = df['A']*slider.value + df['B']*sliderB.value
slider.observe(new_chart,'value')
sliderB.observe(new_chart,'value')
VBox([fig,slider,sliderB])