Tạo nhiều hơn một biểu đồ trong cùng một ô IPython Notebook


87

Tôi đã bắt đầu IPython Notebook của mình với

ipython notebook --pylab inline

Đây là mã của tôi trong một ô

df['korisnika'].plot()
df['osiguranika'].plot()

Điều này đang hoạt động tốt, nó sẽ vẽ hai đường, nhưng trên cùng một biểu đồ.

Tôi muốn vẽ từng dòng trên một biểu đồ riêng biệt. Và sẽ thật tuyệt nếu các biểu đồ nằm cạnh nhau chứ không phải nối tiếp nhau.

Tôi biết rằng tôi có thể đặt dòng thứ hai vào ô tiếp theo và sau đó tôi sẽ nhận được hai biểu đồ. Nhưng tôi muốn các biểu đồ gần nhau, vì chúng đại diện cho cùng một đơn vị logic.

Câu trả lời:


88

Trước tiên, hãy tạo nhiều trục và chuyển chúng vào hàm âm mưu Pandas, như:

fig, axs = plt.subplots(1,2)

df['korisnika'].plot(ax=axs[0])
df['osiguranika'].plot(ax=axs[1])

Nó vẫn cung cấp cho bạn 1 con số, nhưng với hai lô khác nhau cạnh nhau.


3
Điều này đang hoạt động. Bây giờ tôi sẽ không thay đổi kích thước của hình ảnh. Tôi có thể làm điều đó với fig, axs = plt.subplots (1,2, figsize = (15, 5)). Có một số cách để đặt kích thước của hình ảnh theo pixel?
WebOrCode

1
Sử dụng figsize thực sự là một cách, đó là kích thước tính bằng inch. Có bao nhiêu pixel sẽ phụ thuộc vào dpi, được cố định để hiển thị trên màn hình. Nhưng để lưu nó có thể được thiết lập bằng cách thêm từ khóa dpi.
Rutger Kassies

2
Nó không phải là hoàn toàn chính xác rằng dpi là cố định để hiển thị trên màn hình (cũng là nó không phải là). IPython hiển thị hình ảnh hoàn toàn dựa trên kích thước pixel của chúng và kích thước pixel đó được xác định trong matplotlib bằng cách nhân kích thước hình tính bằng inch với savefig.dpicấu hình. Các số liệu nội tuyến sử dụng cùng một đường dẫn savefig như khi ghi tệp.
minrk

Cảm ơn vì đã chỉ ra điều đó, tôi không biết nó hoạt động như vậy. Tuy nhiên, sẽ không thuận tiện hơn nếu dpi hiển thị cũng được tính đến (cũng như), vì điều đó dễ thiết lập khi tạo hình. Đối với savefig.dpi, tôi không biết cách nào khác hơn mpl.rcParams['savefig.dpi'] = 120. Đối với dpi hiển thị, có một từ khóa ở rất nhiều nơi, giống như plt.figure(dpi=120), nhưng điều đó đã bị bỏ qua bây giờ, do đó giả định sai của tôi về nó đã được sửa.
Rutger Kassies

101

Bạn cũng có thể gọi hàm show () sau mỗi ô. ví dụ

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()

1
Tuyệt vời, nhưng làm thế nào để đặt vị trí hình ảnh cốt truyện, như (2,2) hoặc (1,2)?
Pythoner

3
Với tùy chọn này, các ô nhất thiết phải xuất hiện lần lượt. Để kiểm soát nhiều hơn về bố cục tổng thể, pyplot.subplots()là cách để đi.
Eric O Lebigot

1
Tôi đã xóa liên kết.
Tooblippe

12

Một cái gì đó như thế này:

import matplotlib.pyplot as plt
... code for plot 1 ...
plt.show()
... code for plot 2...
plt.show()

Lưu ý rằng điều này cũng sẽ hoạt động nếu bạn đang sử dụng seaborngói để vẽ biểu đồ:

import matplotlib.pyplot as plt
import seaborn as sns
sns.barplot(... code for plot 1 ...) # plot 1
plt.show()
sns.barplot(... code for plot 2 ...) # plot 2
plt.show()

11

Một cách khác, cho sự đa dạng. Mặc dù cái này có phần kém linh hoạt hơn những cái khác. Thật không may, các biểu đồ xuất hiện bên trên biểu đồ khác, thay vì cạnh nhau, mà bạn đã yêu cầu trong câu hỏi ban đầu của mình. Nhưng nó rất ngắn gọn.

df.plot(subplots=True)

Nếu khung dữ liệu có nhiều hơn hai chuỗi và bạn chỉ muốn vẽ hai chuỗi đó, bạn sẽ cần phải thay thế dfbằng df[['korisnika','osiguranika']].


2

Tôi không biết đây có phải là chức năng mới hay không, nhưng điều này sẽ trình bày trên các số liệu riêng biệt:

df.plot(y='korisnika')
df.plot(y='osiguranika')

trong khi điều này sẽ vẽ trên cùng một hình: (giống như mã trong op)

df.plot(y=['korisnika','osiguranika'])

Tôi tìm thấy câu hỏi này vì tôi đang sử dụng phương pháp cũ và muốn chúng vẽ theo cùng một hình, vì vậy câu hỏi của bạn thực sự là câu trả lời của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.