Mathematica如何清晰的把圖導入到Word?

MMA即使使用export導出的圖也很模糊,如何辦?

如圖

Plot[{Sin[x], Cos[x]^2}, {x, -4, 4}, AxesOrigin -&> {-4, -1},
GridLines -&> Automatic, GridLinesStyle -&> Directive[Dashed],
Frame -&> True,
FrameLabel -&> {"independent variable x", "dependent variable y"},
PlotLabel -&>
Style["y=sin(x) y=!(*SuperscriptBox[(cos), (2)])(x)", 15,
Bold], LabelStyle -&>
Directive[FontFamily -&> "Helvetica", FontSize -&> 12],
PlotStyle -&> {Directive[Blue, Thickness[0.006]],
Directive[Red, Thickness[0.006], Dashed]},
PlotLegends -&>
Placed[{"sin(x)",
"!(*SuperscriptBox[(cos), (2)])(x)"}, {0.65, 0.3}],
Background -&> White]

以上是弄到word的效果圖,截屏後反而清晰,export後反而模糊,為什麼?

若弄成emf格式,word中效果最差

感謝朋友的回答,我試過,若放大到Size 1000,坐標軸什麼的都好小,那麼,涉及到調整大小,但還有以下問題

1,圖的標題字體如何調整?

2,如何分別調整FrameLabel的字體,大小,以及坐標軸的字體,大小?

3,坐標軸上面的刻度如何調大?若放大1000,然後貼到word中,由於排版原因肯定要縮小,這時候小的刻度看不見了,如圖:

曲線是很順滑,但是刻度完全看不清

若放大刻度值,這時數字和坐標軸挨的又很近,如何解決?如圖

4,如何修改Lengend的字體以及大小?

===============================================

5月17號增加:

感謝孫挺,Zixuan Zhao等朋友的回答,受益匪淺!在下涉入mma不深,還有些問題向各位請教:

1,MMA系統默認的ImageSize是多大?有時候ImageSize和ImageResolution需要搭配,我不知道原始的ImageSize應該是多大呢?

2,PlotPoints 和ImageResolution有什麼關聯?PlotPoints很大是不是不能理解成ImageResolution很大?

3,Manipulate畫的帶有參數控制項的圖能不能弄成一個可以與mma無關的exe文件?類似於Matlab的GUI界面?我理解是不可以,是不是一點辦法都沒有?比如若要做一個獨立於mma的軟體,輸入某些參數可以得到某些圖形,在mma裡面很方便,脫離mma就不行了嗎?這樣我認為對MMA就比較浪費了啊。。

再次感謝!


方法一:ImageSize

Export["1.png", ParametricPlot[{Sin[u] u , Cos[u] u},
{u, 0, 100}]]

質量比較差。

Export["2.png", ParametricPlot[{Sin[u] u , Cos[u] u},
{u, 0, 100}], ImageSize -&> 1000]

質量提升。

方法二:用ImageResolution

Export["example.png",
ParametricPlot[{Cos[u] u, Sin[u] u}, {u, 0, 100}],
ImageResolution -&> 300]

質量提升,ticks不變小。不過此方法對於題主的code有一部分文字會很大,可以調整一下參數,慎用。方法三:矢量圖(注意我這裡上傳的圖片並不是svg,因為知乎不支持,只能截圖)

Export["1.svg", ParametricPlot[{Sin[u] u , Cos[u] u},
{u, 0, 100}]]

質量絕對可以保證畢竟矢量圖可是這ticks出現了問題。經查證是mma的bug。

解決方法mma.se上有,就把代碼辦過來了(作者的名已經在函數名里了)。

roundtripPDF[gr_, opts : OptionsPattern[]] :=
First@ImportString@ExportString[gr, "PDF", opts];

asXML[gr_] :=
ImportString[ExportString[gr, "SVG"], "XML", "ReadDTD" -&> False];

addComment[None, elt_] := e< addComment[Automatic, elt_] := addComment["*** Exported from Mathematica ***", elt]; addComment[comment_String, XMLElement[tag_, attrs_, contents_]] := XMLElement[tag, attrs, Append[contents, XMLObject["Comment"][comment]]]; addAttributes[oldAttrs_, newAttrs_] := DeleteDuplicatesBy[Join[oldAttrs, newAttrs], First]; Options[Pillsy`ExportSVG] := {Background -&> Automatic,
AspectRatio -&> Automatic, "CommentString" -&> Automatic};

Pillsy`ExportSVG[file_String, expr_, opts : OptionsPattern[]] :=
With[{svgStructure = asXML@roundtripPDF[expr, opts],
dims = ToString /@
ImageDimensions@
Rasterize[Show[expr, ImagePadding -&> 0], "Image"]},
Export[file,
svgStructure /.
XMLElement["svg", attrs_, contents_] :&>
addComment[OptionValue["CommentString"],
XMLElement["svg",
addAttributes[attrs,
Join[{"viewBox" -&> "0 0 " &<&> StringRiffle[dims],
"width" -&> dims[[1]] &<&> "pt",
"height" -&> dims[[2]] &<&> "pt"},
If[OptionValue[AspectRatio] ===
Full, {"preserveAspectRatio" -&> "none"}, {}]]], contents]],
"XML"]]

之後運行

Pillsy`ExportSVG["2.svg", ParametricPlot[{Sin[u] u , Cos[u] u},
{u, 0, 100}]]

svg不能直接導入到word裡面,轉換一下格式就可以了。

----------Update----------

題主emf質量不好是Inkscape的問題,既然這樣就用Inkscape導出為png,dpi設置300或者更高,就可以解決問題了。(不要導出為wmf,依然有bug,會出現把o這樣的字母中心填滿的情況)。回到了png又想到一種辦法,已補充。不過綜合來看還是svg的要清晰一點,詳見方法二的補充說明


其實直接複製粘貼就行了,粘貼過去自動就是矢量圖,格式也基本正確。


這個問題,涉及到幾件事:

1. 導出的是矢量圖還是點陣圖?

2. 導出的圖片解析度和像素解析度如何?

3. Word如何渲染你的圖片?

在Mathematica中,圖片解析度對應選項ImageSize,像素解析度對應ImageResolution這個選項。

圖片不清楚,既要解決ImageSize這個問題,還要考慮ImageResolution這個問題,而非ImageSize一件事。

在中Word插入Mathematica生成的圖片,是一件比較tricky的事情。

因為Mac的Word和Windows有些差別,而最近在Mac下的Word 預覽版和Windows目前的版本效果上比較接近,所以我做了以下這個實驗來顯示差別:

題主遇到的問題,應該是左下角的情況:

直接將Mathematica中的圖導入Word就會不清晰。

原因是:Mathematica默認輸出的是解析度(圖像像素)比較低的點陣圖,所以會出現這個結果。

解決方案在右側:

或者用矢量圖,輸出PDF(結果右下角);

或者輸出高質量的點陣圖(結果右上角):

Export["~/Downloads/fig.tiff", Show[fig(*put your figure here*), ImageSize -&> 400],
ImageResolution -&> 300]

注意,輸出時,我用Show調整了以下圖片的圖像大小,之後在Export中調整了圖片的像素質量。

對於Mac平台,使用Word2011版本的話,直接從Mathematica中複製graphics粘貼過來,會默認粘貼PDF,所以質量高;但這一方法不是對所有圖片都有效,保險的方法還是用以上介紹的方式。

PS:

輸出圖片確實是一件tricky 的事,坑很多。

如果還有問題,再貼上來,我們再討論。

不過,Mathematica做的的圖真是很美!

祝Mathematica使用愉快!

----------------------------------------------

updates for St. Jason"s comments:

Q1,你的圖的Frame邊框是灰色的,是否是mma為10版本的緣故?還是特別設置的?我的是9版本

A1:是的,v10的繪圖風格確實與之前版本有較多不同。

2,我試過直接轉成pdf,確實清晰,不過如何插入word呢?pdf格式是給latex用的嗎?

A2:對於Windows下的Word,不可以直接插入PDF;而Mac下是可以的。

Windows下Word保險的插入圖片的方式,是選擇插入高解析度的點陣圖。或者,可以插入Windows自己的wmf或emf格式。不過wmf和emf並不廣泛使用,所以建議還是選擇高解析度的點陣圖。

另外,PDF並不僅僅適用於LaTeX。如果用於學術出版的話,PDF已經被越來越多的期刊認可。而且,PDF可以方便的轉換為其他格式(矢量圖、點陣圖均可)。

3,你最後的代碼中的imagesize和imageresolution可以在plot函數中使用嗎?還是說只能這樣用才有效?

A3:ImageSize這個選項對所有有關image和graphics的對象都是適用的;ImageResolution僅對點陣圖有關(或者說像素解析度有關)的圖形對象適用(如:tiff,jpg,png等),而對PDF,svg等矢量圖是沒有作用(因為它們與像素質量無關)。Plot做的是矢量圖,所以ImageSize有效,ImageResolution無效。

4,legend字體和大小如何更改?關於圖例mma似乎不是那麼好用,我看到說明文檔中需要用need函數增加一個包,對這塊不太了解,故求教,再次感謝!

A4:v9之後的版本在legend方面做出了極大改進,不要再使用以前的PlotLegends package(已過時)。你可以閱讀Mathematica的documentation中有關legend的內容來學習內容。實際上,v9之後,Mathematica 增加了Legended這樣一類對象,極大地擴展了legend的適用範圍。如有問題,可以再開個問題我們來討論。


1,圖另存為PDF,dpi高些,建議圖拉大點兒再存

2,打開保存的PDF,調整大小,使用快照

3,粘貼到word


另存為.svg矢量圖可以在Visio中修改,然後再粘貼到word,完美解決


右鍵保存成PDF即可。。。


簡單易行,就用截屏軟體後粘貼;要想效果好,就用Export函數。


親測最簡單方便的辦法:利用HyperSnap等截圖軟體在mma中直接截,然後粘到Word里


推薦閱讀:

mac下的word怎麼添加目錄?
word多級標題編號格式到底怎樣調整?
Evernote 為什麼沒有 Word 裡面的格式刷按鈕?
如何把PPT的文字轉換到Word文檔?
網上有哪些優質的ppt,excel,word學習教程?

TAG:WolframMathematica | MicrosoftWord |