2014-08-28 24 views
13

Tôi muốn tạo biểu đồ sau (xem hình bên dưới) lấy từ cuốn sách "Số liệu thống kê suy nghĩ". Tuy nhiên, tôi không thể có được chúng trên cùng một âm mưu. Mỗi DataFrame có subplot riêng của nó.Nhiều biểu đồ trong Pandas

Tôi có đoạn mã sau:

import nsfg 
import matplotlib.pyplot as plt 
df = nsfg.ReadFemPreg() 
preg = nsfg.ReadFemPreg() 
live = preg[preg.outcome == 1] 

first = live[live.birthord == 1] 
others = live[live.birthord != 1] 

#fig = plt.figure() 
#ax1 = fig.add_subplot(111) 

first.hist(column = 'prglngth', bins = 40, color = 'teal', \ 
      alpha = 0.5) 
others.hist(column = 'prglngth', bins = 40, color = 'blue', \ 
      alpha = 0.5) 
plt.show() 

Đoạn mã trên không hoạt động khi tôi sử dụng rìu = ax1 như đề xuất trong: pandas multiple plots not working as hists cũng không ví dụ này làm những gì tôi cần: Overlaying multiple histograms using pandas. Khi tôi sử dụng mã như nó, nó tạo ra hai cửa sổ với biểu đồ. Bất kỳ ý tưởng làm thế nào để kết hợp chúng?

Dưới đây là một ví dụ về cách tôi muốn con số cuối cùng để xem xét: enter image description here

Trả lời

21

Theo như tôi có thể nói, gấu trúc có thể không xử lý tình trạng này. Đó là ok vì tất cả các phương pháp âm mưu của họ chỉ để thuận tiện. Bạn sẽ cần phải sử dụng matplotlib trực tiếp. Đây là cách tôi làm điều đó:

%matplotlib inline 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas 
#import seaborn 
#seaborn.set(style='ticks') 

np.random.seed(0) 
df = pandas.DataFrame(np.random.normal(size=(37,2)), columns=['A', 'B']) 
fig, ax = plt.subplots() 

a_heights, a_bins = np.histogram(df['A']) 
b_heights, b_bins = np.histogram(df['B'], bins=a_bins) 

width = (a_bins[1] - a_bins[0])/3 

ax.bar(a_bins[:-1], a_heights, width=width, facecolor='cornflowerblue') 
ax.bar(b_bins[:-1]+width, b_heights, width=width, facecolor='seagreen') 
#seaborn.despine(ax=ax, offset=10) 

Và đó mang lại cho tôi: enter image description here

+0

Trong trường hợp của tôi, điều này cho biết thêm một sự bù đắp cho dữ liệu. Điều đó có thể không được đánh giá cao trong ví dụ, vì dữ liệu là ngẫu nhiên. Tuy nhiên, tôi không thể tìm ra đâu là lỗi – kiril

+0

Không có lỗi mà tôi có thể nhìn thấy. Chiều rộng cho mỗi thùng trong biểu đồ được biểu thị bằng chiều rộng kết hợp của cả hai thanh. Không phải cách rõ ràng nhất để đại diện cho dữ liệu, nhưng nó hoạt động như mong đợi. @kiril –

0

Dưới đây là đoạn mã, Trong trường hợp của tôi, tôi có một cách rõ ràng các thùng và phạm vi được chỉ định vì tôi không xử lý việc loại bỏ ngoại lệ như tác giả của cuốn sách.

fig, ax = plt.subplots() 
ax.hist([first.prglngth, others.prglngth], 10, (27, 50), histtype="bar", label=("First", "Other")) 
ax.set_title("Histogram") 
ax.legend() 

Tham khảo Buồng đa âm Matplotlib có kích thước khác nhau example.

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