2012-01-16 34 views
8

Có thể truy xuất phạm vi ô được tạo tự động trong Mathematica không?Lấy dải ô được tạo tự động

Ví dụ, nếu tôi được làm:

Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic] 

sau đó tôi muốn biết rằng phạm vi của trục Y là -1 đến 1 và phạm vi của trục X là 0-2 số Pi.

Trả lời

14
p = Plot[Sin[x], {x, 0, 2*Pi}, PlotRange -> Automatic]; 

AbsoluteOptions là một phần của xổ số nhưng hoạt động trong trường hợp này là

AbsoluteOptions[p, PlotRange] 
{PlotRange -> {{0., 6.28319}, {-1., 1.}}} 

Mặc dù AbsoluteOptions superceded FullOptions đôi khi nó cũng là giá trị cố gắng FullOptions nếu và khi AbsoluteOptions thất bại bởi vì tôi đã đi qua trường hợp khi AbsoluteOptions thất bại nhưng FullOptions công trình. Trong trường hợp này FullOptions cũng hoạt động:

FullOptions[p, PlotRange] 
{{0., 6.28319}, {-1., 1.}} 
+0

Bingo! Đó là một câu trả lời hoàn chỉnh hơn tôi đã đưa ra ở trên. – kkm

+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn! – Cassini

+0

Ý kiến ​​của bạn về việc ghép mẫu đơn giản là 'PlotRange' trong' FullForm' của 'p' là gì? Tôi đã gặp rắc rối với 'AbsoluteOptions' trong quá khứ (có lẽ do không hiểu nó hoạt động như thế nào), vì vậy bây giờ tôi có xu hướng tránh sử dụng nó để ủng hộ sự phù hợp với mô hình bạo lực như trong câu trả lời của tôi. – acl

3

Không khá hay nói chung, nhưng bạn có thể brute-force nó thích này:

p = Plot[Sin[x], {x, 0, 2*Pi}, PlotRange -> Automatic]; 
[email protected][p, List[___, Rule[PlotRange, x_], ___] -> x] 

cho

{{0., 6.28319}, {-1., 1.}} 

Bạn có thể làm việc này bằng cách nhìn vào FullForm[p]

2

Sử dụng chức năng AbsoluteOptions, q. v. trong tài liệu.

In[56]:= x = Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
     AbsoluteOptions[x, PlotRange] 

Out[57]= {PlotRange -> {{0., 6.28319}, {-1., 1.}}} 
1

acl Giống như tôi đã thường xuyên thâm nhập vào các fullform với vị trí để gửi quá trình đồ họa:

Ví dụ: Tìm và sửa đổi PlotRange:

p = Plot[Sin[x], {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
rpos = Position[p, PlotRange]; 
Print["Initial PlotRange"]; 
p[[Sequence @@ Most[First[rpos]]]] 
Print["Modified PlotRange"]; 
p[[Sequence @@ Most[First[rpos]]]] = PlotRange -> {{0, Pi}, {-1, 1}} 
Print[p] 

Hoặc, màu sắc thay đổi:

p = Plot[{Sin[x], Cos[x]}, {x, 0, 2 \[Pi]}, PlotRange -> Automatic]; 
hpos = Position[p, Hue]; 
Print["Initial colours"] 
p[[Sequence @@ Most[#]]] & /@ hpos 
Print["New colours"] 
MapThread[(p[[Sequence @@ Most[#1]]] = #2) &, {hpos, {Green, Orange}}] 
Print[p] 
2

Tôi có thể đề nghị các Ticks Hack sau:

pl = Plot[Sin[x], {x, 0, 10}]; 
Reap[Rasterize[Show[pl, Ticks -> {Sow[{##}] &, Sow[{##}] &}], 
    ImageResolution -> 1]][[2, 1]] 

=> {{-0.208333, 10.2083}, {-1.04167, 1.04167}} 

Bí quyết là thực PlotRange được xác định bởi FrontEnd , không phải bởi hạt nhân. Vì vậy, chúng ta phải buộc FrontEnd hiển thị đồ họa để đánh giá các chức năng đánh dấu. Bản hack này cung cấp đầy đủ PlotRange với giá trị rõ ràng là PlotRangePadding được thêm vào.

Nhiều giải pháp chung có tính đến một khả năng rằng pl có giá trị phi tiêu chuẩn của DisplayFinction tùy chọn và rằng nó có thể đã Axes tùy chọn thiết lập để False:

completePlotRange[plot_] := 
[email protected]@ 
    Reap[Rasterize[ 
    Show[plot, Ticks -> (Sow[{##}] &), Axes -> True, 
     DisplayFunction -> Identity], ImageResolution -> 1]] 

Trên trang Tài liệu cho PlotRange dưới "Thông tin thêm" có thể đọc một lưu ý quan trọng về AbsoluteOptions: "AbsoluteOptions cung cấp hình thức rõ ràng của PlotRange thông số kỹ thuật khi Automatic se ttings được đưa ra "(làm nổi bật là của tôi). Vì vậy, có vẻ như Tài liệu không đảm bảo rằng AbsoluteOptions sẽ cung cấp các giá trị chính xác cho PlotRange khi nó không phải là Automatic cho tất cả các tọa độ.

+0

Xin chào Alexey, hầu hết chúng ta chủ yếu hoạt động trên trang web mới ngay bây giờ, xem tại đây: http://mathematica.stackexchange.com/ Thật tuyệt vời nếu bạn có thể tham gia! – Szabolcs

+0

@ Szabolcs Cảm ơn bạn, tôi đã ở đó. –

Các vấn đề liên quan