我正在使用Plotly(Python 3.6)构建图形,根据用户输入,图形可以是散点图或条形图。我意识到散点图需要一个额外的参数,并且我想避免尽可能地定义两种情况,因为所有其他参数都相同。
import plotly.offline as pyo
import plotly.graph_objs as go
散点图:
data=go.Scatter(
x=x,
y=y,
mode='lines')
条形图:
data=go.Bar(
x=x,
y=y)
是否可以将两者组合成一个功能?
我试图使用一个函数来确定要使用哪个函数,但是无法弄清楚如何确定是否要添加第三个参数(模式)。这是我的尝试:
if input == "Scatter":
fct = go.Scatter
if input == "Bar":
fct = go.Bar
data=fct(
x=x,
y=y)
如何添加可选的“模式”?我梦到这样的事情:
data=fct(
x=x,
y=y,
if input == "Scatter":
mode="lines"
)
答案 0 :(得分:1)
您可以使用**kwargs
来实现。我的示例将input
替换为user_input
:
import plotly.offline as pyo
import plotly.graph_objs as go
import numpy as np
N = 1000
x = np.random.randn(N)
y = np.random.randn(N)
user_input = "Bar"
if user_input == "Scatter":
fct = go.Scatter
fun_kwargs = {'mode': 'lines'}
if user_input == "Bar":
fct = go.Bar
fun_kwargs = {}
fct(x=x, y=y, **fun_kwargs)
输出:
Bar({
'x': array([-0.51224629, -0.19486754, 0.04559578, ..., -2.47111604, 0.94998171,
1.09732577]),
'y': array([ 2.0182325 , 0.05311828, 0.63149072, ..., 0.65456449, 0.73614411,
-1.02471641])
})
现在使用“散点图”:
user_input = "Scatter"
if user_input == "Scatter":
fct = go.Scatter
fun_kwargs = {'mode': 'lines'}
if user_input == "Bar":
fct = go.Bar
fun_kwargs = {}
fct(x=x, y=y, **fun_kwargs)
输出:
Scatter({
'mode': 'lines',
'x': array([ 1.3311512 , 1.72058406, -1.11571885, ..., -0.66691056, -1.81278558,
0.75089731]),
'y': array([-0.77526413, -0.06880226, -0.45198727, ..., -1.35639219, -0.16597244,
-0.91315996])
})