亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 數據可視化字體與折線圖繪制

數據可視化字體與折線圖繪制

來源:千鋒教育
發布人:wjy
時間: 2022-08-12 15:26:00 1660289160

### matplotlib 中的字體管理

使用 matplotlib 可視化數據時,經常要面對字體設置的問題。在要用到中文時,如果設置不當,會出現亂碼。網上已經有很多文章提供了一些解決方法,但多數是片段式的“授人以魚”,本文將系統地討論 matplotlib 中的字體管理,希望能“授人以漁”。

環境:Windows 10 + anaconda (python 3.8) + matplotlib 3.5

如果你的環境不同,相關程序安裝位置不同,一些細節,如路徑、數量等可能會有一些差異,但“對應”到你的環境即可。

matplotlib 中使用的字體來源于三個途徑:

1. matplotlib 自帶的字體;
2. windows 系統字體;
3. 用戶提供的第三方字體。

**注意**

1. 實際中不建議調用用戶字體目錄中的第三方字體文件;
2. 有很多特殊的字體不兼容,會報錯

#### windows 10 系統字體

Windows 系統字體文件保存在 `C:\Windows\Fonts` 文件夾中,在資源管理器中打開這個文件夾,一般是以大圖標的形式顯示,看起來是這樣的:

屏幕快照 2021-04-30 下午4.33.29

字體系列,相當于一個子文件夾,可以進一步打開,如下圖

屏幕快照 2021-04-30 下午4.36.02

屏幕快照 2021-04-30 下午4.41.53

在 windows 中,字體是以“字體文件”的形式保存的,但在應用軟件中為了調用的直觀性和方便性,則是通過字體的“名稱”屬性來調用的。

#### 字體文件的類型和字體類型

字體文件格式和字體類型繁多,常見的有:

字體文件:`.TTF, .FON, .TTC, .AFM`等后綴(格式)。

字體類型:`OpenType, TrueType, 光柵` 等類型。

**光柵字體(.FON)**:是針對特定的顯示分辨率以不同大小存儲的位圖,用于Windows系統中屏幕上的菜單、按鈕等處文字的顯示。它并不是以矢量描述的,放大以后會出現鋸齒,只適合屏幕描述。不過它的顯示速度非常快,所以作為系統字體而在Windows中使用。

**矢量字體(.FON)**

雖然擴展名和光柵字體一樣,但是這種字體卻是由基于矢量的數學模型定義的,是Windows系統字體的一類,一些windows應用程序會在較大尺寸的屏幕顯示中自動使用矢量字體來代替光柵字體的顯示。

.fon 字體文件其實是標準的windows可執行文件(.exe)格式,分NE(New Executable)和PE(Portable Executable)兩種類型,字體作為資源存在其中。
**TrueType字體(.TTF)**

TrueType是由美國蘋果公司和微軟公司共同開發的一種電腦輪廓字體(曲線描邊字)類型標準。這是我們日常操作中接觸得最多的一種類型的字體,其最大的特點就是它是由一種數學模式來進行定義的基于輪廓技術的字體,這使得它們比基于矢量的字體更容易處理,保證了屏幕與打印輸出的一致性。同時,這類字體和矢量字體一樣可以隨意縮放、旋轉而不必擔心會出現鋸齒。

OpenType標準還定義了 OpenType 文件名稱的后綴名。包含 TrueType 字體的OpenType文件后綴名為.ttf,包含PostScript字體的文件后綴名為.OTF。如果是包含一系列TrueType字體的字體包文件,那么后綴名為.TTC。

**.AFM** Adobe Font Metrics

這由Adobe公司開發,并包含了有關Type 1 PostScript 字體的度量特性的信息。AFM結構需要一個定義了每一個字體符號的樣式的控制模版。它主要被用于UNIX。

#### matplotlib 字體管理

matplotlib 的matplotlib.font_manager 模塊,用于跨平臺查找、管理和使用字體。

這個模塊提供了一個可以跨后端(backend)和平臺共享的 FontManager 實例。其中的 findfont 函數在返回本地或系統字體路徑中與指定的 FontPropeties 實例匹配的最佳 TrueType (TTF) 字體文件。FontManager還處理 PostScript 后端使用的 Adobe Font Metrics (AFM) 字體文件。

也就是說 matplotlib 主要處理和使用 TTF, AFM 兩種字體。

字體文件可以保存在 matplotlib 的 fonts 文件夾下,也可以保存在系統字體路徑中。

> matplotlib 的字體文件夾路徑如下:
> C:\Users\用戶名\anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts

該文件夾下有三個子文件夾,保存的都是 TTF, AFM 格式的字體文件。其中的 ttf 文件夾中約有 40 個 TTF 字體文件。

屏幕快照 2021-04-30 下午4.54.16

打開 matplotlib 的 .fonts/ttf 文件夾,顯示如下

屏幕快照 2021-04-30 下午4.53.18

#### matplotlib的 font_manager 模塊

font_manager 模塊主要設計了3個類:

- .FontEntry:FontEntry 主要供 matplotlib 平臺管理、存儲可用字體屬性使用。我們可以用它來統一 matplotlib 繪圖的字體,減少多圖中字體設置的重復勞動。
- .FontManager:FontManager 類提供了字體管理功能。
- .FontProperties, 這個是一般用戶最常用的類,用法與`FontEntry`相似。定義一個 `FontProperties`實例,可以設置 text 對象的全部屬性,并可以重復使用。無需在創建 text 時一個一個的設置。

```python
%matplotlib inline

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

x = np.arange(0, 10, 0.2)
y = np.sin(x)

# strech,拉伸,相當于word中的字體加寬
font_S = fm.FontProperties(family='Stencil',size=24, stretch=0)
font_M = fm.FontProperties(family='Mistral',size='xx-large',stretch=1000, weight='bold')

fig = plt.figure(constrained_layout=True)

ax = fig.add_subplot(111)
ax.set_title('Axes\'s Title', fontproperties = font_S)
ax.set_xlabel('xaxis label', fontproperties=font_M)

ax.plot(x,y)

plt.show()
```

#### matplotlib 常用中文字體名稱對照表

Windows的字體對應名稱,根據需要自行更換!

> 黑體 SimHei
> 微軟雅黑 Microsoft YaHei
> 微軟正黑體 Microsoft JhengHei
> 新宋體 NSimSun
> 新細明體 PMingLiU
> 細明體 MingLiU
> 標楷體 DFKai-SB
> 仿宋 FangSong
> 楷體 KaiTi
> 仿宋_GB2312 FangSong_GB2312
> 楷體_GB2312 KaiTi_GB2312

#### matplotlib 中文亂碼問題的解決

在matplotlib中,在使用中文的時候經常會出現一些亂碼的問題,如中文會變成小方格子。有以下幾種解決方案:

##### 方法一:修改配置文件matplotlibrc(不推薦這樣做)

```python
#使用下面的命令查看配置文件位置

import matplotlib
matplotlib.matplotlib_fname()
```

結果:

```
C:\\Users\\你的用戶名\\anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc
```

比如要添加黑體,步驟:

> 1. 一般在C:\Windows\Fonts 里可以找到`黑體常規`字體文件
>
> 2. 將字體文件拷貝至:C:\\Users\\你的用戶名\anaconda3\\lib\\site-packages\\matplotlib\\mpl-data\fonts\ttf中
>
> 3. 用寫字板或記事本打開matplotlibrc文件:
>
> - 刪除 font.family 前面的 # 并將冒號后面改為“SimHei”;
>
> - 刪除 font.sans-serif 前面的 # 并在冒號后面添加“SimHei”
>

屏幕快照 2021-04-30 下午5.13.54


>
> 4. 修改后保存,重新運行程序。

##### 方法二:動態設置參數(可用)

在python腳本中動態設置matplotlibrc,這樣就避免了更改配置文件的麻煩,方便靈活,例如:

```在python腳本中動態設置matplotlibrc,這樣就避免了更改配置文件的麻煩,方便靈活,例如:import matplotlib as mplmpl.rcParams[‘font.sans-serif] = [‘SimHei’]
import matplotlib as mpl
mpl.rcParams[‘font.sans-serif] = [‘SimHei’]
```

由于更改了字體導致顯示不出負號,將配署文件中axes.unicode minus : True修改為False 就可以了,當然這而可以在代碼中完成。

```python
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號’-'顯示為方塊的問題
```

##### 方法三:使用字體管理器(推薦的方法)

優點:直接在代碼中指定中文字體文件,在每個出現中文的地方指定 fontproperties為剛才設置的字體;

缺點:每個出現中文的地方如title都要指定字體,并不是每個地方如legend都提供指定字體的參數。

```python
myfont = matplotlib.font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
```

直接設置為中文時

```python
ax.set_title(u'matplotlib中文顯示測試', fontproperties = myfont)
```

還可以直接:

```python
ax.set_title(u'matplotlib中文顯示測試', fontproperties='SimHei')
```

 

### 折線圖

折線圖用于分析自變量和因變量之間的趨勢關系,最適合用于顯示隨著時間而變化的連續數據,同時還可以看出數量的差異,增長情況。

Matplotlib 中繪制散點圖的函數為 plot() ,使用語法如下:

> `matplotlib.pyplot.plot`(**args*, *scalex=True*, *scaley=True*, *data=None*, ***kwargs*)

(1)簡單的折線圖

在matplotlib面向對象的繪圖庫中,pyplot是一個方便的接口。plot()函數:支持創建單條折線的折線圖,也支持創建包含多條折線的復式折線圖----只要在調用plot()時傳入多個分別代表X軸和Y軸數據的list列表即可。

```python
import matplotlib.pyplot as plt

x_data = ['2011','2012','2013','2014','2015','2016','2017']
y_data = [58000,60200,63000,71000,84000,90500,107000]

plt.plot(x_data,y_data)
plt.show()
```

屏幕快照 2021-08-31 下午5.36.12

(2)復式折線圖:

```python
import matplotlib.pyplot as plt
x_data = ['2011','2012','2013','2014','2015','2016','2017']
y_data = [58000,60200,63000,71000,84000,90500,107000]
y_data2 = [52000,54200,51500,58300,56800,59500,62700]

plt.plot(x_data,y_data,color='red',linewidth=2.0,linestyle='--')
plt.plot(x_data,y_data2,color='blue',linewidth=3.0,linestyle='-.')
plt.show()
```

屏幕快照 2021-08-31 下午5.34.19

注:

說明:

參數color=’ red ‘,可以換成color=’ #054E9F’,每兩個十六進制數分別代表R、G、B分量,除了使用red、blue、green等還可以參照下圖

屏幕快照 2021-08-31 下午5.43.38

參數linestyle可以選擇使用下面的樣式:

> '-' solid line style 表示實線
>
> '--' dashed line style 表示虛線
>
> '-.' dash-dot line style 表示短線、點相間的虛線
>
> ':' dotted line style 表示點線

參數 linewidth 可以指定折線的寬度

參數 marker 是指標記點,有如下的:

屏幕快照 2021-08-31 下午5.43.53

(3)管理圖例
對于復式折線圖,應該為每條折線添加圖例,可以通過legend()函數來實現。該函數可傳入兩個list參數,其中第一個list參數(handles參數)用于引用折線圖上的每條折線;第二個list參數(labels)代表為每條折線所添加的圖例

```python
import pandas as pd
import matplotlib.pyplot as plt

#讀取數據
data = pd.read_excel('matplotlib.xlsx')

plt.figure(figsize=(10,5))#設置畫布的尺寸
plt.title('Examples of line chart',fontsize=20)#標題,并設定字號大小
plt.xlabel(u'x-year',fontsize=14)#設置x軸,并設定字號大小
plt.ylabel(u'y-income',fontsize=14)#設置y軸,并設定字號大小

#color:顏色,linewidth:線寬,linestyle:線條類型,label:圖例,marker:數據點的類型
in1, = plt.plot(data['時間'],data['收入_Jay'],color="deeppink",linewidth=2,linestyle=':', marker='o')
in2, = plt.plot(data['時間'],data['收入_JJ'],color="darkblue",linewidth=1,linestyle='--', marker='+')
in3, = plt.plot(data['時間'],data['收入_Jolin'],color="goldenrod",linewidth=1.5,linestyle='-', marker='*')

plt.legend(handles = [in1,in2,in3],labels=['Jay income','JJ income','Jolon income'],loc=2)#圖例展示位置,數字代表第幾象限
plt.show()#顯示圖像
```

屏幕快照 2021-08-31 下午5.48.59

(4)管理多個子圖

```python
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec
import matplotlib.font_manager as fm #字體管理器

my_font = fm.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")

plt.figure()

x_data = np.linspace(-np.pi,np.pi,64,endpoint=True)
gs = gridspec.GridSpec(2,3) #將繪圖區分成兩行三列
ax1 = plt.subplot(gs[0,:])#指定ax1占用第一行(0)整行
ax2 = plt.subplot(gs[1,0])#指定ax2占用第二行(1)的第一格(第二個參數為0)
ax3 = plt.subplot(gs[1,1:3])#指定ax3占用第二行(1)的第二、三格(第二個參數為1:3)

#繪制正弦曲線
ax1.plot(x_data,np.sin(x_data))
ax1.spines['right'].set_color('none')
ax1.spines['top'].set_color('none')
ax1.spines['bottom'].set_position(('data',0))
ax1.spines['left'].set_position(('data',0))
ax1.set_title('正弦曲線',fontproperties=my_font)

#繪制余弦曲線
ax2.plot(x_data,np.cos(x_data))
ax2.spines['right'].set_color('none')
ax2.spines['top'].set_color('none')
ax2.spines['bottom'].set_position(('data',0))
ax2.spines['left'].set_position(('data',0))
ax2.set_title('余弦曲線',fontproperties=my_font)

#繪制正切曲線
ax3.plot(x_data,np.tan(x_data))
ax3.spines['right'].set_color('none')
ax3.spines['top'].set_color('none')
ax3.spines['bottom'].set_position(('data',0))
ax3.spines['left'].set_position(('data',0))
ax3.set_title('正切曲線',fontproperties=my_font)
plt.show()
```

結果:

屏幕快照 2021-08-31 下午6.00.00

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
精品久久亚洲中文字幕| 国产精品拍天天在线| 国产精品无码免费视频二三区| A级大胆欧美人体大胆666| 99视频69E精品视频| 抖抈短视频APP免费下载| 国产日韩AV免费无码一区二区三| 99久久免费精品高清特色大片 | 精品乱码久久久久久中文字幕| 国产成人精品亚洲日本专区61| 成年免费A级毛片| 国产美女遭强高潮网站| 久久久久琪琪去精品色一到本| 久久精品国产亚洲AV无码娇色| 狠狠色综合久久久久尤物| 美女下部裸体张开腿视频| 日韩AV无码一区二区三区不卡毛| 漂亮人妻被黑人久久精品| 无码一区二区三区老色鬼| 一本一道色欲综合网中文字幕| 亚洲中文字幕无码日韩| 边做饭边被躁BD在线播放| 国产作爱视频免费播放| 免费中国最大但人文艺术| 挺进美妇肉蚌深处| 又大又粗又爽的少妇免费视频| 中字幕一区二区三区乱码| 国产草草影院CCYYCOM| 久久精品国产亚洲AV久| 日韩系列 无码迅雷| 亚洲精品又大又粗| 成人H动漫精品一区二区 | 最新中文字幕AV无码不卡| 成人无码H免费动漫在线观看| 公交车伦流澡到高潮HNP| 精品无码久久久久久午夜| 日本熟妇人妻XXXXX人电影| 亚洲欧美国产国产一区二区| 成年片色大黄全免费网站久久 | 色综合色综合色综合色欲| 亚洲精品一卡2卡三卡4卡5卡| 亚洲色欲综合天堂亚洲| 刺激交换经历过程小说| 久久久久精品国产三级| 四虎国产精品永久免费网址| 治愈系恋人 电视剧| 国产熟女一区二区| 欧美丰满少妇内射XXXX免费| 亚洲AV无码一区东京热不卡| 办公室娇喘的短裙老师| 久久久久久精品免费免费| 玩弄JaPan白嫩少妇一区二区| 亚洲AV无码片VR一区二区三区| 亚洲日韩精品无码AV成人小说| 中国女人FREE性HD| 国产极品粉嫩馒头一线天AV| 女人露P毛视频·WWW| 亚洲国产区男人本色在线观看| 中文字幕爆乳JULIA女教师| 国产亚洲精品A第一页| 人妻中文字系列无码专区| 亚洲色自偷自拍另类小说 | 欧美群交性爱视频| 亚洲欧美另类激情综合区蜜芽| 做AJ的姿势教程大全图片高清版| 被黑人猛男强伦姧人妻完整版| 国产成人无码AV一区二区| 免费无码又爽又刺激高潮的动态图 | 天天在线看无码AV片| 4虎CVT4WD| 久久精品国产一区二区三区| 无码熟熟妇丰满人妻啪啪喷水| 亚洲一线产区二线产区| 国产精品无码DVD在线观看| 人妻av中年熟妇无码系列| 在线观看亚洲AV每日更新| 精二和精三的区别| 无码天堂亚洲国产AV麻豆| 丰满人妻跪趴高撅肥臀| 欧美一区二区在线视频人妻| 中国A级毛片免费| 久久精品99国产精品日本| 侮辱丰满美丽的人妻| 隔壁人妻偷人BD中字| 人妻AV资源先锋影音AV资源| 最新国产乱人伦偷精品免费网站| 国产边做边吃奶AⅤ视频免费 | 亚洲精品无码不卡在线播HE| 国产草草影院CCYYCOM| 日韩精品一区二区亚洲AV观看| 亚洲成AV人片不卡无码| 国产精品涩涩涩视频网站| 少妇又色又紧又爽又刺激视频 | 亚洲AV无码成人网站国产网站| 在线精品一区二区三区| 精JAVAPARSER乱偷| 亚洲AV片毛片成人观看| 国产精品久久久久久久9999| 熟妇高潮精品一区二区三区 | 亚洲AV永久无码精品网址| 国产成人午夜福利在线小电影| 老阿姨哔哩哔哩B站肉片入口6 | 一区二区三区国产精华护肤品| 成人乱码一区二区三区AV| 欧美性XXXXX极品| 重口00Ⅹ变态另类| 蜜臀少妇人妻在线| 中文字幕大香视频蕉| 蜜桃精品欧美一区二区三区| 中国MACBOOKPRO高清| 两个男用舌头到我的蕊花| 伊人久久精品AV无码一区| 久青草国产97香蕉在线影院| 一本大道东京热无码视频| 久久天天躁狠狠躁夜夜| 亚洲中文字幕爆乳人妻| 久久久久国产一区二区| 夜夜高潮次次欢爽AV女| 浪荡艳妇爆乳JUFD汗だく肉感| 亚洲AV嫩草AV极品在线观看| 国产乱码精品一品二品| 亚洲AV无码精品网站| 激情综合色五月丁香六月欧美| 色欲色欲天天天WWW亚洲伊 | 免费看无码自慰一区二区| 又粗又粗又黄又硬又深色的| 满月产奶1∨1POP骨科推荐| 最新国产精品亚洲| 欧美黑人又大又粗XXXXX| А√中文在线天堂| 日韩亚洲中字无码一区二区三区 | 欧美日韩精品SUV| XXX激情影院亚洲AV| 日韩少妇激情一区二区| 国产JJIZZ女人多水喷水| 天堂资源中文最新版在线一区| ぱらだいす天堂中文WWW最新版 | 国产日产欧洲无码视频| 亚洲AV无码AV在线影院| 黄 色 网 站 在 线 免费| 亚洲综合欧美在线一区在线播放 | 美女黄网站免费福利视频| 1688.COM成品网站入口| 青草伊人久久综在合线亚洲| 放荡娇妻张开腿任人玩H| 无码熟妇人妻在线视频| 精品人妻系列无码专区| 中国新疆XXXXXL19D| 人人爽天天碰天天躁夜夜躁| 丰满人妻无码AⅤ一区二区| 小BBW小BBW小BBW小| 久久精品人妻一区二区三区一 | 精品久久久久久国产| 永久免费AⅤ无码网站在线观看| 国产专区一线二线三线品牌| 亚洲日韩AV一区二区三区四区| 国产日产欧产精品精品APP| 亚洲欧美精品午睡沙发| 女人18片毛片60分钟完整版| 动性配人ⅩXXXX配| 亚洲JLZZJLZZ少妇| 免费A级毛片无码视频| 吃了继兄开的药我做的梦更 | 大豆期货交易价格| 亚洲 日韩 欧美 成人 在线观| 国产丰满美女A级毛片| 亚洲精品亚洲人成人网| 你再躲一个试试BY深巷无酒| 成人国产精品一区二区免费看 | 成人永久免费福利视频免费 | 久久婷婷五月综合色99啪AK| 1000部无遮挡拍拍拍免费视频| 浪荡人妻共32部黑人大凶器电影| 亚洲熟妇无码乱子AV电影| 免费人妻精品一区二区三区| 短篇公交车高H肉辣全集目录| 少妇高潮太爽了在线播放| 国色天香A区与B区| 51久久精品人人搡人人玩| 玩爽少妇人妻系列无码| 久久水蜜桃网国产无线网欧美日韩| 亚洲尤码不卡AV麻豆| 人妻少妇久久精品电影| 国产福利一区二区久久| 一个上添B一个下添| 日产无人区一线二线三线最新版 | 97夜夜澡人人爽人人喊A| 日日麻批免费40分钟无码| 加比勒色综合久久| MM1313亚洲国产精品无码试看| 热99RE久久免费视精品频| 国产精品久久久久久久久久免费 | 少妇 黑人 欧美 亚洲| 精品人妻少妇一区二区| 被公侵犯的漂亮人妻中文字幕| 日本熟妇色熟妇在线视频播放| 被教官按在寝室狂到腿软视频| 日产精品卡2卡3卡4卡免费| 娇妻系列交换27部多P小| 被群CAO的合不拢腿H纯肉视频 |