求教,Plot中的图例PlotLegends对于列表会不能用吗
mathematica吧
全部回复
仅看楼主
level 1
functionlist = {x, 2 x, x^2, x^3}
Plot[{x, 2 x, x^2, x^3}, {x, -1, 2}, PlotLegends -> "Expressions"]
Plot[functionlist, {x, -1, 2}, PlotLegends -> "Expressions"]
问题: 第二行的一串函数,为了方便,就把它打包成一个列表,但是发现图例没了?这是为什么,很不解?还是说不能这么用,但是函数图像还是可以画出来的啊,求指点一二。
2018年12月13日 02点12分 1
level 14
因为Plot只能从字面上分析表达式。
这个道理就好像
x=1
Plot[x,{x,0,1}]
不会把x当成定值,绘制一条水平直线一样自然。
如果非要这么写的话可以借助With
functionlist = {x, 2 x, x^2, x^3}
With[{functionlist=functionlist},
Plot[functionlist, {x, -1, 2}, PlotLegends -> "Expressions"]
]
具体原理的话,大致相当于在Plot计算之前,里面的functionlist就被With替换了。
2018年12月13日 05点12分 2
把我看晕了
2018年12月18日 11点12分
不对,Plot其实是会对表达式进行深入分析的。参5楼。
2019年01月05日 07点01分
level 7
吧里有一个吧主发的帖子 可以去看看 (好像是隐性表达什么的)
2018年12月16日 00点12分 3
level 10
11.3不存在这个问题。
2018年12月18日 11点12分 4
我刚才试了一下,确实如此,应该是得益于Plot使用类似Block的方式局域化变量[吐舌]
2018年12月18日 12点12分
嗯,我的版本是10.4,没升到11.3
2018年12月19日 11点12分
吧务
level 15
……这就是版本10的Bug,注意如果是没有分析出内部结构,那至少应该出现一个functionlist的标签。顺便版本9也无此问题:
当然了,这个问题确实在一定程度上和“显式存在”或者说“字面存在”有关,比如说上面这个例子,如果添加选项Evaluated->False(这选项默认值是Automatic),就会出现如下结果:
总结一下,那就是Plot其实是会在一定程度上分析用于画图的表达式的,尽管它拥有属性HoldAll,但某些情况下它依旧会在内部通过自动计算让表达式的内部结构显露出来。
顺便,另一个有类似特性的函数是NIntegrate。
2019年01月05日 07点01分 5
[吐舌]用像Block这种动态作用域就可以实现。我写2楼的时候没多想。
2019年01月05日 08点01分
@magus000 这里和Block没有关系,否则Evaluated->False就不应该对结果造成影响。
2019年01月05日 08点01分
就是动态作用域的特性才使你所说的这种“分析”成为可能吧,否则考虑x = 1;functionlist:= {x, x^2};这种岂不完了。至于Evaluated选项我觉得就是影响内部局域化发生的阶段的。以及,我手里的11.3里Evaluated选项好像没用?
2019年01月05日 09点01分
@magus000 啊~你指的是局部化啊,那确实。然后关于后面那个,在版本11.2试了下,还真是……个人怀疑可能是版本11.2引入奇点分析机制的时候又有什么改动……
2019年01月05日 09点01分
level 1
@xzcyr
想问下是不是版本10的问题特别多。。。哪个版本相对稳定
另外如果我要在10下进行这种操作,是不是就得借助于with函数之类的,像二楼那样
2019年01月06日 07点01分 6
版本10之后一直不咋的。版本10前几个小版本是用不得的,10.0至10.2是绝对用不得的。个人的意见是版本10以后尽量追新。(不过如果需要用到excel的话,就要小心11.3版XLSX中文文件导入退化问题,具体参吧里的精品;还有接下来的版本12会不会又出现稳定性上的大降级现在只有天知道。)
2019年03月02日 03点03分
1