gpt4 book ai didi

wolfram-mathematica - 为什么从 Mathematica 导出的 BarChart 图形有像素化文本?有解决方法吗?

转载 作者:行者123 更新时间:2023-12-04 08:19:30 25 4
gpt4 key购买 nike

我一直在炫耀我的fancy new graph formats给同事,但我们发现基于 BarChart 的图形导出为 EMF、WMF、PDF 等时有锯齿状文本。基于 ListLinePlot 的折线图, DateListPlot等没有这个问题。

短于 Rasterize - 每Export自动运行(它是针对最终用户的应用程序,因此不能指望他们自己摆弄它),是否有解决方法?这是一个惊喜,因为 documentation说:

Since EMF supports vector graphics, fonts are not rasterized when exporting to EMF.



编辑 如果相关,使用的字体是 Arial。这应该会给你一些非常接近图表的东西,除了 tickgrid 业务,它涉及的自定义函数比人们真正想要涉足的要多。

SetOptions[BarChart,Background->None, BaseStyle -> {20, FontFamily -> Rfont}, 
Frame -> True, FrameTicksStyle -> {{Directive[20, 20], 20}, {20, 20}},
FrameStyle ->
Directive[AbsoluteThickness[0.9], FontFamily -> Rfont, Black],
AspectRatio -> 14./19., PlotRangePadding -> None, Ticks -> None,
ChartBaseStyle -> EdgeForm[None], GridLinesStyle->Directive[GrayLevel[0.7],
AbsoluteThickness[0.9]], GridLines -> {None, Automatic},
ImageSize -> 672, ImageMargins -> {{0, 0}, {0, 3}},
ImagePadding -> {{66, 66}, {All, 1}}
]

SetOptions[ListPlot,Background->None,BaseStyle -> {20, FontFamily -> Rfont,
AbsolutePointSize[6]}, Frame -> True,
FrameStyle -> Directive[AbsoluteThickness[0.9], FontFamily -> "Arial", Black],
FrameTicksStyle -> {{Directive[20, 20], 20}, {20, 20}},
AspectRatio -> 14./19., GridLinesStyle->Directive[GrayLevel[0.7],
AbsoluteThickness[0.9]], GridLines -> {None, Automatic},PlotRangePadding->None,
ImageSize -> 672, ImageMargins -> {{0, 0}, {0, 3}},
ImagePadding -> {{66, 66}, {All, 1}}
];

areaharvested = {0.25, 1.25, 0.3, -0.1, -0.5, -0.5, -0.5, 0.25, 0.4};
yield = {3.25, 1.1, 2.6, 3., 2., -0.3, 2., 1.5, 1.2};
totalgrainprod = areaharvested + yield;


exgraph = Show[BarChart[Transpose@{areaharvested, yield}, ChartLayout -> "Stacked",
ChartStyle -> {Orange, Green}, PlotRange ->{{8.5, 9.5}, {-1, 4.}},
PlotRangePadding -> None,
FrameTicks ->{{myTickGrid[-1, 4, 1, "%"], myTickGrid[-1, 4, 1, "%"]},
{myBarChartTicks[{"67-71", "77-81", "87-91", "97-01", "07-11"}, 9], None}}],
ListPlot[totalgrainprod, PlotStyle -> AbsolutePointSize[13]]]

Export["exgraph.emf", exgraph]

最佳答案

更新

多年后,Wolfram 带来了解决方案。

Export[stringtouse, 
DeleteCases[ obj /. {_Opacity, p_Point} :>
{PointSize[0], p}, _Opacity, Infinity], opts]

我把它绑定(bind)到一个像这样的小辅助函数中。
ExportEMFNicely[pathorfile_String, obj_, opts:OptionsPattern[{Export}]]:=
With[{stringtouse = If[ToLowerCase[StringTake[pathorfile,-4]]===".emf",
pathorfile, pathorfile<>".emf"]},
Export[stringtouse,
DeleteCases[ obj /. {_Opacity, p_Point} :>
{PointSize[0], p}, _Opacity, Infinity], opts] ]

这会产生矢量 EMF,而无需 Magnify或使用 ImageResolution黑客。

原始答案

Wolfram 支持回复了我。简短的回答是这是 Mathematica 中的一个错误,他们建议使用其他格式或 Rasterize

Thank you for your email. Issues relating to the quality of exported images from Mathematica have been reported in the past and our developers are looking into these. I have however filed a separate report on your behalf. I have also included your contact information so you can be notified when this is resolved.

In the meantime, the other option that you can try is to rasterize the graphic with an appropriate resolution before exporting to EMF.

Rasterize[graphic, ImageResolution-> XXX]

You could also try exporting to other Windows formats like RTF.



编辑

从那以后,我发现您可以使用非常高的 ImageResolution 值来解决这个问题(至少在 v 8.0.4 和 v 9.0.1 中)。在 Export命令。
bc = BarChart[RandomInteger[{1, 20}, {15}], Frame -> True, 
FrameStyle -> AbsoluteThickness[1], PlotRangePadding -> 0,
PlotRange -> {0, 20},
BaseStyle -> {FontFamily -> "Arial", FontSize -> 16},
LabelingFunction -> None]

Export["testbarchart.emf", bc, ImageResolution -> 2000]

设置 ImageResolution到 1300 或更高会生成矢量格式文本和 50k EMF 文件。但是,将其设置为 1000 会导致高分辨率栅格占用 48 Mb!据我所知,这种行为是无证的。它似乎也给刻度线带来了问题,因为它们只有在您使用更复杂的语法 Ticks 明确设置它们的长度时才会出现。 , FrameTicks等(见 documentation。)

对此修复的一个警告是,Mathematica 仍然认为创建这个更小的、基于矢量的 EMF 文件需要与创建高分辨率位图一样多的内存。所以它有时会提示没有足够的内存,你需要退出一些其他的应用程序。它实际上并不需要所有内存来创建矢量 EMF。在我的实验中,任何 1300 或以上都可以触发矢量导出,而 1200 及以下将生成高分辨率、巨大的位图。

关于wolfram-mathematica - 为什么从 Mathematica 导出的 BarChart 图形有像素化文本?有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7396898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com