Any way to create histogram with matplotlib.pyplot without plotting the histogram?

前端 未结 4 2075

I am using matplotlib.pyplot to create histograms. I\'m not actually interested in the plots of these histograms, but interested in the frequencies and bins (I know I can write

相关标签:
4条回答
  • 2021-02-20 06:20

    You can use np.histogram2d (for 2D histogram) or np.histogram (for 1D histogram):

    hst = np.histogram(A, bins)
    hst2d = np.histogram2d(X,Y,bins)
    

    Output form will be the same as plt.hist and plt.hist2d, the only difference is there is no plot.

    0 讨论(0)
  • 2021-02-20 06:22

    I don't know if I'm understanding your question very well, but here, you have an example of a very simple home-made histogram (in 1D or 2D), each one inside a function, and properly called:

    import numpy as np
    import matplotlib.pyplot as plt
    
    def func2d(x, y, nbins):
        histo, xedges, yedges = np.histogram2d(x,y,nbins)
        plt.plot(x,y,'wo',alpha=0.3)
        plt.imshow(histo.T, 
                   extent=[xedges.min(),xedges.max(),yedges.min(),yedges.max()],
                   origin='lower', 
                   interpolation='nearest', 
                   cmap=plt.cm.hot)
        plt.show()
    
    def func1d(x, nbins):
        histo, bin_edges = np.histogram(x,nbins)
        bin_center = 0.5*(bin_edges[1:] + bin_edges[:-1])
        plt.step(bin_center,histo,where='mid')
        plt.show()
    
    x = np.random.normal(1.5,1.0, (1000,1000))
    
    func1d(x[0],40)
    func2d(x[0],x[1],40)
    

    Of course, you may check if the centering of the data is right, but I think that the example shows some useful things about this topic.

    My recommendation: Try to avoid any loop in your code! They kill the performance. If you look, In my example there aren't loops. The best practice in numerical problems with python is avoiding loops! Numpy has a lot of C-implemented functions that do all the hard looping work.

    0 讨论(0)
  • 2021-02-20 06:37

    If you would like to simply compute the histogram (that is, count the number of points in a given bin) and not display it, the np.histogram() function is available

    0 讨论(0)
  • 2021-02-20 06:44

    No.

    But you can bypass the pyplot:

    import matplotlib.pyplot
    
    fig = matplotlib.figure.Figure()
    ax = matplotlib.axes.Axes(fig, (0,0,0,0))
    numeric_results = ax.hist(data)
    del ax, fig
    

    It won't impact active axes and figures, so it would be ok to use it even in the middle of plotting something else.

    This is because any usage of plt.draw_something() will put the plot in current axis - which is a global variable.

    0 讨论(0)
提交回复
热议问题