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是图形的栅格化版本。查看我的其他帖子这里的解决方案。
最终编辑?
由于图像链接已经消失,并且上一个编辑中的链接已经被修改,因此我决定更新图片并包括Simon的答案的修改版本。
思路是创建一个掩码,并在绘制标签之前包含该掩码。这样我们就可以创建自己的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
更改为您喜欢的任何颜色(例如白色)。