2011-07-28 31 views
56

Theo như tôi biết tùy chọn Log = True trong hàm biểu đồ chỉ đề cập đến trục y.Làm thế nào để có các logarit trong một biểu đồ Python

P.hist(d,bins=50,log=True,alpha=0.5,color='b',histtype='step') 

Tôi cần các thùng được cách nhau bằng nhau trong log10. Có cái gì đó có thể làm điều này?

+0

Bạn phải chia số lượng trong mỗi thùng theo chiều rộng thùng nếu bạn làm như vậy! – Peaceful

Trả lời

90

sử dụng logspace() để tạo chuỗi hình học và chuyển nó tới tham số thùng. Và thiết lập quy mô của xaxis để ghi log.

import pylab as pl 
import numpy as np 

data = np.random.normal(size=10000) 
pl.hist(data, bins=np.logspace(np.log10(0.1),np.log10(1.0), 50)) 
pl.gca().set_xscale("log") 
pl.show() 

enter image description here

+15

lưu ý rằng 'np.logspace (0.1.1.0, ...)' sẽ tạo một phạm vi từ '10 ** 0.1' đến' 10 ** 1.0', không phải từ '0.1' đến' 1.0' –

+11

phải là 'np .logspace (np.log10 (0,1), np.log10 (1.0), 50) ' – OrangeSherbet

13

Cách trực tiếp nhất là chỉ cần tính toán log10 các giới hạn, tính toán thùng tuyến tính cách nhau, và sau đó chuyển đổi trở lại bằng cách tăng sức mạnh của 10, như sau:

import pylab as pl 
import numpy as np 

data = np.random.normal(size=10000) 

MIN, MAX = .01, 10.0 

pl.figure() 
pl.hist(data, bins = 10 ** np.linspace(np.log10(MIN), np.log10(MAX), 50)) 
pl.gca().set_xscale("log") 
pl.show() 

log histogram from .01 to 10 http://i57.tinypic.com/f1z8uu.png

0

Bên cạnh đó với những gì đã tuyên bố, biểu diễn này trên gấu trúc dataframes làm việc cũng như:

some_column_hist = dataframe['some_column'].plot(bins=np.logspace(-2, np.log10(max_value), 100), kind='hist', loglog=True, xlim=(0,max_value)) 

Tôi sẽ cảnh báo, có thể có vấn đề với việc chuẩn hóa thùng. Mỗi thùng là lớn hơn so với trước đó, và do đó phải được chia cho kích thước của nó để bình thường hóa các tần số trước khi âm mưu, và có vẻ như không phải giải pháp của tôi, cũng không phải giải pháp của HYRY cho việc này.

Nguồn: https://arxiv.org/pdf/cond-mat/0412004.pdf

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