『Python』matplotlib坐標軸應用


1. 設置坐標軸的位置和展示形式

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.use('Qt5Agg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串

plt.axes([0.05, 0.7, 0.3, 0.3], frameon=True, facecolor="y", aspect="equal")
plt.plot(np.arange(3), [0, 1, 0], color="blue", linewidth=2, linestyle="--")
plt.ylim(0, 1.5)
plt.axis("image")

plt.axes([0.3, 0.4, 0.3, 0.3], frameon=True, facecolor="y", aspect="equal")
plt.plot(2 + np.arange(3), [0, 1, 0], color="blue", linewidth=2, linestyle="-")
plt.ylim(0, 15)
plt.axis([2.1, 3.9, 0.5, 1.9])

plt.axes([0.55, 0.1, 0.3, 0.3], frameon=True, facecolor="y", aspect="equal")
plt.plot(4 + np.arange(3), [0, 1, 0], color="blue", linewidth=2, linestyle=":")
plt.ylim(0, 1.5)
plt.axis("off")

plt.show()
  • 函數axes(rect, frameon=True, facecolor="y")

    • rect = [left, bottom, width, height]

      leftbottom分別表示坐標軸的左側邊緣和底部邊緣距離畫布邊緣的距離,widthheight分別表示坐標軸的寬度和高度
      leftwidth是畫布寬度歸一化后的距離,bottomheight是畫布高度歸一化后的距離。

    • frameon=True
      是否顯示四條軸脊

    • facecolor="y"
      填充坐標軸背景的顏色

  • 函數axis()

    • [xmin, xmax, ymin, ymax]
      顯示坐標軸的范圍
    • option,可取值為
      • 'on':打開坐標軸
      • 'off':關閉坐標軸顯示
      • 'equal':設置相等的比例,y軸和x軸單位刻度對應長度是一樣的
      • 'scaled':通過更改繪圖框的尺寸設置相等的縮放比例
      • 'tight':設置足夠大的限制來顯示所有數據
      • 'auto':自動確定
      • 'image':‘scaled’ with axis limits equal to data limits
      • 'square':方形圖,類似於 ‘scaled’,但是強制xmax-xmin = ymax-ymin

2. 坐標軸刻度的顯示

import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串

ax1 = plt.subplot(121)
ax1.set_xticks(range(0, 251, 50))
plt.grid(True, axis="x")

ax2 = plt.subplot(122)
ax2.set_xticks([])
plt.grid(True, axis="x")

plt.show()

如果不設置坐標軸刻度,則網格線也不會被設置。設置刻度還包括刻度標簽,可以用函數Axes.set_xticklabels()Axes.set_yticklabels()設置對應刻度線的標簽

3. 坐標軸的樣式和位置的定制化展示

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.ticker import FormatStrFormatter
from calendar import day_name

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串

fig = plt.figure()

ax = fig.add_axes([0.2, 0.2, 0.7, 0.7])
ax.spines["bottom"].set_position(("outward", 10))
ax.spines["left"].set_position(("outward", 10))
ax.spines["top"].set_color("none")
ax.spines["right"].set_color("none")

x = np.arange(1, 8, 1)
y = 2 * x + 1

ax.scatter(x, y, c="orange", s=50, edgecolors="orange")

for tickline in ax.xaxis.get_ticklines():
    tickline.set_color("blue")
    tickline.set_markersize(8)
    tickline.set_markeredgewidth(5)

for ticklabel in ax.get_xmajorticklabels():
    ticklabel.set_color("slateblue")
    ticklabel.set_fontsize(12)
    ticklabel.set_rotation(20)

ax.yaxis.set_major_formatter(FormatStrFormatter(f"$\yen%1.1f$"))
plt.xticks(x, day_name[0:7], rotation=20)
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")

for tickline in ax.yaxis.get_ticklines():
    tickline.set_color("lightgreen")
    tickline.set_markersize(8)
    tickline.set_markeredgewidth(5)

for ticklabel in ax.get_ymajorticklabels():
    ticklabel.set_color("green")
    ticklabel.set_fontsize(15)

ax.grid(ls=":", lw=1, color="gray", alpha=0.5)

plt.show()

4. 移動坐標軸的位置

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['font.serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示為方塊的問題,或者轉換負號為字符串

x = np.linspace(-2 * np.pi, 2 * np.pi, 200)
y = np.sin(x)
y1 = np.cos(x)

ax = plt.subplot(111)

ax.plot(x, y, ls="-", lw=2, label=r"$\sin(x)$")
ax.plot(x, y1, ls="-", lw=2, label=r"$\cos(x)$")

ax.legend(loc="lower left")

plt.title(r"$\sin(x)$" + "和" + r"$\cos(x)$" + "函數")

ax.set_xlim(-2 * np.pi, 2 * np.pi)

plt.xticks([-2 * np.pi, -3 * np.pi / 2, -1 * np.pi, -1 * np.pi / 2,
            0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi],
           [r"$-2\pi$", r"$-3\pi/2$", r"$-\pi$", r"$-\pi/2$",
            r"$0$", r"$\pi/2$", r"$\pi$", r"$3\pi/3$", r"$2\pi$"]
           )

ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")

ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))

ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")

plt.show()

ax.spines[key]會調用軸脊字典,如bottomtoprightleft鍵值是對應位置軸脊,ax.spines["bottom"].set_position(("data", 0))表示將底軸移到數軸0坐標位置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM