KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am using log plots as follows in matplotlib, roughly as follows. plt.scatter(x, y) # use log scales plt.gca().set_xscale('log') plt.gca().set_yscale('log') # set x,y limits plt.xlim([-1, 3]) plt.ylim([-1, 3]) The first problem is that without x,y limits, matplotlib sets scales such that most of the data is not visible -- for some reason, it does not use the minimum and maximum values along the x and y dimensions, so the default plot is extremely misleading. when I do set the limits manually using plt.xlim, plt.ylim, which I interpret to be -1 to 3 in log10 units (i.e. 1/10th to 3000), I get a plot like the one attached. The axes labels here don't make sense: it goes from 10^1 to 10^3. What's going on here? I'm including a more detailed example below that shows all these problems with data: import matplotlib import matplotlib.pyplot as plt from numpy import * x = array([58, 0, 20, 2, 2, 0, 12, 17, 16, 6, 257, 0, 0, 0, 0, 1, 0, 13, 25, 9, 13, 94, 0, 0, 2, 42, 83, 0, 0, 157, 27, 1, 80, 0, 0, 0, 0, 2, 0, 41, 0, 4, 0, 10, 1, 4, 63, 6, 0, 31, 3, 5, 0, 61, 2, 0, 0, 0, 17, 52, 46, 15, 67, 20, 0, 0, 20, 39, 0, 31, 0, 0, 0, 0, 116, 0, 0, 0, 11, 39, 0, 17, 0, 59, 1, 0, 0, 2, 7, 0, 66, 14, 1, 19, 0, 101, 104, 228, 0, 31]) y = array([60, 0, 9, 1, 3, 0, 13, 9, 11, 7, 177, 0, 0, 0, 0, 1, 0, 12, 31, 10, 14, 80, 0, 0, 2, 30, 70, 0, 0, 202, 26, 1, 96, 0, 0, 0, 0, 1, 0, 43, 0, 6, 0, 9, 1, 3, 32, 6, 0, 20, 1, 2, 0, 52, 1, 0, 0, 0, 26, 37, 44, 13, 74, 15, 0, 0, 24, 36, 0, 22, 0, 0, 0, 0, 75, 0, 0, 0, 9, 40, 0, 14, 0, 51, 2, 0, 0, 1, 9, 0, 59, 9, 0, 23, 0, 80, 81, 158, 0, 27]) c = 0.01 plt.figure(figsize=(5,3)) s = plt.subplot(1, 3, 1) plt.scatter(x + c, y + c) plt.title('Unlogged') s = plt.subplot(1, 3, 2) plt.scatter(x + c, y + c) plt.gca().set_xscale('log', basex=2) plt.gca().set_yscale('log', basey=2) plt.title('Logged') s
Tags (comma-separated)
Save Edits
Cancel