Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfe4fb2e

Browse files
authored
Merge pull request#29437 from meeseeksmachine/auto-backport-of-pr-29407-on-v3.10.0-doc
Backport PR#29407 on branch v3.10.0-doc (DOC: Improve log scale example)
2 parents6131054 +873b2fa commitfe4fb2e

File tree

2 files changed

+65
-52
lines changed

2 files changed

+65
-52
lines changed

‎galleries/examples/scales/log_demo.py

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,83 @@
11
"""
2-
========
3-
LogDemo
4-
========
2+
=========
3+
Logscale
4+
=========
55
66
Examples of plots with logarithmic axes.
7+
8+
You can set the x/y axes to be logarithmic by passing "log" to `~.Axes.set_xscale` /
9+
`~.Axes.set_yscale`.
10+
11+
Convenience functions ``semilogx``, ``semilogy``, and ``loglog``
12+
----------------------------------------------------------------
13+
Since plotting data on semi-logarithmic or double-logarithmic scales is very common,
14+
the functions `~.Axes.semilogx`, `~.Axes.semilogy`, and `~.Axes.loglog` are shortcuts
15+
for setting the scale and plotting data; e.g. ``ax.semilogx(x, y)`` is equivalent to
16+
``ax.set_xscale('log'); ax.plot(x, y)``.
717
"""
818

919
importmatplotlib.pyplotasplt
1020
importnumpyasnp
1121

12-
# Data for plotting
13-
t=np.arange(0.01,20.0,0.01)
14-
15-
# Create figure
16-
fig, ((ax1,ax2), (ax3,ax4))=plt.subplots(2,2)
17-
18-
# log y axis
19-
ax1.semilogy(t,np.exp(-t/5.0))
20-
ax1.set(title='semilogy')
22+
fig, (ax1,ax2,ax3)=plt.subplots(1,3,layout='constrained',figsize=(7,7/3))
23+
# log x axis
24+
t=np.arange(0.01,10.0,0.01)
25+
ax1.semilogx(t,np.sin(2*np.pi*t))
26+
ax1.set(title='semilogx')
2127
ax1.grid()
28+
ax1.grid(which="minor",color="0.9")
2229

23-
# log x axis
24-
ax2.semilogx(t,np.sin(2*np.pi*t))
25-
ax2.set(title='semilogx')
30+
# log y axis
31+
x=np.arange(4)
32+
ax2.semilogy(4*x,10**x,'o--')
33+
ax2.set(title='semilogy')
2634
ax2.grid()
35+
ax2.grid(which="minor",color="0.9")
2736

2837
# log x and y axis
29-
ax3.loglog(t,20*np.exp(-t/10.0))
30-
ax3.set_xscale('log',base=2)
31-
ax3.set(title='loglog base 2 on x')
38+
x=np.array([1,10,100,1000])
39+
ax3.loglog(x,5*x,'o--')
40+
ax3.set(title='loglog')
3241
ax3.grid()
42+
ax3.grid(which="minor",color="0.9")
43+
44+
# %%
45+
# Logarithms with other bases
46+
# ---------------------------
47+
# By default, the log scale is to the base 10. One can change this via the *base*
48+
# parameter.
49+
fig,ax=plt.subplots()
50+
ax.bar(["L1 cache","L2 cache","L3 cache","RAM","SSD"],
51+
[32,1_000,32_000,16_000_000,512_000_000])
52+
ax.set_yscale('log',base=2)
53+
ax.set_yticks([1,2**10,2**20,2**30],labels=['kB','MB','GB','TB'])
54+
ax.set_title("Typical memory sizes")
55+
ax.yaxis.grid()
56+
57+
# %%
58+
# Dealing with negative values
59+
# ----------------------------
60+
# Non-positive values cannot be displayed on a log scale. The scale has two options
61+
# to handle these. Either mask the values so that they are ignored, or clip them
62+
# to a small positive value. Which one is more suited depends on the type of the
63+
# data and the visualization.
64+
#
65+
# The following example contains errorbars going negative. If we mask these values,
66+
# the bar vanishes, which is not desirable. In contrast, clipping makes the value
67+
# small positive (but well below the used scale) so that the error bar is drawn
68+
# to the edge of the Axes.
69+
x=np.linspace(0.0,2.0,10)
70+
y=10**x
71+
yerr=1.75+0.75*y
3372

34-
# With errorbars: clip non-positive values
35-
# Use new data for plotting
36-
x=10.0**np.linspace(0.0,2.0,20)
37-
y=x**2.0
73+
fig, (ax1,ax2)=plt.subplots(1,2,layout="constrained",figsize=(6,3))
74+
fig.suptitle("errorbars going negative")
75+
ax1.set_yscale("log",nonpositive='mask')
76+
ax1.set_title('nonpositive="mask"')
77+
ax1.errorbar(x,y,yerr=yerr,fmt='o',capsize=5)
3878

39-
ax4.set_xscale("log",nonpositive='clip')
40-
ax4.set_yscale("log",nonpositive='clip')
41-
ax4.set(title='Errorbars go negative')
42-
ax4.errorbar(x,y,xerr=0.1*x,yerr=5.0+0.75*y)
43-
# ylim must be set after errorbar to allow errorbar to autoscale limits
44-
ax4.set_ylim(bottom=0.1)
79+
ax2.set_yscale("log",nonpositive='clip')
80+
ax2.set_title('nonpositive="clip"')
81+
ax2.errorbar(x,y,yerr=yerr,fmt='o',capsize=5)
4582

46-
fig.tight_layout()
4783
plt.show()

‎galleries/examples/scales/semilogx_demo.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp