如何将包含相同参数子集且具有相同值的2个函数组合为1个函数?

时间:2019-06-07 19:48:26

标签: python plotly

我正在使用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"
   )

1 个答案:

答案 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])
})