我正在制作一个风玫瑰,巧妙地使用下拉菜单来绘制每个月。我想使用循环来稍微清理我的代码,但是已经成功地使用了一种基本的方法,并且希望在这个过程中学到更多。
一些快速背景:实际上使用“跟踪”来绘制特定类型的数据(我每个月有6个不同的跟踪表示风速箱)。要使下拉菜单工作,您需要一个bools列表,说明什么是可见的。例如,如果我想要一月份的数据,我需要一个12个月的78个bools的列表,以及每年的总数据,其中列表元素5-11为true,其余为false。
下面是前面提到的基本代码,尽管是工作代码。
TF = [False]*78
TF[0:5]=[True]*6
Ann_L = TF.copy()
TF = [False]*78
TF[6:11]=[True]*6
Jan_L = TF.copy()
TF = [False]*78
TF[12:17]=[True]*6
Feb_L = TF.copy()
TF = [False]*78
TF[18:23]=[True]*6
Mar_L = TF.copy()
TF = [False]*78
TF[24:29]=[True]*6
Apr_L = TF.copy()
TF = [False]*78
TF[30:35]=[True]*6
May_L = TF.copy()
TF = [False]*78
TF[36:41]=[True]*6
Jun_L = TF.copy()
TF = [False]*78
TF[42:47]=[True]*6
Jul_L = TF.copy()
TF = [False]*78
TF[48:53]=[True]*6
Aug_L = TF.copy()
TF = [False]*78
TF[54:59]=[True]*6
Sep_L = TF.copy()
TF = [False]*78
TF[60:65]=[True]*6
Oct_L = TF.copy()
TF = [False]*78
TF[66:71]=[True]*6
Nov_L = TF.copy()
TF = [False]*78
TF[72:77]=[True]*6
Dec_L = TF.copy()如您所见,我创建了一个大列表,编辑了6个元素切片,复制到一个新变量,并为每个月重新做了一次。我只是想循环这个来清理它。任何帮助都将不胜感激。
正在使用的示例变量
fig.update_layout(
updatemenus=[
dict(
x=0.1,
xanchor="left",
y=0.99,
yanchor="top",
active=0,
showactive= True,
buttons=list([
dict(label="Annual",
method="update",
args=[{"visible": Ann_L},
{"title": "Annual"}]),
dict(label="January",
method="update",
args=[{"visible": Jan_L},
{"title": "January"}]),发布于 2021-05-11 23:30:40
名单清单
可以使用列表理解创建所有列表,然后使用析构将每个列表分配给相关变量。
L = [[False]*(n*6)+[True]*6+[False]*(73-n*6) for n in range(0, 13)]
Ann_L, Jan_L, Feb_L, Mar_L, Apr_L, May_L, Jun_L, Jul_L, Aug_L, Sep_L, Oct_L, Nov_L, Dec_L = L列表字典
这里有一个替代方法,它创建一个带有键Ann_L, Jan_L, Feb_L etc.的字典
要使用它,您需要调整代码以使用months['Ann_L'] etc.
names = ['Ann_L', 'Jan_L', 'Feb_L', 'Mar_L', 'Apr_L', 'May_L', 'Jun_L',
'Jul_L', 'Aug_L', 'Sep_L', 'Oct_L', 'Nov_L', 'Dec_L']
months = {names[n]: [False]*(n*6)+[True]*6+[False]*(73-n*6) for n in range(0, 13)}发布于 2021-05-11 23:40:38
您甚至可以像这样动态地构造按钮
from calendar import month_name
months = list(month_name)
months[0] = 'Annual'
buttons = [{
'label': months[i],
'method': 'update',
'args': [{'visible': [False]*(i*6)+[True]*6+[False]*(73-i*6)}, {'title': month_name[i]}]
} for i in range(13)]您不必创建缩写月份名称的变量
编辑:将“args”固定为列表
https://stackoverflow.com/questions/67495362
复制相似问题