2

I'm wondering how to have a log-log plot for visualizing the frequency of elements in a list, for example:

my_list=[1,2,3,3,3,4,1,2,5,2,10,4,5,3,3,3,2,1]

I plotted data using a histogram:

plt.hist(my_list, label='Frequency Distribution of matches')
plt.legend()
plt.ylabel('Frequency')

But it would be better to visualize it as log-log.

1 Answer 1

2

plt.hist includes a log param, which behaves like plt.yscale('log') since it only scales the y-axis:

log: If True, the histogram axis will be set to a log scale.

To also scale the x-axis, combine it with plt.xscale('log'):

plt.hist(my_list, log=True)
plt.xscale('log')

If you want equal-width bars, define bins as 10 ** edges:

start, stop = np.log10(min(my_list)), np.log10(max(my_list))
bins = 10 ** np.linspace(start, stop, 10)

plt.hist(my_list, log=True, bins=bins)
ax.set_xscale('log')

To get a log-log line plot of the frequencies, use plt.stairs (requires matplotlib 3.4+) with np.histogram:

plt.stairs(*np.histogram(my_list))
plt.yscale('log')
plt.xscale('log')

Sign up to request clarification or add additional context in comments.

3 Comments

thank you, tdy. Would it be possible to plot, instead of a histogram, a line plot using log=True?
@Math do you mean a log-log line plot of frequencies? if so, use plt.stairs (requires matplotlib 3.4+) with np.histogram (answer updated)
see stackoverflow.com/a/68201845/13138364 for more details on stair plots

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.