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: |
Description
Inspired by http://ask.sagemath.org/question/1743/list_plot_semilogy-not-working, 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)] points(enumerate(ber)).show(scale='semilogx') points(enumerate(ber)).show(scale='semilogy') points(enumerate(ber)).show(scale='loglog')
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)] line(enumerate(ber)).show(scale='semilogx') line(enumerate(ber)).show(scale='semilogy') line(enumerate(ber)).show(scale='loglog')
Change History (5)
comment:1 Changed 10 years ago by
comment:2 Changed 10 years ago by
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
Milestone: | sage-5.7 → sage-duplicate/invalid/wontfix |
---|---|
Status: | new → needs_review |
Works for me (TM)
comment:4 Changed 10 years ago by
Status: | needs_review → positive_review |
---|
comment:5 Changed 10 years ago by
Resolution: | → worksforme |
---|---|
Reviewers: | → Punarbasu Purkayastha |
Status: | positive_review → closed |
The problem seems more generic. This works:
This doesn't work:
So, the bug might be in points itself, or in matplotlib.