当我试图在Matlab中将renderer设置为painters时,我遇到了一个特别奇怪的行为。在绘制图形之后,命令set(gcf,'renderer','painters')只在图形从其初始位置在屏幕上第一次移动时才正确执行。如果在执行所述命令之前未移动该图形,则将以下错误消息打印到命令窗口:
java.lang.IllegalArgumentException: adding a container to a container on a different GraphicsDevice
at java.awt.Component.checkGD(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at com.mathworks.hg.peer.FigurePanel.assembleFigurePanel(FigurePanel.java:218)
at com.mathworks.hg.peer.FigurePanel.reconstructFigurePanel(FigurePanel.java:143)
at com.mathworks.hg.peer.FigurePanel.handleNotification(FigurePanel.java:88)
at com.mathworks.hg.peer.FigureNotificationHandlerImpl.forwardNotification(FigureNotificationHandlerImpl.java:62)
at com.mathworks.hg.peer.FigureNotificationHandlerImpl.handleNotification(FigureNotificationHandlerImpl.java:29)
at com.mathworks.hg.peer.FigureAxisComponentProxy.construct(FigureAxisComponentProxy.java:89)
at com.mathworks.hg.peer.FigureAxisComponentProxy.setVisual(FigureAxisComponentProxy.java:112)
at com.mathworks.hg.peer.FigureHG1Mediator.setClientVisual(FigureHG1Mediator.java:135)
at com.mathworks.hg.peer.FigurePeer.doSetVisual(FigurePeer.java:2418)
at com.mathworks.hg.peer.FigurePeer.access$1100(FigurePeer.java:119)
at com.mathworks.hg.peer.FigurePeer$25.run(FigurePeer.java:2430)
at com.mathworks.hg.util.HGPeerQueue$HGPeerRunnablesRunner.runit(HGPeerQueue.java:228)
at com.mathworks.hg.util.HGPeerQueue$HGPeerRunnablesRunner.runNotThese(HGPeerQueue.java:260)
at com.mathworks.hg.util.HGPeerQueue$HGPeerRunnablesRunner.run(HGPeerQueue.java:276)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)如果我只打印一个数字,我不会介意默许这种特性的Matlab,但我想要生成的情节和保存eps/pdf的输出迭代通过循环语句。如何避免这种特殊的要求?
我已经建立了一个最小的工作例子,这可能有助于诊断问题。
x=1:10;
y1=1:10;
y2=11:20;
ax1=axes;
[ax,Y1,Y2]=plotyy(x,y1',x,y2',@bar,@bar);
patchY2 = get(Y2,'children');
set(patchY2,'FaceAlpha',0.65);
ax2=axes('Position',[0 -10 1 1]);
linkaxes([ax ax2],'x');
rgb2cm
set(gcf,'renderer','painters');请注意,rgb2cm是提交给MATLAB的。它的作用是将补丁rgb颜色替换为colormap-indexed颜色,以便可以将renderer设置为painters。
编辑:使用Matlab7.11.0 (R2010b)在带有3.2.04-AMD 64内核的Debian7机器上发生问题。
发布于 2014-02-19 13:49:09
首先打开并移动图形,然后对循环中的每个图重用相同的图形,保存后使用clf清除图形。
https://stackoverflow.com/questions/21868120
复制相似问题