Mathematica Plot物件解析

2021-09-09 02:59:01 字數 2107 閱讀 8567

從乙個簡單的問題談起。怎麼樣畫這麼乙個影象?

恩,rotate一下應該就可以了

rotate[plot[sin[x], ], 90 degree]
但是仔細觀察就會發現乙個問題了,x軸是反的。怎麼辦呢?

想到的乙個方法是scale,把x軸scale到-1倍就可以了。但列位試試,不論怎麼把scale作用到plot上都是報錯。以前也曾經試圖把plot物件和circle,point畫在同乙個graphics裡面,但是同樣也失敗了。這說明 plot物件和point, line 這些 graphics primitives很不同, 因此我們有必要研究一下plot物件的結構。

首先使用treeform檢視乙個簡單的 plot[sin[x],]

不難發現結果是以graphics作為根的,這個很容易理解,畢竟plot出來的結果既含有座標軸,又含有標籤,還有資料影象,肯定是個複雜的graphics物件,在幫助裡也說得很明確,「plot normally returns graphics. 」。因此,我們就不能夠把plot結果像disk,arrow一樣插入到graphics中,因為它自己本身就是graphics物件。同時,針對graphics primitive的函式也都不能直接作用在plot結果上,比如上面提到的scale。

往下看,graphics包含了兩個list,前者包含著很多primitive物件,後者是屬性列表,這和我們平時生成graphics的方法是一致的,因為它本來就是graphics嘛。

如上圖,我們只看第乙個list。它本身也只包含乙個list。再往下一層就可以看到我們的圖線了,處於第三層的list包含了hue和line兩個元素。我們試著同時繪製兩條圖線,treeform@plot[, ],會發現新新增的圖線也是處於第三層,第二層依然是只有乙個孤零零的list。因此我們就可以知道,為了得到 plot的圖線資料,只需要把第3層的line集合提取出來就行了。

plot[, ][[1, 1]] // 

cases[#, line[___], infinity] &

使用 cases, 我們可以提取出以line開頭的子表示式。

至此,我們基本了解plot結果的大致結構了,plot可以看作是一種特殊的graphics求值器,先根據函式式求出散點序列,轉換為line物件,然後填充到乙個graphics物件裡。plot的那些axes,epilog,plotrange屬性,其實是來自於graphics而已。如果想要把plot和circle放到一起,就不能夠想當然的把plot放到graphics裡面了,因為graphics是不支援巢狀的,可行方法有以下幾種

plot[sin[x], , epilog -> circle[, 0.1]]

show[plot[sin[x], ], graphics[circle[, 0.1]]]

graphics[, 0.1

], inset[plot[sin[x], ], , , ]}]

如果只是想獲得plot圖形的資料,以便進一步處理,直接一層層剝皮即可

plot[sin[x], ] //

first

//first

//last

//last

或者使用模式匹配

plot[sin[x], ] //

cases[#, line[___], infinity] &

a = plot[sin[x], ] // 

cases[#, line[___], infinity] &;

graphics}, axes ->true,

ticks -> , range[-4 \[pi], 4

\[pi], \[pi]]},

plotrange -> , automatic}]

細解arguments物件

函式內部的arguments物件到底是什麼?難道就是簡單的接收函式引數的物件嗎?在這些問題中,開始了重新對arguments的重新學習。arguments物件是所有 非箭頭 函式中都可用的區域性變數。你可以使用arguments物件在函式中引用函式的引數。此物件包含傳遞給函式的每個引數的條目,第乙個...

物件是隱式解引用

引用和指標 引用和指標引用的行為像乙個const指標解引用乙個有趣的關係式。從而給出如下 1 2 3 intnvalue 5 int constpnvalue nvalue int rnvalue nvalue pnvalue和rnvalue評估同。作為乙個結果,下面兩個語句 產生相同的效果 1 2...

將Model物件歸檔解檔

物件編碼把物件的類特徵以及物件狀態轉化某種格式,這種格式可儲存,也可在程序間傳遞。類的型別以及例項資料會被寫入到某種位元組流裡面,當程式結束的時候,該位元組流可進行持久化。程式啟動的時候,新分配物件可以解碼之前儲存的自身描述,然後把自己恢復到之前執行時的狀態。編碼通常需和歸檔協作。歸檔將物件圖轉化成...