麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

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

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

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

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

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

來源:千鋒教育
發布人: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ⅴ一区二区三区无卡无码| 欧美一区二区影院| 老师的胸好软| 午夜影院老司机| 午夜dj在线观看免费高清在线| 女扒开尿口让男桶30分钟| 嫩草视频在线免费观看| sss视频在线精品| 大伊香蕉精品一区视频在线 | 好男人社区神马www在线观看| 女神捕电影高清在线观看| 好爽~好大~不要| 精品一区二区三区水蜜桃| 国产刺激视频| 黑人在线观看| 午夜爽爽爽| 午夜体验试看120秒| 在线看无码的免费网站| 十九岁日本电影免费完整版观看| 55夜色66夜色国产精品视频| 一个人免费视频观看在线www| 果冻传媒mv在线观看入口免费| swag在线观看| 久草网在线| 男生和女生一起差差在线观看| 日日涩| 新人本田岬847正在播放| 日韩欧美国产电影| 大美香蕉伊在看欧美| 欧美精品一区二区三区视频| 女人18片毛片60分钟| 一本色道久久88加勒比—综合 | 黑人一个接一个上来糟蹋| 正在播放pppd| 久久麻豆视频| 亚洲日韩中文字幕天堂不卡| 日本一道高清一区二区三区| 无忧传媒在线观看| 麻豆一区区三三四区产品麻豆|