【发布时间】:2011-06-08 05:08:33
【问题描述】:
如何在mathematica 中将文本定位在绘图之外?一个快速的谷歌搜索将 带你去
http://reference.wolfram.com/mathematica/howto/AddTextOutsideThePlotArea.html
这还不够,因为您想通过代码来实现这一点。在mathematica 中放置文本的一个简单示例如下:
Show[
Plot[x^3, {x, -1, 1},
Frame -> True,
ImageSize -> Medium,
FrameLabel -> {"x", "y"},
PlotRange -> {{-1, 1}, {-1, 1}}
],
Graphics[
Text[Style["A", Bold, 14, Red], {.5, .5}]]
]
这会将字母 A 放置在相对于绘图的点 (.5, .5) 处。有没有办法相对于图像的大小放置文本?据我所知,一切都在绘图坐标中完成。我的临时解决方案是将选项 PlotRangeClipping 设置为 False 并通过提供正确的坐标来设置文本。
Show[
Plot[
x^3, {x, -1, 1},
Frame -> True,
ImageSize -> Medium,
FrameLabel -> {"x", "y"},
PlotRange -> {{-1, 1}, {-1, 1}}
],
Graphics[
Text[
Style["A", Bold, 14, Red],
{-1.2, 1}
]
],
PlotRangeClipping -> False
]
这种方法的一个缺点是,如果我们改变绘图的范围,那么我们需要重新计算文本的坐标,以便将它保持在我们想要的位置(相对于整个图像)。
编辑:
尝试将Text A 定位在情节之外。
Framed[
Show[
Graphics[
{Orange, Disk[{0, 0}, 3.5]},
Frame -> True,
PlotRange -> {{-3, 3}, {-3, 3}},
PlotRangeClipping -> True,
FrameLabel -> {"x", "y"}
],
Graphics[
Text[
Style["A", Bold, 14],
ImageScaled[{.1, .95}]
]
]
]
]
编辑:
为了找到这个问题的另一种解决方案,我开始了另一篇文章,它给了我解决 belisarius 解决方案存在的问题的想法:将最终图形导出为 pdf 是图形的光栅化版本。查看我的另一篇帖子here 以获得解决方案。
最终编辑?
由于图像链接已经消失并且之前编辑中的链接已被修改,我决定 更新图像并包含 Simon 的 answer 的修改解决方案。
这个想法是在绘制标签之前创建一个蒙版并包含该蒙版。这样
我们正在创建自己的plotRangeClipping。
mask2D = Graphics[{Gray,
Polygon[{
ImageScaled[{-0.5, -0.5}],
ImageScaled[{-0.5, 1.5}],
ImageScaled[{1.5, 1.5}],
ImageScaled[{1.5, -0.5}],
ImageScaled[{-0.5, -0.5}],
Scaled[{0, 0}],
Scaled[{1, 0}],
Scaled[{1, 1}],
Scaled[{0, 1}],
Scaled[{0, 0}],
ImageScaled[{-0.5, -0.5}]
}]
}];
在某些情况下,使用{1,1} 中的ImageScaled 不足以剪切主图像。为此原因
我使用1.5 和-0.5 提供了更多报道。现在我们可以绘制带有标签的图像如下:
Framed@Show[
Graphics[
{
Orange,
Disk[{0, 0}, 3.5]
},
Frame -> True,
PlotRange -> {{-3, 3}, {-3, 3}},
FrameLabel -> {"x", "y"}
],
mask2D,
Graphics[
Text[
Style["A", Bold, 14],
ImageScaled[{0, 1}],
{-1, 1}
]
],
Background -> Red
]
这是所需的图像:
请注意,我已将图像的背景更改为红色。这可以通过更改 Background 属性轻松修改,对于掩码只需将 Gray 更改为您喜欢的任何颜色(例如白色)。
【问题讨论】: