Opened 10 years ago

Closed 10 years ago

#13430 closed defect (worksforme)

log plots blank with points, but fine with lines

Reported by: Jason Grout Owned by: jason, was
Priority: major Milestone: sage-duplicate/invalid/wontfix
Component: graphics Keywords:
Cc: Karl-Dieter Crisman, Punarbasu Purkayastha, Merged in:
Authors: Reviewers: Punarbasu Purkayastha
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges


Inspired by, look at this. The following three plots are all blank (and the log axes also seem blank)

import mpmath
ber = [0.5*mpmath.erfc(i)/sqrt(2) for i in range(10)]

while the following (obtained by changing points to line) seem to work fine.

import mpmath
ber = [0.5*mpmath.erfc(i)/sqrt(2) for i in range(10)]

Change History (5)

comment:1 Changed 10 years ago by Punarbasu Purkayastha

The problem seems more generic. This works:

sage: list_plot_semilogy([10^-i for i in range(3)])

This doesn't work:

sage: list_plot_semilogy([10^-i for i in range(4)])

So, the bug might be in points itself, or in matplotlib.

comment:2 Changed 10 years ago by Punarbasu Purkayastha

About the second plot in comment:1 - this is fixed on adding #13528. Don't ask me why. ^_^

About the original question, the problem with the plot is that the point x=0 is present in the plot. This is a documented fail situation - look at the doc list_plot? or point2d?, both of which mention that non-positive points should not be used in the log scale. This is the reason why point works with semilogy scale and not with semilogx or loglog.

Instead, both these commands work:

sage: points(zip(*(range(1,len(ber)+1), ber))).show(scale='loglog')
sage: points(zip(*(range(1,len(ber)+1), ber))).show(scale='semilogx')

If you want to use the x=0 point, then use list_plot along with plotjoined=True, linestyle='', marker='o':

sage: list_plot(list(enumerate(ber)), plotjoined=True, linestyle='', marker='o').show(scale='semilogx')
sage: list_plot(list(enumerate(ber)), plotjoined=True, linestyle='', marker='o').show(scale='semilogy')
sage: list_plot(list(enumerate(ber)), plotjoined=True, linestyle='', marker='o').show(scale='loglog')

This latter command runs through the line command in Sage, which uses the usual plot of matplotlib. plotjoined=False runs through the point command of Sage, which uses the scatter command of matplotlib. So, the failure of x=0 in log scale is from the scatter command in matplotlib.

comment:3 Changed 10 years ago by Punarbasu Purkayastha

Milestone: sage-5.7sage-duplicate/invalid/wontfix
Status: newneeds_review

Works for me (TM)

comment:4 Changed 10 years ago by Punarbasu Purkayastha

Status: needs_reviewpositive_review

comment:5 Changed 10 years ago by Jeroen Demeyer

Resolution: worksforme
Reviewers: Punarbasu Purkayastha
Status: positive_reviewclosed
Note: See TracTickets for help on using tickets.