Cách cập nhật tọa độ trong Python

Giống như bất kỳ gói đồ họa nào, Matplotlib được xây dựng dựa trên khung chuyển đổi để dễ dàng di chuyển giữa các hệ tọa độ, hệ tọa độ dữ liệu vùng người dùng, hệ tọa độ trục, hệ tọa độ hình và hệ tọa độ hiển thị. Trong 95% âm mưu của bạn, bạn sẽ không cần phải suy nghĩ về điều này, vì nó diễn ra bí mật, nhưng khi bạn vượt qua các giới hạn của việc tạo hình tùy chỉnh, sẽ giúp hiểu được các đối tượng này để bạn có thể sử dụng lại các đối tượng hiện có. . Bảng dưới đây tóm tắt một số hệ tọa độ hữu ích, mô tả của từng hệ và đối tượng chuyển đổi để đi từ từng hệ tọa độ sang tọa độ hiển thị. Trong cột "Đối tượng chuyển đổi",

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
0 là phiên bản
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
2 là phiên bản
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
3 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
4 là phiên bản
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
5

Hệ tọa độ

Sự miêu tả

Chuyển đổi đối tượng từ hệ thống sang hiển thị

"dữ liệu"

Hệ tọa độ của dữ liệu trong Axes

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6

"trục"

Hệ tọa độ của

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1;

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
8

"hình phụ"

Hệ tọa độ của

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
5; . Nếu một hình không có hình con, điều này giống như
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
10

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
11

"nhân vật"

Hệ tọa độ của

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
3;

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
13

"con số inch"

Hệ tọa độ của

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
3 tính bằng inch;

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15

"xaxis", "yaxis"

Các hệ tọa độ hỗn hợp, sử dụng tọa độ dữ liệu theo một hướng và trục tọa độ theo hướng khác

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
16,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
17

"trưng bày"

Hệ tọa độ gốc của đầu ra;

Việc giải thích chính xác các đơn vị phụ thuộc vào back end. Ví dụ: đó là pixel cho Agg và điểm cho svg/pdf

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
18, hoặc
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
19

Các đối tượng

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
10 không quen thuộc với các hệ tọa độ nguồn và đích, tuy nhiên các đối tượng được đề cập trong bảng trên được xây dựng để nhận đầu vào trong hệ tọa độ của chúng và chuyển đổi đầu vào thành hệ tọa độ hiển thị. Đó là lý do tại sao hệ tọa độ hiển thị có
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
18 cho cột "Đối tượng chuyển đổi" -- nó đã có trong tọa độ hiển thị. Các quy ước đặt tên và đích là một trợ giúp để theo dõi các hệ tọa độ và biến đổi "tiêu chuẩn" có sẵn

Các phép biến đổi cũng biết cách tự đảo ngược [thông qua

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
12] để tạo ra một phép biến đổi từ hệ tọa độ đầu ra trở lại hệ tọa độ đầu vào. Ví dụ:
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6 chuyển đổi các giá trị trong tọa độ dữ liệu thành tọa độ hiển thị và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
14 là một
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15 chuyển từ tọa độ hiển thị sang tọa độ dữ liệu. Điều này đặc biệt hữu ích khi xử lý các sự kiện từ giao diện người dùng, thường xảy ra trong không gian hiển thị và bạn muốn biết nhấp chuột hoặc nhấn phím xảy ra ở đâu trong hệ thống tọa độ dữ liệu của mình

Lưu ý rằng việc chỉ định vị trí của Nghệ sĩ trong tọa độ hiển thị có thể thay đổi vị trí tương đối của họ nếu

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
16 hoặc kích thước của hình thay đổi. Điều này có thể gây nhầm lẫn khi in hoặc thay đổi độ phân giải màn hình vì đối tượng có thể thay đổi vị trí và kích thước. Do đó, điều phổ biến nhất đối với các nghệ sĩ được đặt trong Axes hoặc hình là đặt biến đổi của họ thành một thứ khác với
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
19;

tọa độ dữ liệu#

Hãy bắt đầu với tọa độ được sử dụng phổ biến nhất, hệ tọa độ dữ liệu. Bất cứ khi nào bạn thêm dữ liệu vào các trục, Matplotlib sẽ cập nhật các giới hạn dữ liệu, thường được cập nhật nhất với các phương thức

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
10 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
11. Ví dụ: trong hình bên dưới, giới hạn dữ liệu trải dài từ 0 đến 10 trên trục x và -1 đến 1 trên trục y

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
3

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 6 để chuyển đổi từ dữ liệu của mình sang hệ tọa độ hiển thị, một điểm đơn lẻ hoặc một chuỗi các điểm như minh họa bên dưới

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]

Bạn có thể sử dụng phương pháp

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
13 để tạo một biến đổi sẽ đưa bạn từ tọa độ hiển thị sang tọa độ dữ liệu

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]

Nếu bạn đang gõ cùng với hướng dẫn này, các giá trị chính xác của tọa độ hiển thị có thể khác nếu bạn có kích thước cửa sổ hoặc cài đặt dpi khác. Tương tự như vậy, trong hình bên dưới, các điểm được gắn nhãn hiển thị có thể không giống như trong phiên ipython vì mặc định kích thước hình tài liệu là khác nhau

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 14
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15 để cập nhật tọa độ hình trên các bản vẽ hình; . Event handling and picking.

Khi bạn thay đổi giới hạn x hoặc y của các trục, giới hạn dữ liệu được cập nhật để quá trình chuyển đổi tạo ra một điểm hiển thị mới. Lưu ý rằng khi chúng ta chỉ thay đổi ylim, chỉ tọa độ hiển thị y bị thay đổi và khi chúng ta thay đổi cả xlim, cả hai đều bị thay đổi. Thông tin thêm về điều này sau khi chúng ta nói về

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
16

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1

Tọa độ trục#

Sau hệ tọa độ dữ liệu, các trục có lẽ là hệ tọa độ hữu ích thứ hai. Ở đây, điểm [0, 0] nằm dưới cùng bên trái của các trục hoặc ô con của bạn, [0. 5, 0. 5] là trung tâm và [1. 0, 1. 0] ở trên cùng bên phải. Bạn cũng có thể tham khảo các điểm bên ngoài phạm vi, vì vậy [-0. 1, 1. 1] ở bên trái và phía trên các trục của bạn. Hệ tọa độ này cực kỳ hữu ích khi đặt văn bản trong các trục của bạn, bởi vì bạn thường muốn bong bóng văn bản ở một vị trí cố định, v.v. g. , phía trên bên trái của ngăn trục và giữ cố định vị trí đó khi bạn xoay hoặc thu phóng. Đây là một ví dụ đơn giản tạo bốn bảng và gắn nhãn 'A', 'B', 'C', 'D' như bạn thường thấy trên các tạp chí

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 8 để đặt văn bản. Tuy nhiên, đây là một ví dụ ngớ ngẩn vẽ một số dấu chấm ngẫu nhiên trong không gian dữ liệu và phủ một lớp
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
18 bán trong suốt ở giữa các trục có bán kính bằng một phần tư trục -- nếu các trục của bạn không bảo toàn tỷ lệ khung hình [xem . Sử dụng công cụ xoay/thu phóng để di chuyển xung quanh hoặc thay đổi dữ liệu xlim và ylim theo cách thủ công, bạn sẽ thấy dữ liệu di chuyển, nhưng vòng tròn sẽ vẫn cố định vì nó không nằm trong tọa độ dữ liệu và sẽ luôn nằm ở tâm của các trục

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
7

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 70,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
71,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
72,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
73] nhưng vì mục đích giảng dạy, chúng tôi sẽ triển khai khoảng ngang ở đây bằng cách sử dụng phép biến đổi hỗn hợp. Thủ thuật này chỉ hoạt động đối với các phép biến đổi tách rời, giống như bạn thấy trong các hệ tọa độ Descartes thông thường, nhưng không hoạt động đối với các phép biến đổi không thể tách rời như
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
74

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
3

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 75 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
76. Vì vậy, trong ví dụ trên, cuộc gọi đến
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
77 có thể được thay thế bằng
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
78

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
8

Vẽ đồ thị trong tọa độ vật lý#

Đôi khi chúng ta muốn một đối tượng có kích thước vật lý nhất định trên cốt truyện. Ở đây chúng tôi vẽ vòng tròn tương tự như trên, nhưng trong tọa độ vật lý. Nếu được thực hiện một cách tương tác, bạn có thể thấy rằng việc thay đổi kích thước của hình không thay đổi độ lệch của hình tròn so với góc dưới bên trái, không thay đổi kích thước của nó và hình tròn vẫn là hình tròn bất kể tỷ lệ khung hình của các trục là bao nhiêu

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
9

ax.transData] Out[14]: In [15]: ax.transData.transform[[5, 0]] Out[15]: array[[ 335.175, 247. ]] In [16]: ax.transData.transform[[[5, 0], [1, 2]]] Out[16]: array[[[ 335.175, 247. ], [ 132.435, 642.2 ]]] 0

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 79 để di chuyển nó đến đúng vị trí trong hệ tọa độ
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6. Người trợ giúp này được khởi tạo với

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
1

trong đó xt và yt là độ dịch chuyển và scale_trans là phép biến đổi chia tỷ lệ xt và yt tại thời điểm chuyển đổi trước khi áp dụng độ lệch

Lưu ý việc sử dụng toán tử cộng trên các phép biến đổi bên dưới. Mã này nói. trước tiên hãy áp dụng phép biến đổi tỷ lệ

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15 để làm cho hình elip có kích thước phù hợp, nhưng vẫn có tâm ở [0, 0], sau đó dịch dữ liệu sang
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
32 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
33 trong không gian dữ liệu

Trong sử dụng tương tác, hình elip giữ nguyên kích thước ngay cả khi các giới hạn trục được thay đổi thông qua thu phóng

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
2

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 79 trước, thì trước tiên,
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
32 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
33 sẽ được chuyển đổi để hiển thị tọa độ [
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
37 trên màn hình 200 dpi] và sau đó các tọa độ đó sẽ được điều chỉnh theo tỷ lệ của
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15 đẩy tâm của hình elip ra khỏi màn hình [i. e.
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
39]

Sử dụng các phép biến đổi offset để tạo hiệu ứng đổ bóng#

Một cách sử dụng khác của

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
79 là tạo một phép biến đổi mới được bù trừ từ một phép biến đổi khác, e. g. , để đặt một đối tượng dịch chuyển một chút so với đối tượng khác. Thông thường, bạn muốn dịch chuyển ở một số kích thước vật lý, chẳng hạn như điểm hoặc inch thay vì ở tọa độ dữ liệu, để hiệu ứng dịch chuyển không đổi ở các mức thu phóng và cài đặt dpi khác nhau

Một cách sử dụng hiệu ứng offset là tạo hiệu ứng đổ bóng, trong đó bạn vẽ một đối tượng giống hệt đối tượng đầu tiên ngay bên phải đối tượng đó và ngay bên dưới đối tượng đó, điều chỉnh thứ tự z để đảm bảo bóng đổ được vẽ trước rồi mới đến đối tượng.

Ở đây chúng tôi áp dụng các phép biến đổi theo thứ tự ngược lại với việc sử dụng

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
79 ở trên. Đầu tiên, biểu đồ được tạo ở tọa độ dữ liệu [
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6] và sau đó được dịch chuyển bởi các điểm
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
83 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
84 bằng cách sử dụng
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
15. [Trong kiểu chữ, một điểm là 1/72 inch và bằng cách chỉ định độ lệch của bạn theo điểm, hình của bạn sẽ trông giống nhau bất kể độ phân giải dpi được lưu trong. ]

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
3

ax.transData.inverted[] In [42]: type[inv] Out[42]: In [43]: inv.transform[[335.175, 247.]] Out[43]: array[[ 5., 0.]] 86, hàm này trả về một biến đổi mới có thêm độ lệch. Vì vậy, ở trên chúng ta có thể đã làm

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
4

Đường ống chuyển đổi #

Phép biến đổi

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6 mà chúng ta đã làm việc trong hướng dẫn này là sự kết hợp của ba phép biến đổi khác nhau bao gồm quy trình chuyển đổi từ dữ liệu -> tọa độ hiển thị. Michael Droettboom đã triển khai khung chuyển đổi, quan tâm đến việc cung cấp một API rõ ràng tách biệt các phép chiếu và tỷ lệ phi tuyến tính xảy ra trong các biểu đồ cực và logarit, khỏi các phép biến đổi affine tuyến tính xảy ra khi bạn xoay và thu phóng. Có một hiệu quả ở đây, bởi vì bạn có thể xoay và phóng to các trục của mình, điều này ảnh hưởng đến phép biến đổi affine, nhưng bạn có thể không cần tính toán các quy mô hoặc phép chiếu phi tuyến tính đắt tiền tiềm tàng trên các sự kiện điều hướng đơn giản. Cũng có thể nhân các ma trận biến đổi affine với nhau, sau đó áp dụng chúng cho tọa độ trong một bước. Điều này không đúng với tất cả các biến đổi có thể

Đây là cách thể hiện

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
6 được định nghĩa trong lớp
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
1 trục cơ bản có thể phân tách

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
5

Chúng tôi đã được giới thiệu về ví dụ

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
90 ở trên trong Tọa độ trục , ánh xạ [0, 0], [1, 1 .

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
91 là phép biến đổi đưa bạn từ dữ liệu sang tọa độ trục; . e. , nó ánh xạ chế độ xem của bạn xlim và ylim tới không gian đơn vị của các trục [và sau đó
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
90 lấy không gian đơn vị đó để hiển thị không gian]. Chúng ta có thể thấy điều này trong hành động ở đây

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
6

và chúng ta có thể sử dụng phép biến đổi ngược tương tự này để chuyển từ tọa độ trục đơn vị trở lại tọa độ dữ liệu

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
7

Phần cuối cùng là thuộc tính

In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
93, chịu trách nhiệm cho việc chia tỷ lệ phi tuyến tính tùy chọn của dữ liệu, e. g. , đối với trục logarit. Khi một Trục được thiết lập ban đầu, điều này chỉ được đặt thành biến đổi nhận dạng, vì các trục Matplotlib cơ bản có tỷ lệ tuyến tính, nhưng khi bạn gọi một hàm chia tỷ lệ logarit như
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
94 hoặc đặt rõ ràng tỷ lệ thành logarit với
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
95, thì thuộc tính
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
96 là . Các biến đổi tỷ lệ là các thuộc tính của các phiên bản
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
97 và
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
98
In [41]: inv = ax.transData.inverted[]

In [42]: type[inv]
Out[42]: 

In [43]: inv.transform[[335.175,  247.]]
Out[43]: array[[ 5.,  0.]]
99 tương ứng. Ví dụ: khi bạn gọi
In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
00, xaxis sẽ cập nhật tỷ lệ của nó thành phiên bản
In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
01

Đối với các trục không thể tách rời của PolarAxes, có một phần nữa cần xem xét, phép biến đổi phép chiếu.

In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
02
In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
03 tương tự như đối với Trục matplotlib có thể tách rời điển hình, với một mảnh bổ sung
In [14]: type[ax.transData]
Out[14]: 

In [15]: ax.transData.transform[[5, 0]]
Out[15]: array[[ 335.175,  247.   ]]

In [16]: ax.transData.transform[[[5, 0], [1, 2]]]
Out[16]:
array[[[ 335.175,  247.   ],
       [ 132.435,  642.2  ]]]
04

Chủ Đề