2012-09-06 11 views
24

Tôi có đếm dữ liệu (100 trong số đó), mỗi dữ liệu tương ứng với một thùng (0 đến 99). Tôi cần vẽ các dữ liệu này dưới dạng biểu đồ. Tuy nhiên, biểu đồ đếm các dữ liệu đó và không vẽ chính xác vì dữ liệu của tôi đã được binned.biểu đồ đơn giản python cho dữ liệu được tách ra

import random 
import matplotlib.pyplot as plt 
x = random.sample(range(1000), 100) 
xbins = [0, len(x)] 
#plt.hist(x, bins=xbins, color = 'blue') 
#Does not make the histogram correct. It counts the occurances of the individual counts. 

plt.plot(x) 
#plot works but I need this in histogram format 
plt.show() 
+0

Bạn có thể sử dụng mã trong [answer] (http://stackoverflow.com/a/37559471/2087463) hoặc [answer] này (http://stackoverflow.com/a/37548733/2087463) làm ví dụ cho việc vẽ sơ đồ đã được binned dữ liệu như biểu đồ. – tmthydvnprt

Trả lời

33

Nếu tôi hiểu những gì bạn muốn đạt được một cách chính xác thì sau đây sẽ cho bạn những gì bạn muốn:

import matplotlib.pyplot as plt 
plt.bar(range(0,100), x) 
plt.show() 

Nó không sử dụng hist(), nhưng có vẻ như bạn đã đặt dữ liệu của bạn vào thùng nên không cần.

+0

Cảm ơn redrah. Nó đã giúp – Curious

+0

Nếu bạn muốn 'bar' trông giống như đầu ra' hist' sử dụng mã trong [answer] (http://stackoverflow.com/a/37559471/2087463) hoặc [answer] này (http: //stackoverflow.com/a/37548733/2087463) làm ví dụ để vẽ sơ đồ biểu đồ qua âm mưu 'bar'. – tmthydvnprt

0

Hãy xem biểu đồ examples trong tài liệu matplotlib. Bạn nên sử dụng hàm hist. Nếu nó theo mặc định không mang lại kết quả bạn mong đợi, sau đó chơi xung quanh với các đối số để hist và chuẩn bị/chuyển đổi/sửa đổi dữ liệu của bạn trước khi cung cấp nó cho hist. Nó không thực sự rõ ràng với tôi những gì bạn muốn đạt được, vì vậy tôi không thể giúp tại thời điểm này.

+0

sau khi thử một lúc tôi hỏi câu hỏi này. Mối quan tâm duy nhất của tôi là nếu tôi có thể đạt được những gì mã trên làm với chức năng hist. – Curious

12

Vấn đề là với xbins của bạn. Bạn hiện có

xbins = [0, len(x)] 

sẽ cung cấp cho bạn danh sách [0, 100]. Điều này có nghĩa là bạn sẽ chỉ thấy 1 thùng (không phải 2) được giới hạn bên dưới bằng 0 và cao hơn 100. Tôi không hoàn toàn chắc chắn những gì bạn muốn từ biểu đồ của mình. Nếu bạn muốn có 2 thùng không đều nhau, bạn có thể sử dụng

xbins = [0, 100, 1000] 

để hiển thị mọi thứ dưới 100 trong một thùng và mọi thứ khác trong thùng khác. Một tùy chọn khác sẽ là sử dụng một giá trị số nguyên để có được một số lượng nhất định các thùng có khoảng cách đều nhau. Nói cách khác làm

plt.hist(x, bins=50, color='blue') 

nơi thùng là số lượng thùng mong muốn.

Trên một lưu ý phụ, bất cứ khi nào tôi không thể nhớ làm thế nào để làm điều gì đó với matplotlib, tôi thường sẽ chỉ cần đi đến thumbnail gallery và tìm một ví dụ trông nhiều hơn hoặc ít hơn những gì tôi đang cố gắng để thực hiện. Những ví dụ này đều có mã nguồn kèm theo để chúng khá hữu ích. Các documentation cho matplotlib cũng có thể rất tiện dụng.

2

Tôi khá chắc chắn rằng sự cố của bạn là thùng. Nó không phải là một danh sách các giới hạn mà là một danh sách các cạnh bin.

xbins = [0,len(x)] 

lợi nhuận trong trường hợp của bạn một danh sách có chứa [0, 100] chỉ ra rằng bạn muốn có một cạnh bin ở mức 0 và một ở 100. Vì vậy, bạn có được một thùng từ 0 đến 100. gì bạn muốn là:

xbins = [x for x in range(len(x))] 

Lợi nhuận nào:

[0,1,2,3, ... 99] 

Cho biết các cạnh thùng bạn muốn.

7

Tuyệt vời, cảm ơn! Dưới đây là những gì tôi nghĩ rằng OP muốn thực hiện:

import random 
import matplotlib.pyplot as plt 
x=[x/1000 for x in random.sample(range(100000),100)] 
xbins=range(0,len(x)) 
plt.hist(x, bins=xbins, color='blue') 
plt.show() 
0

Bạn cũng có thể đạt được điều này bằng cách sử dụng lịch sử của matplotlib, không cần phải vón cục.Về cơ bản bạn đã tạo các thùng như xbins. Trong trường hợp này, x sẽ là trọng số của bạn.

plt.hist(xbins,weights=x)