![](/img/trans.png)
[英]How to access index value in a apply/lambda function when index is a PeriodIndex?
[英]How to apply a counter or otherwise index elements using a lambda function?
类似的问题已被问到这里和这里,但我无法让它适用于我的特定用例,即Plotly的for_each_trace
功能,可以像这样使用:
fig.for_each_trace(lambda t: t.update(name = 'line'))
现在,考虑这样一种情况,我想用'line' + i
重命名 Plotly 图中的所有行,得到如下结果:
还有很多其他方法可以做到这一点,但我真的很想知道如何使用
fig.for_each_trace(lambda t: t.update(name = 'line')) # pluss some counter functionality
from itertools import cycle
titles = cycle([1, 2])
fig.for_each_trace(lambda t: t.update(name = 'line ' + str(next(titles))))
一个完整的片段是:
import plotly.graph_objects as go
from itertools import cycle
titles = cycle([1, 2])
fig = go.Figure()
fig.add_traces(go.Scatter(x=[1,2,3], y=[1,2,3],))
fig.add_traces(go.Scatter(x=[1,2,3], y=[3,2,1]))
fig.for_each_trace(lambda t: t.update(name = 'line ' + str(next(titles))))
fig.show()
但我希望能够在没有循环的情况下做到这一点。 我试过以几种方式使用enumerate
,但没有成功。 那么,有没有人知道如何正确应用enumerate
或以其他方式合并计数器,以便可以在fig.for_each_trace()
中索引列表:
lst = [1, 2]
fig.for_each_trace(lambda t: t.update(name = 'line ' + str(lst[i])))
如果您想将计数器和更新方法组合在一起,而不是使用lambda
我可能会这样做:
def trace_name_updater():
counter = itertools.count(start=1)
def update_trace_name(t):
t.update(name=f'line {next(counter)}')
return update_trace_name
并像这样使用它:
fig.for_each_trace(trace_name_updater())
在这种情况下,计数器将位于返回的update_trace_name
function 的闭包中。
再次调用trace_name_updater()
将提供一个新的计数器。
我的问题仍然是,如果您可以在初始化时设置跟踪名称,那么为什么您需要这样做,但也许您的问题中没有解释原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.