午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Python matplotlib 繪制等值線(等高線)

 羊玉wngbx 2024-06-07 發(fā)布于云南
本文為使用python3.8.3 Jupyter Notebook文件改寫而來.嵌入了matplotlib繪制等值線(等高線)和numpy的許多知識點,python代碼注釋詳盡,初學者值得一讀

# 用于在Jupyter Notebook中以內聯(lián)模式顯示matplotlib的圖形,圖形會直接在當前的Notebook單元格中顯示
%matplotlib inline

繪制等值線(等高線)

contour()和 contourf()繪制等值線和 分別填充等值線。除非另有說明,功能 兩個版本的簽名和返回值相同

  • contour(X,Y,Z,levels=None,colors='k',linestyles='solid',linewidths=1,origin='lower',hold=None,**kwargs)

  • X,Y,Z:數(shù)組,X和Y必須都是二維的,形狀與Z相同,否則它們必須都是一維,使得len(X) Z列數(shù),len(Y)是Z中的行數(shù)

  • levels:等值線,默認為None,自動生成。

  • colors:顏色,默認為'k',黑色。

  • linestyles:線型,默認為'solid',實線。

  • linewidths:線寬,默認為1。

  • origin:原點,默認為'lower',表示數(shù)組的左下角為原點。

  • C = contour(...)返回一個 QuadContourSet 對象,可以用它來獲取等值線,繪制顏色條。

  • contourf(X,Y,Z,levels=None,colors='k',linestyles='solid',linewidths=1,origin='lower',hold=None,**kwargs)

  • X,Y,Z:數(shù)組,同上

  • levels:等值線,默認為None,自動生成。

  • colors:顏色,默認為'k',黑色。

  • linestyles:線型,默認為'solid',實線。

  • linewidths:線寬,默認為1。

  • origin:原點,默認為'lower',表示數(shù)組的左下角為原點。 ### 可選關鍵字參數(shù):
    corner_mask: [ True | False | 'legacy’ ]
    啟用/禁用角遮罩,僅當Z是遮罩陣列時才有效果。如果為False,則任何接觸遮罩點的四邊形都將被遮罩。如果為True,則只有最靠近這些點的四邊形的三角角始終被遮罩,包括三個未遮罩點的其他三角角將照常繪制等值線。如果是“l(fā)egacy”,則使用舊的等值線繪制算法,這相當于False,不推薦使用,只在新算法經過全面測試時保留
    如果未指定,則默認值取自rcParams['contour.corner_mask'],除非已修改,否則為True
    cmap: [ None | Colormap ]
    cm“顏色貼圖”實例或“無”。如果“cmap”為“None”且“colors”為“None”,則使用默認的“Colormap”.
    norm: [ None | Normalize ]
    一個matplotlib.colors。規(guī)格化實例以將數(shù)據(jù)值縮放為顏色。如果norm為None且colors為None,則使用默認的線性縮放
    vmin, vmax: [ None | scalar ] 如果不是“None”,則這兩個值中的一個或兩個都將提供給matplotlib.colors。規(guī)格化實例,覆蓋基于級別的默認顏色縮放.
    levels: [level0, level1, ..., leveln] 浮點數(shù)列表,指示要繪制的曲線,按升序排列;例如,僅繪制零等值線通過級別=[0] levels=[0]
    origin: [ None | 'upper’ | 'lower’ | 'image’ ] 如果“無”,Z的第一個值將對應于左下角的位置(0,0)。如果為“image”,則將使用image.origin的rc值.
    如果在等值線調用中指定了X和Y,則此關鍵字不處于活動狀態(tài)。
    extent: [ None | (x0,x1,y0,y1) ] 如果原點不為None,則范圍被解釋為matplotlib.pyplot.imshow()中的范圍:它給出外部像素邊界。在這種情況下,Z[0,0]的位置是像素的中心,而不是角。如果原點為None,則(x0,y0)是Z[0,0]的位置,(x1,y1)是Z[-1,-1]的位置.
    如果在等值線調用中指定了X和Y,則此關鍵字不處于活動狀態(tài)。
    locator: [ None | ticker.Locator subclass ]
    如果定位器為“無”,則使用默認的MaxNLocator。如果未通過V參數(shù)明確給出等值線標高,則定位器用于確定等值線標高.
    extend: [ 'neither’ | 'both’ | 'min’ | 'max’ ]
    除非'neither’,否則等值線標高會自動添加到范圍的一端或兩端,以便包括所有數(shù)據(jù)。然后,這些添加的范圍被映射到特殊的顏色映射值,這些值默認為顏色映射范圍的末尾,但可以通過matplotlib.colors,Colormap.set_under()和matplotlib.colors,Colormap.set_over()方法進行設置.
    xunits, yunits: [ None | registered units ]
    通過指定matplotlib.units.ConversionInterface的實例來覆蓋軸單位.
    antialiased: [ True | False ] 啟用抗鋸齒,覆蓋默認值。對于填充的等值線,默認值為True。對于線條等值線,它取自rcParams['line. antialiise']
    nchunk: [ 0 | integer ] 如果為0,則不細分域。指定一個正整數(shù)以通過nchunk四邊形將域劃分為nchunk的子域。分塊減少了等值線算法生成的多邊形的最大長度,從而減少了傳遞給后端的渲染工作量,也需要略少的RAM。然而,它可以根據(jù)后端、抗鋸齒標志和alpha值在塊邊界引入渲染工件。

僅等值線有的關鍵字參數(shù):
linewidths: [ None | number | tuple of numbers ]
如果線寬為無,則默認寬度為 lines.linewidth在matplotlibrc被使用。
如果是數(shù)字,則所有標高都將使用此線寬繪制
如果是元組,則將按照指定的順序使用不同的線寬繪制不同的標高。
linestyles: [ None | 'solid’ | 'dashed’ | 'dashdot’ | 'dotted’ ] 如果linestyles為None,則默認為'solid’實線,除非 線條是單色的。在這種情況下,負 等值線將采取他們的linestyle從matplotlibrc contour.negative_linestyle設置。
線性樣式也可以是指定要使用的一組線性樣式的上述字符串的可迭代項。如果此可迭代項短于等值線標高的數(shù)量,則將根據(jù)需要重復。

僅等值線填充有的關鍵字參數(shù):
hatches:
用于填充區(qū)域的交叉陰影圖案列表。如果無,則不會在等值線中添加陰影。僅PostScript、PDF、SVG和Agg后端支持陰影。
如果為None,則默認為['/’,'\’,'|’,'-’,'+’,'x’,'o’,'O’,'.’,'*’]。
如果為字符串,則只使用第一個字符。
如果為元組,則將按照指定的順序使用不同的陰影圖案繪制不同的標高。
如果為列表,則將按照指定的順序使用不同的陰影圖案繪制不同的標高。
注意:contourf填充頂部關閉的區(qū)間;也就是說,對于邊界z1和z2,填充區(qū)域為:z1 < z <= z2
有一個例外:如果最低邊界與z數(shù)組的最小值一致,那么該最小值將包含在最低區(qū)間中.
下面的實例展示了繪制等值線(等高線)的方法

不規(guī)則間隔數(shù)據(jù)的等高線圖

  • 不規(guī)則間距數(shù)據(jù)插值在規(guī)則網(wǎng)格上的等高線圖與非結構化三角形網(wǎng)格的三線圖的比較.

  • 在規(guī)則的網(wǎng)格上繪制不規(guī)則間隔數(shù)據(jù)的等高線圖需要不同的方法,這兩種選擇是: ~.axes.Axes.contour and ~.axes.Axes.contourf

  • Interpolate the data to a regular grid first. This can be done with on-board means, e.g. via ~.tri.LinearTriInterpolator or using external functionality e.g. via scipy.interpolate.griddata. Then plot the interpolated data with the usual ~.axes.Axes.contour.

  • Directly use ~.axes.Axes.tricontour or ~.axes.Axes.tricontourf which will perform a triangulation internally.

  • 首先將數(shù)據(jù)內插到規(guī)則網(wǎng)格中。這可以通過機載完成 意味著,例如通過“~.tri.LinearTriInterpolator”或使用外部功能 例如,通過“scipy.interpolate.griddata”。然后用以下公式繪制插值數(shù)據(jù)~.axes.Axes.contour。

  • 直接使用“~.axes.Axes.tricontour”或“~.axes.Axes.tricontourf”,這將 在內部執(zhí)行三角測量。

In [ ]:

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

np.random.seed(169303028) # 設置隨機數(shù)生成器的種子, 保證每次生成的隨機數(shù)相同.
npts = 200
ngridx = 100
ngridy = 200
x = np.random.uniform(-2, 2, npts) # 生成x值
y = np.random.uniform(-2, 2, npts) # 生成y值
z = x * np.exp(-x**2 - y**2) # 計算z值

fig, (ax1, ax2) = plt.subplots(nrows=2) # 創(chuàng)建一個包含兩個子圖的figure

# -----------------------
# 網(wǎng)格插值
# -----------------------
# 在網(wǎng)格上通過插值得到的不規(guī)則間隔數(shù)據(jù)坐標的等高線圖.

# 首先創(chuàng)建網(wǎng)格值.
xi = np.linspace(-2.1, 2.1, ngridx) # 創(chuàng)建x網(wǎng)格
yi = np.linspace(-2.1, 2.1, ngridy) # 創(chuàng)建y網(wǎng)格

# 將數(shù)據(jù)(x y)線性插值到(xi yi)定義的網(wǎng)格上.
triang = tri.Triangulation(x, y) # 創(chuàng)建三角形對象
interpolator = tri.LinearTriInterpolator(triang, z) # 創(chuàng)建插值對象
Xi, Yi = np.meshgrid(xi, yi) # 創(chuàng)建網(wǎng)格
zi = interpolator(Xi, Yi) # 插值

# 注意,scipy.interpolate也提供了在網(wǎng)格上插入數(shù)據(jù)的方法。下面是上述四行代碼的替代方法:
# from scipy.interpolate import griddata
# zi = griddata((x, y), z, (xi[None, :], yi[:, None]), method='linear')

ax1.contour(xi, yi, zi, levels=10, linewidths=0.5, colors='k')
cntr1 = ax1.contourf(xi, yi, zi, levels=10, cmap="RdBu_r")

fig.colorbar(cntr1, ax=ax1)
ax1.plot(x, y, 'ko', ms=3)
ax1.set(xlim=(-2, 2), ylim=(-2, 2))
ax1.set_title('網(wǎng)格和等高線 (%d 點, %d 網(wǎng)格點)' %
              (npts, ngridx * ngridy),fontname='SimHei')

# ----------
# Tricontour
# ----------
# 直接將無序的不規(guī)則間隔坐標提供給tricontour.

ax2.tricontour(x, y, z, levels=10, linewidths=0.5, colors='k')
cntr2 = ax2.tricontourf(x, y, z, levels=10, cmap="RdBu_r")

fig.colorbar(cntr2, ax=ax2)
ax2.plot(x, y, 'ko', ms=3)
ax2.set(xlim=(-2, 2), ylim=(-2, 2))
ax2.set_title('等高線 (%d 點)' % npts,fontname='SimHei')

plt.subplots_adjust(hspace=0.5)
plt.show()

  

  

規(guī)則網(wǎng)格生成等值線圖

In [ ]:

# 規(guī)則網(wǎng)格生成等值線圖
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator, FormatStrFormatter

# 生成數(shù)據(jù)
x = np.arange(0, 2*np.pi, 0.01)
y = np.arange(0, 2*np.pi, 0.01)
X, Y = np.meshgrid(x, y) # 生成網(wǎng)格
Z = np.sin(X) + np.cos(Y)

# 繪制等值線圖
fig, ax = plt.subplots()
c = ax.contour(X, Y, Z, 10)
ax.clabel(c, inline=True, fontsize=10)
ax.set_title('等值線圖',fontname='SimHei')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
plt.show()

  

In [ ]:

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

# np.random.seed(996303028) # 設置隨機數(shù)生成器的種子, 保證每次生成的隨機數(shù)相同.
npts = 200
ngridx = 100
ngridy = 200
x = np.linspace(-2, 2, npts) # 生成x值
y = np.linspace(-2, 2, npts) # 生成y值
X, Y = np.meshgrid(x, y) # 生成網(wǎng)格
Z = X * np.exp(-X**2 - Y**2) # 計算z值

fig, ax = plt.subplots() # 創(chuàng)建figure

ax.contour(X, Y, Z, levels=10, linewidths=0.5, colors='k') # 繪制等高線
cntr1 = ax.contourf(X, Y, Z, levels=10, cmap="RdBu_r") # 繪制等高線,填充顏色

xi=np.linspace(-2, 2, 20) # 在-2~2范圍生成20個x值
yi=np.linspace(-2, 2, 20) # 在-2~2范圍生成20個y值
Xi, Yi = np.meshgrid(xi, yi) # 生成20x20網(wǎng)格
fig.colorbar(cntr1, ax=ax) # 添加顏色條
ax.plot(Xi, Yi, 'bo', ms=2) # 繪制藍色網(wǎng)格點
ax.set(xlim=(-2, 2), ylim=(-2, 2))
ax.set_title('網(wǎng)格和等高線 (%d 點, %d x %d網(wǎng)格點)' %
              (npts, npts , npts),fontname='SimHei')

plt.show()

  

隨機生成數(shù)據(jù)畫散點圖

In [ ]:

import numpy as np
import matplotlib.pyplot as plt
y_1 = np.random.standard_normal((150, 2))
y_1 += np.array((-1, -1)) # 分布在中心. at <-1, -1>
y_2 = np.random.standard_normal((150, 2))
y_2 += np.array((1, 1)) # 分布在中心. at <1, 1>
plt.title('散點圖',fontname='SimHei')
plt.scatter(y_1[:,0], y_1[:,1], color = 'c')
plt.scatter(y_2[:,0], y_2[:,1], color = 'b')
plt.show()

  

從文件讀數(shù)據(jù)畫散點圖

In [ ]:


import numpy as np
import matplotlib.pyplot as plt
label_set = (
    b'Iris-setosa',
    b'Iris-versicolor',
    b'Iris-virginica',
)
def read_label(label):
    return label_set.index(label)
data = np.loadtxt('iris.data', delimiter = ',', converters = { 4 : read_label })
color_set = ('c', 'y', 'm')
color_list = [color_set[int(label)] for label in data[:,4]]
plt.scatter(data[:,0], data[:,1], color = color_list)
plt.show()

iris.data 文件

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4.0,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3.0,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3.0,5.0,1.7,Iris-versicolor
6.0,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1.0,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1.0,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6.0,2.7,5.1,1.6,Iris-versicolor
5.4,3.0,4.5,1.5,Iris-versicolor
6.0,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3.0,4.1,1.3,Iris-versicolor
5.5,2.5,4.0,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3.0,4.6,1.4,Iris-versicolor
5.8,2.6,4.0,1.2,Iris-versicolor
5.0,2.3,3.3,1.0,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3.0,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3.0,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3.0,5.8,2.2,Iris-virginica
7.6,3.0,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2.0,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3.0,5.5,2.1,Iris-virginica
5.7,2.5,5.0,2.0,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3.0,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6.0,2.2,5.0,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2.0,Iris-virginica
7.7,2.8,6.7,2.0,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6.0,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3.0,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3.0,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2.0,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3.0,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6.0,3.0,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3.0,5.2,2.3,Iris-virginica
6.3,2.5,5.0,1.9,Iris-virginica
6.5,3.0,5.2,2.0,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica

  

In [ ]:

import numpy as np
import matplotlib.pyplot as plt
data = np.random.standard_normal((100, 2)) # 隨機生成100個二維數(shù)據(jù)
# plt.scatter(data[:,0], data[:,1], color = '1.0', edgecolor='r')
# plt.scatter(data[:,0], data[:,1], color = '0.7', edgecolor='r')
plt.scatter(data[:,0], data[:,1], color = 'y', edgecolor='r') # 繪制散點圖,'y'表示顏色為黃心,'r' 表示邊框為紅線
plt.show()

  

畫sin(x)函數(shù)

In [ ]:

import matplotlib.pyplot as plt
import numpy as np
plt.style.use('default') #出現(xiàn)無法處理帶有tex的字符串,因為找不到latex錯誤時運行
# 啟用手繪風格,需要xkcd字體
# plt.xkcd()
x = np.linspace(0, 2*np.pi, 100)
xx=np.linspace(1, 10, 10) #線性等分10向量 返回list
print (xx)
y = np.sin(x)
plt.plot(x, y)
plt.show()

  

畫折線

In [ ]:

from matplotlib import pyplot as plt
import numpy as np
plt.style.use('Solarize_Light2')
xpoints=np.array([1,2,3,4,5])
ypoints=np.array([5,3,8,5,9])
plt.plot(ypoints,'oc-')
plt.title('matplotlib___classic')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.show()

  

matplotlib在tkinter窗口中繪圖

In [ ]:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
 
def create_plot(root):
    # 創(chuàng)建一個圖形和一個軸
    fig = plt.Figure(figsize=(5, 5), dpi=100)
    ax = fig.add_subplot(111)
    
    # 繪制一個簡單的圖形,例如一個正弦波
    x = [i for i in range(0, 100)]
    y = [i**2 for i in x]
    ax.plot(x, y)
    
    # 在tkinter中創(chuàng)建一個畫布
    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.draw()
    canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
 
    # 創(chuàng)建一個Tkinter應用程序實例
    root.title("Matplotlib Embedding in Tkinter")
    # 啟動Tkinter事件循環(huán)
    tk.mainloop()
    
    
# 創(chuàng)建并展示Tkinter窗口
root = tk.Tk()
create_plot(root)
root.quit()

  

matplotlib在Wx窗口中繪圖

In [ ]:

import wx
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
 
class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Matplotlib in wxPython")
        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)
        self.axes.plot([1, 2, 3, 4], [1, 4, 9, 16])
        self.canvas = FigureCanvas(self, -1, self.figure)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 1, wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Fit()
 
app = wx.App(False)
frame = MyFrame(None)
frame.Show(True)
app.MainLoop()

  

打造繪圖系統(tǒng)

將matplotlib嵌入到tkinter中打造繪圖系統(tǒng)的技術基礎,實現(xiàn)一個簡單的繪圖系統(tǒng)

  • 封裝成類

    import tkinter as tkimport tkinter.ttk as ttkimport matplotlib as mplmpl.use('TkAgg')import matplotlib.pyplot as pltfrom matplotlib.backends.backend_tkagg import (
      FigureCanvasTkAgg, NavigationToolbar2Tk)from matplotlib.figure import Figureclass DarwSystem():
      def __init__(self):
          self.root = tk.Tk()
          self.root.title("數(shù)據(jù)展示工具")
          frmCtrl = ttk.Frame(self.root,width=320)
          frmCtrl.pack(side=tk.RIGHT)
          self.setFrmCtrl(frmCtrl)
          frmFig = ttk.Frame(self.root)
          frmFig.pack(side=tk.LEFT,fill=tk.BOTH,expand=tk.YES)
          self.setFrmFig(frmFig)
          self.root.mainloop()
      def setFrmCtrl(self, frmCtrl):
          pass
      def setFrmFig(self, frmFig):
          self.fig = Figure()
          self.canvas = FigureCanvasTkAgg(self.fig,frmFig)
          self.canvas.get_tk_widget().pack(
              side=tk.TOP,fill=tk.BOTH,expand=tk.YES)
          self.toolbar = NavigationToolbar2Tk(self.canvas,frmFig,
              pack_toolbar=False)
          self.toolbar.update()
          self.toolbar.pack(side=tk.RIGHT)

    其中,setFrmCtrl用于設置控制面板,暫且pass掉,但后續(xù)會實現(xiàn)諸多功能;setFrmFig用于設置繪圖界面,其中self.fig就是繪圖窗口,后續(xù)若要畫圖,都要在這里設置坐標軸。

  • 布局
    最簡單的繪圖系統(tǒng),也至少需要三個部件,分別用于輸入x值、y值以及點擊繪圖按鈕,從而setFrmCtrl函數(shù)可以先寫為下面的形式

def setFrmCtrl(self, frmCtrl):
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setCtrlButtons(frm)
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setFrmX(frm)
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setFrmY(frm)

這里面總計用了3個frm,分別用于存放控制按鈕,設置x數(shù)據(jù)和y數(shù)據(jù)的模塊,這三個模塊的布局又分別設計了三個函數(shù),即setFrmX, setFrmY以及setCtrlButtons:

def setFrmX(self, frm):
    tk.Label(frm, text="x").pack(side=tk.LEFT)
    self.xEntry = tk.Entry(frm)
    self.xEntry.pack(side=tk.LEFT, fill=tk.X)def setFrmY(self, frm):
    tk.Label(frm, text="y").pack(side=tk.LEFT)
    self.yEntry = tk.Entry(frm)
    self.yEntry.pack(side=tk.LEFT, fill=tk.X)def setCtrlButtons(self, frm):
    tk.Button(frm, text="繪圖",width=5,
        command=self.btnDrawImg).pack(side=tk.LEFT)# 繪圖函數(shù)def btnDrawImg(self):
    pass
  • 實現(xiàn)繪圖功能 接下來就是最核心的功能,實現(xiàn)繪圖,主要包括兩個步驟,一是讀取x和y的值,二是用二者的值完成圖像的繪制。

簡單起見,這里用eval函數(shù)直接讀取python表達式,同時為了讓不熟悉Python的人也可以順利生成x序列,將np.linspace隱去。則xEntry和yEntry的讀取過程可寫為

def btnDrawImg(self):
    x = eval(f"np.linspace({self.xEntry.get()})")
    self.ys = eval(self.yEntry.get())
    self.xs = x
    self.drawPlot()

self.drawPlot就是核心的繪圖函數(shù),主要流程與命令行調用plt如出一轍,首先創(chuàng)建一個坐標軸,然后在坐標軸上繪圖,區(qū)別是最后需要調用self.canvas中的引擎來完成圖像繪制

def drawPlot(self):
    self.fig.clf()
    ax = self.fig.add_subplot()
    ax.plot(self.xs, self.ys)
    self.fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.08)
    self.canvas.draw()

狀態(tài)欄的這些工具都可以無縫使用,非常便捷。

到此這篇關于基于matplotlib+tkinter實現(xiàn)簡單的繪圖系統(tǒng)的文章就介紹到這了,更多相關matplotlib tkinter繪圖系統(tǒng)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

原文鏈接:https://blog.csdn.net/m0_37816922/article/details/132021824

In [ ]:

import tkinter as tk
import tkinter.ttk as ttk
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure
class DarwSystem():
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("數(shù)據(jù)展示工具")
        frmCtrl = ttk.Frame(self.root,width=320)
        frmCtrl.pack(side=tk.RIGHT)
        self.setFrmCtrl(frmCtrl)
        frmFig = ttk.Frame(self.root)
        frmFig.pack(side=tk.LEFT,fill=tk.BOTH,expand=tk.YES)
        self.setFrmFig(frmFig)
        self.root.mainloop()

    def setFrmFig(self, frmFig):
        self.fig = Figure()
        self.canvas = FigureCanvasTkAgg(self.fig,frmFig)
        self.canvas.get_tk_widget().pack(
            side=tk.TOP,fill=tk.BOTH,expand=tk.YES)
        self.toolbar = NavigationToolbar2Tk(self.canvas,frmFig,
            pack_toolbar=False)
        self.toolbar.update()
        self.toolbar.pack(side=tk.RIGHT)

    def setFrmCtrl(self, frmCtrl):
        frm = ttk.Frame(frmCtrl)
        frm.pack(side=tk.TOP, fill=tk.X)
        self.setCtrlButtons(frm)
        frm = ttk.Frame(frmCtrl)
        frm.pack(side=tk.TOP, fill=tk.X)
        self.setFrmX(frm)
        frm = ttk.Frame(frmCtrl)
        frm.pack(side=tk.TOP, fill=tk.X)
        self.setFrmY(frm)

    # 這里面總計用了3個frm,分別用于存放控制按鈕,設置x數(shù)據(jù)和y數(shù)據(jù)的模塊,
    # 這三個模塊的布局又分別設計了三個函數(shù),即setFrmX, setFrmY以及setCtrlButtons: 

    def setFrmX(self, frm):
        tk.Label(frm, text="x").pack(side=tk.LEFT)
        self.xEntry = tk.Entry(frm)
        self.xEntry.pack(side=tk.LEFT, fill=tk.X)
    def setFrmY(self, frm):
        tk.Label(frm, text="y").pack(side=tk.LEFT)
        self.yEntry = tk.Entry(frm)
        self.yEntry.pack(side=tk.LEFT, fill=tk.X)
    def setCtrlButtons(self, frm):
        tk.Button(frm, text="繪圖",width=5,
            command=self.btnDrawImg).pack(side=tk.LEFT)
    # 繪圖函數(shù)
    def btnDrawImg(self):
        x = eval(f"np.linspace({self.xEntry.get()})")
        self.ys = eval(self.yEntry.get())
        self.xs = x
        self.drawPlot()
    #vself.drawPlot就是核心的繪圖函數(shù),主要流程與命令行調用plt如出一轍,
    # 首先創(chuàng)建一個坐標軸,然后在坐標軸上繪圖,區(qū)別是最后需要調用self.canvas中的引擎來完成圖像繪制**
    def drawPlot(self):
        self.fig.clf()
        ax = self.fig.add_subplot()
        ax.plot(self.xs, self.ys)
        self.fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.08)
        self.canvas.draw()
if __name__ == '__main__':
    drw=DarwSystem()

  

Python實現(xiàn)在tkinter中使用matplotlib繪制圖形的方法

In [ ]:

import sys
import tkinter as Tk
import matplotlib
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
# from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
matplotlib.use('TkAgg')
root =Tk.Tk()
root.title("matplotlib 在TK中繪圖測試")
#設置圖形尺寸與質量
f =Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0,3,0.01)
s = sin(2*pi*t)
#繪制圖形
a.plot(t, s)
#把繪制的圖形顯示到tkinter窗口上
canvas =FigureCanvasTkAgg(f, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
#把matplotlib繪制圖形的導航工具欄顯示到tkinter窗口上
toolbar =NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
#定義并綁定鍵盤事件處理函數(shù)
def on_key_event(event):
  print('you pressed %s'% event.key)
  key_press_handler(event, canvas, toolbar)
  canvas.mpl_connect('key_press_event', on_key_event)
#按鈕單擊事件處理函數(shù)
def _quit():
  #結束事件主循環(huán),并銷毀應用程序窗口 無法在wx當前運行時加載需要Tk交互框架的后端TkAgg
  root.quit()
  root.destroy()
button =Tk.Button(master=root, text='退出', command=_quit)
button.pack(side=Tk.BOTTOM)
Tk.mainloop()
root.quit()

  

等高線圖屬性

  • 設置等高線顏色
    關鍵字:colors
    取值范圍:
    示顏色的英文單詞:如紅色"red"
    表示顏色單詞的簡稱如:紅色"r",黃色"y"
    RGB格式:十六進制格式如"#88c999";(r,g,b)元組形式也可以傳入顏色列表

  • 設置等高線透明度
    關鍵字:alpha
    默認為1
    取值范圍為:0~1

  • 設置等高線顏色級別
    關鍵字:cmap
    colors和cmap兩個關鍵字不能同時提供
    取值為:注冊的顏色表明
    形式如:"顏色表_r"
    常用的有:'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens'

  • 設置等高線寬度 關鍵字:linewidths
    默認為等高線寬度為1.5
    取值可以float類型或者列表

  • 設置等高線樣式
    關鍵字:linestyles
    默認值為:solid
    取值可選:{None, 'solid', 'dashed', 'dashdot', 'dotted'}
    linestyles為None且線條為單色時,負等值線的線條會設置成dashed

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-5,5,0.1)
y_value = np.arange(-5,5,0.1)
# 轉換成矩陣數(shù)據(jù)
x,y = np.meshgrid(x_value,y_value)
z=x**2+y**2
plt.contour(x,y,z)
  
plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)")
plt.ylabel("y(m)")

plt.show()

  

為等值線,傳入顏色列表

In [ ]:

# 線條為紅色,線條寬度逐漸增大,線條樣式為dashed,透明度設置為0.5
import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-5,5,0.1)
y_value = np.arange(-5,5,0.1)
# 轉換成矩陣數(shù)據(jù)
x,y = np.meshgrid(x_value,y_value)
z=x**2+y**2
plt.contour(x,y,z,colors="r",
linestyles="dashed",
linewidths=np.arange(0.5,4,0.5),alpha=0.5)
  
plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)")
plt.ylabel("y(m)")

plt.show()

  

為等值線,設置cmap為紅色系

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-10,10,0.1)
y_value = np.arange(-10,10,0.1)
# 轉換成矩陣數(shù)據(jù)
x,y = np.meshgrid(x_value,y_value)
z=x**2+y**2
colors=('r','green','blue',(1,1,0),"#afeeee","0.5") # 顏色元組 (1,1,0)---顏色(R=1,G=1,B=0) "0.5"=(R=0.5,G=0.5,B=0.5)
# print (colors)
w=np.where(np.arange(5)>0,2,5) # [5,2,2,2,2]
print (w)
c=np.where(np.arange(5)>0,'#ffc400','#c08e06')
# plt.contour(x,y,z,colors=colors,linewidths=np.arange(0.5,4,0.5)) # linewidths=np.arange(0.5,4,0.5)=>[0.5,1.5,2.5,3.5]
cs=plt.contour(x,y,z,20,colors=c,linewidths=w) # 畫20條等值線
# 標注等高線值  
plt.clabel(cs,fontsize=9,inline=True)
plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)")
plt.ylabel("y(m)")

plt.show()

  

顯示等值線標簽

我們查看等高線圖時,等值線標簽會輔助我們更好的查看圖表。添加等值線標簽,我們需要借助clabe
pyplot.contour()繪制等高線方法,會返回QuadContourset
QuadContourset 包含level列表數(shù)據(jù)
使用pyplot.clabel()接受level列表數(shù)據(jù)標注在等高線上

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-3,3,0.1)
y_value = np.arange(-3,3,0.1)
# 轉換成矩陣數(shù)據(jù)
x,y = np.meshgrid(x_value,y_value)

z = np.exp(-x**2-y**2)
z1 = np.exp(-(x-1)**2-(y-1)**2)
Z = (z-z1)*2
  
plt.contour(x,y,Z,8,cmap='afmhot_r',linewidths=np.arange(0.5,4,0.5))

plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)")
plt.ylabel("y(m)")

plt.show()

  

填充顏色

通常在等高線圖中,不同區(qū)域填充不一樣的顏色,幫助我們查看圖表時更好地理解 使用pyplot.contourf()對比同區(qū)域等值線進行填充顏色

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-3,3,0.025)
y_value = np.arange(-3,3,0.025)
# 轉換成網(wǎng)格數(shù)據(jù)  
x,y = np.meshgrid(x_value,y_value)
  
z = (1-x**2+y**5)*np.exp(-x**2-y**2)
# 繪制等高線圖 
cs = plt.contour(x,y,z,cmap="Blues_r",linewidths=np.arange(0.5,4,0.5))
# 添加標簽  
plt.clabel(cs,fontsize=9,inline=True)
# 添加標題
plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)") # x軸標簽
plt.ylabel("y(m)") # y軸標簽
# 顯示
plt.show()

  

添加顏色條說明

可以借助pyplot.colorbar()方法來添加顏色條說明

In [ ]:

import matplotlib.pyplot as plt
import numpy as np

# 定義一組連續(xù)的數(shù)據(jù)
x_value = np.arange(-3,3,0.025)
y_value = np.arange(-3,3,0.025)
# 轉換成網(wǎng)格數(shù)據(jù)  
x,y = np.meshgrid(x_value,y_value)
  
z = (1-x**2+y**5)*np.exp(-x**2-y**2)
# 繪制等高線圖 
cs = plt.contour(x,y,z,cmap="Blues_r",linewidths=np.arange(0.5,4,0.5))
# 添加標簽
plt.clabel(cs,fontsize=12,inline=True)
# 填充顏色,繪制等值面圖
plt.contourf(x,y,z,10,cmap="Blues_r",alpha=0.75)

# 添加標題
plt.title("顯示等值線圖",fontproperties="SimHei")
plt.xlabel("x(m)") # x軸標簽
plt.ylabel("y(m)") # y軸標簽
# 顯示
plt.show()

  

等值線實例

In [ ]:

"""
說明簡單的等值線繪制等值線在圖像上的等值線和標記等值線的顏色條.

另見 contour_image.py.
"""
import matplotlib
import numpy as np
import matplotlib.cm as cm
# import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

def bivariate_normal(X, Y, sigmax=1.0, sigmay=1.0,
                 mux=0.0, muy=0.0, sigmaxy=0.0):
    """
    Bivariate Gaussian distribution for equal shape *X*, *Y*. 
    雙變量正態(tài)高斯分布   
    """
    Xmu = X-mux 
    Ymu = Y-muy
    rho = sigmaxy/(sigmax*sigmay)
    z = Xmu**2/sigmax**2 + Ymu**2/sigmay**2 - 2*rho*Xmu*Ymu/(sigmax*sigmay)
    denom = 2*np.pi*sigmax*sigmay*np.sqrt(1-rho**2)
    return np.exp(-z/(2*(1-rho**2))) / denom

matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)

Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)

# 高斯差
Z = 10.0 * (Z2 - Z1) # 計算z值


# 使用默認顏色創(chuàng)建帶有標簽的簡單等高線繪圖。
# label的inline參數(shù)將控制標簽是否繪制在等高線的線段上,從而刪除標簽下方的線
plt.figure()
CS = plt.contour(X, Y, Z) # 繪制等高線
plt.clabel(CS, inline=1, fontsize=10) # 繪制標簽
plt.title('帶有標簽的最簡單默認值',fontname='SimHei') # 標題


# 可以通過提供數(shù)據(jù)坐標中的位置列表來手動放置等值線標簽,參見ginput_manual_label.py進行交互式放置.
plt.figure()
CS = plt.contour(X, Y, Z)
manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)] # 手動設置標簽位置
plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)
plt.title('選定地點的標簽',fontname='SimHei')


# 你可以強制所有的等值線是相同的顏色.
plt.figure()
CS = plt.contour(X, Y, Z, 6,
                 colors='k',  # 默認情況下,負等值線將虛線
                 )
plt.clabel(CS, fontsize=9, inline=1)
plt.title('單色 - 負等值線虛線',fontname='SimHei')

# 您可以將負等值線設置為實線而不是虛線:
matplotlib.rcParams['contour.negative_linestyle'] = 'solid'
plt.figure()
CS = plt.contour(X, Y, Z, 6,
                 colors='k',  # 默認情況下,負等值線是虛線
                 )
plt.clabel(CS, fontsize=9, inline=1)
plt.title('單色 - 負等高線',fontname='SimHei')


# 你可以手動指定等值線的顏色
plt.figure()
CS = plt.contour(X, Y, Z, 6,
                 linewidths=np.arange(.5, 4, .5),
                 colors=('r', 'green', 'blue', (1, 1, 0), '#afeeee', '0.5')
                 )
plt.clabel(CS, fontsize=9, inline=1)
plt.title('Crazy lines',fontname='SimHei')


# 或者您可以使用顏色映射來指定顏色,默認顏色映射將用于等高線
plt.figure()
im = plt.imshow(Z, interpolation='bilinear', origin='lower',
                cmap=cm.gray, extent=(-3, 3, -2, 2))
levels = np.arange(-1.2, 1.6, 0.2)
CS = plt.contour(Z, levels,
                 origin='lower',
                 linewidths=2,
                 extent=(-3, 3, -2, 2))

# 加厚零等值線.
zc = CS.collections[6]
plt.setp(zc, linewidth=4)

plt.clabel(CS, levels[1::2],  # 每隔一層貼上標簽
           inline=1,
           fmt='%1.1f',
           fontsize=14)

# 為等高線制作一個顏色條
CB = plt.colorbar(CS, shrink=0.8, extend='both')

plt.title('帶顏色條的線條',fontname='SimHei')
#plt.hot()  # 現(xiàn)在更改等高線和色條的顏色圖
plt.flag()

# 我們還可以為圖像添加顏色條.
CBI = plt.colorbar(im, orientation='horizontal', shrink=0.8)

# 這使得原來的顏色條看起來有點不合適,所以讓我們改進它的位置.

l, b, w, h = plt.gca().get_position().bounds
ll, bb, ww, hh = CB.ax.get_position().bounds
CB.ax.set_position([ll, b + 0.1*h, ww, h*0.8])


plt.show()

實例運行效果如下:


中文常用字體如下:
宋體:SimSun、黑體:SimHei、微軟雅黑:Microsoft YaHei、微軟正黑體:Microsoft JhengHei# 新宋體:NSimSun、新細明體:PMingLiU、細明體:MingLiU、標楷體:DFKai-SB、仿宋:FangSong、楷體:KaiTi、隸書:LiSu、幼圓:YouYuan、華文細黑:STXihei、華文楷體:STKaiti、華文宋體:STSong、華文中宋:STZhongsong、華文仿宋:STFangsong、方正舒體:FZShuTi、方正姚體:FZYaoti、華文彩云:STCaiyun、華文琥珀:STHupo、華文隸書:STLiti、華文行楷:STXingkai、華文新魏:STXinwei


    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多