亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python:matplotlib畫(huà)圖總結(jié),同時(shí)展示不同大小的圖,顯示中文

系統(tǒng) 3393 0

文章目錄

  • 1. 畫(huà)單圖、并列圖、以及調(diào)整圖的大小
    • 1.1. 生成圖像
    • 1.2. 圖中含有中文
    • 1.3. 設(shè)置大標(biāo)題
    • 1.4. 生成子圖
    • 1.5. 網(wǎng)格劃分整個(gè)圖像,同時(shí)展示不同大小的圖
    • 1.6. 畫(huà)折線圖
    • 1.7. 畫(huà)柱狀圖
    • 1.8. 設(shè)置子圖的標(biāo)題
    • 1.9. 設(shè)置坐標(biāo)軸的label
    • 1.10. 設(shè)置以及修改坐標(biāo)軸的刻度(ticks)
    • 1.11. 設(shè)置圖例
    • 1.12. 保存以及顯示圖像
  • 2. 整體代碼以及結(jié)果的展示
    • 2.1. 結(jié)果
    • 2.2. 代碼

??這篇blog長(zhǎng)期更新,主要總結(jié)matplotlib的作圖技巧,matplotlib涉及畫(huà)圖的類(lèi)有 pyplot(畫(huà)圖), axes(坐標(biāo)軸), figure(圖像)等,一般這三個(gè)類(lèi)都有相應(yīng)的函數(shù),可以幫助我們進(jìn)行畫(huà)圖,彼此之間有很大的重復(fù),不同的blog一般偏重不同的類(lèi),所以給人的感覺(jué)就有點(diǎn)亂,點(diǎn)擊類(lèi)的名字可以超鏈接到各自的官方文檔。

??這篇blog側(cè)重axes類(lèi),但也會(huì)涉及到其他的類(lèi)。首先導(dǎo)入下面的庫(kù)

            
              import numpy as np
import pandas as pd
import seaborn as sns   # 畫(huà)熱力圖需要的庫(kù),如果不畫(huà)熱力圖可以不加
import matplotlib.pyplot as plt   # Python畫(huà)圖工具 
from matplotlib.gridspec import GridSpec     # 利用網(wǎng)格確定圖形的位置

            
          

??我們就簡(jiǎn)單的畫(huà)下面的數(shù)據(jù)到三個(gè)大小不同的子圖上。

            
              x1 = np.linspace(1,10,10)
y1 = np.linspace(10,1,10)
x2 = range(1,11)
y2 = np.random.rand(10)   # 生成10個(gè)隨機(jī)數(shù)
x3 = np.linspace(0,20,1000)
y3 = np.sin(x3)

            
          

1. 畫(huà)單圖、并列圖、以及調(diào)整圖的大小

1.1. 生成圖像

??plt.figure()生成一個(gè)Figure對(duì)象,這個(gè)方法可以傳入figsize參數(shù)調(diào)節(jié)生成圖像的大小,注意這是整個(gè)圖像的大小。

            
              fig = plt.figure(figsize=(20,20))

            
          

1.2. 圖中含有中文

??如果圖的標(biāo)題等含有中文,需要加上下面的代碼,matplotlib默認(rèn)是不能顯示中文的。

            
              plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

            
          

??matplotlib默認(rèn)的英文字體輸出挺丑的,這里我們輸出英文時(shí),改用比較正式的Times New Roman字體。

            
              plt.rcParams['font.sans-serif']=['Times New Roman']

            
          

1.3. 設(shè)置大標(biāo)題

??fig.suptitle()函數(shù)設(shè)置大標(biāo)題, 該方法可以傳入x,y來(lái)調(diào)整圖像的位置,注意這里的x,y是整個(gè)圖像的x,y,后面axes的某些函數(shù)也有x,y,但一般是所畫(huà)子圖的x,y ;可以傳入fontsize來(lái)改變標(biāo)題的大小。后面會(huì)用axes的set_title()函數(shù)來(lái)設(shè)置子圖的標(biāo)題,注意標(biāo)題的作用范圍。

            
              fig.suptitle('測(cè)試', fontsize=30, x=0.5, y=0.93)

            
          

1.4. 生成子圖

??fig.add_subplot(m, n, x)方法可以用于快速生成相同大小的子圖,返回axes對(duì)象,含義是,我們把Figure分成 m × n m\times n m × n 個(gè)子圖,生成的子圖是其中的第x個(gè),下面示例生成一個(gè)2*2共四個(gè)子圖,

            
              ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

            
          

??當(dāng)然,如果我們只需要一個(gè)圖,就沒(méi)有子圖的概念了,可以寫(xiě)成

            
              ax = fig.add_subplot(1,1,1)

            
          

1.5. 網(wǎng)格劃分整個(gè)圖像,同時(shí)展示不同大小的圖

??這是一種進(jìn)階方法來(lái)生成子圖,利用GridSpec(m, n)把1.1.生成的Figure劃分成m行n列的網(wǎng)格圖,這樣的好處是,我們可以手動(dòng)設(shè)置我們的圖像占據(jù)其中的的若干行和若干列,實(shí)現(xiàn)同時(shí)展示不同大小的圖的功能,設(shè)置代碼如下

            
              gs = GridSpec(40, 40)   # 把Figure分成40*40的網(wǎng)格圖
# ax1是axes對(duì)象,這一步意思是ax1畫(huà)的圖在原圖(40*40)占據(jù)行5-14,占據(jù)列5-14(從零開(kāi)始索引)
ax1 = fig.add_subplot(gs[5:15, 5:15])  

            
          

1.6. 畫(huà)折線圖

??我們可以利用axes.plot()畫(huà)折線圖, label參數(shù)會(huì)用于圖例 ,這個(gè)函數(shù)有一些重要的參數(shù)可以看官方文檔。

            
              ax1.plot(x1, y1, label='第一個(gè)子圖')

            
          

1.7. 畫(huà)柱狀圖

??我們可以利用axes.bor()畫(huà)柱狀圖。

            
              ax2 = fig.add_subplot(gs[:20, 20:])   # ax2畫(huà)的圖在原圖(40*40)占據(jù)行20-39,占據(jù)列20-39(從零開(kāi)始索引)
ax2.bar(x2, y2, label='第二個(gè)子圖')

            
          

1.8. 設(shè)置子圖的標(biāo)題

??我們可以利用axes.set_title()設(shè)置子圖的標(biāo)題,注意1.3.設(shè)置的是大標(biāo)題,該方法同樣可以傳入x,y來(lái)調(diào)整圖像的位置,x,y是相對(duì)子圖的x,y;可以傳入fontsize來(lái)改變標(biāo)題的大小。

            
              ax1.set_title('第一', fontsize=30, x=0.5, y=1.02)

            
          

1.9. 設(shè)置坐標(biāo)軸的label

??我們可以利用axes.set_xlabel()和axes.set_ylabel()分別設(shè)置x,y坐標(biāo)軸的label,可以傳入fontsize來(lái)改變標(biāo)題的大小

            
              ax1.set_xlabel('X', fontsize=30)
ax1.set_ylabel('Y', fontsize=30)

            
          

1.10. 設(shè)置以及修改坐標(biāo)軸的刻度(ticks)

??我們可以利用axes.set_xticks()和axes.set_yticks()分別設(shè)置x,y坐標(biāo)軸的 刻度的位置 ,默認(rèn)情況下,這些位置也就是刻度標(biāo)簽,但我們可以通過(guò)set_xticklabels()和set_yticklabels()將任何其他的值用作 標(biāo)簽

            
              ax1.set_xticks(range(0,10))   # 告訴matplotlib刻度存在的位置
ax1.set_xticklabels(['a', '上海','b', '廣州','c', '北京','d', '南京','e', '浙江'])    # 告訴matplotlib刻度的位置上的刻度應(yīng)該是什么

            
          

??同時(shí),我們可以通過(guò)axes.tick_params()修改刻度的一些參數(shù),axis={‘x’, ‘y’, ‘both’}用于確定需要改變的坐標(biāo)軸, labelsize用于確定刻度的大小,rotation用于確定刻度是否要進(jìn)行翻轉(zhuǎn),一般當(dāng)x軸刻度過(guò)長(zhǎng)時(shí),可以設(shè)置rotation=90來(lái)讓其旋轉(zhuǎn)90度。

            
              ax1.tick_params(axis='x', labelsize=20, rotation=90)   # 改變ticks值
ax1.tick_params(axis='y', labelsize=20)   # 改變ticks值

            
          

1.11. 設(shè)置圖例

??我們可以利用axes.legend()設(shè)置圖例,圖例就是我們?cè)?.7或1.8中的label,當(dāng)然可以重新定義(這一點(diǎn)可以看官網(wǎng)),這里可以通過(guò)fontsize調(diào)整圖例大小, loc調(diào)整圖例的位置。

            
              ax1.legend(fontsize=10, loc='upper right')

            
          

??有些高度封裝的函數(shù)可能自己帶圖例,如果我們想要移除圖例,可以

            
              axes.legend_.remove()

            
          

??如果想把圖例設(shè)置到子圖外面,我們可以利用

            
              ax1.legend(loc=2, bbox_to_anchor=(1.05,1.0),borderaxespad = 0.) 

            
          

其中參數(shù)loc=2就相當(dāng)于loc=‘upper left’,也就是說(shuō),我們要把圖例框的左上角,放在圖的(1.05,1.0)坐標(biāo)處,也就是放到圖的外面。

1.12. 保存以及顯示圖像

??保存使用plt.savefig(),顯示使用plt.show(), 一定要先保存后顯示 ,因?yàn)閜lt.show()后就會(huì)生成一個(gè)新的空白圖像,之后使用plt.savefig()就會(huì)存成空白的圖像。

            
              plt.savefig('xxx.png')   # 一定在plt.show()前面
plt.show()

            
          

2. 整體代碼以及結(jié)果的展示

2.1. 結(jié)果

python:matplotlib畫(huà)圖總結(jié),同時(shí)展示不同大小的圖,顯示中文,常用函數(shù)介紹等_第1張圖片

2.2. 代碼

            
              fig = plt.figure(figsize=(20,20))

plt.rcParams['font.sans-serif']=['SimHei']  # 用于顯示中文
plt.rcParams['axes.unicode_minus'] = False  # 用于顯示中文

# plt.rcParams['font.sans-serif']=['Times New Roman']

fig.suptitle('測(cè)試', fontsize=30, x=0.5, y=0.93)

# 生成相同大小的4個(gè)子圖
# ax1 = fig.add_subplot(2,2,1)
# ax2 = fig.add_subplot(2,2,2)
# ax3 = fig.add_subplot(2,2,3)
# ax4 = fig.add_subplot(2,2,4)

# 生成一個(gè)圖
# ax = fig.add_subplot(1,1,1)

gs = GridSpec(40, 40)

# 第一個(gè)子圖
ax1 = fig.add_subplot(gs[5:15, 5:15])  # ax1是axes對(duì)象,這一步意思是ax1畫(huà)的圖在原圖(40*40)占據(jù)行5-14,占據(jù)列5-14(從零開(kāi)始索引)
ax1.plot(x1, y1, label='第一個(gè)子圖')
ax1.set_title('第一', fontsize=30, x=0.5, y=1.02)
ax1.set_xlabel('X', fontsize=30)
ax1.set_ylabel('Y', fontsize=30)
ax1.set_xticks(range(0,10))   # 告訴matplotlib刻度存在的位置
ax1.set_xticklabels(['a', '上海','b', '廣州','c', '北京','d', '南京','e', '浙江'])    # 告訴matplotlib刻度的位置上的刻度應(yīng)該是什么
# ax1.set_yticks(range(0,10))
# ax1.set_yticklabels()
ax1.tick_params(axis='x', labelsize=20, rotation=90)   # 改變ticks值
ax1.tick_params(axis='y', labelsize=20)   # 改變ticks值
ax1.legend(fontsize=10, loc=2, bbox_to_anchor=(1.05,1.0),borderaxespad = 0.)

# 第二個(gè)子圖
ax2 = fig.add_subplot(gs[:20, 20:])   # ax2畫(huà)的圖在原圖(40*40)占據(jù)行20-39,占據(jù)列20-39(從零開(kāi)始索引)
ax2.bar(x2, y2, label='第二個(gè)子圖')   
ax2.set_title('第二', fontsize=30, x=0.5, y=1.02)
ax2.set_xlabel('X', fontsize=30)
ax2.set_ylabel('Y', fontsize=30)
ax2.tick_params(axis='x', labelsize=25)   # 改變ticks值
ax2.tick_params(axis='y', labelsize=25)   # 改變ticks值
ax2.legend(fontsize=30, loc='upper right')

# 第三個(gè)子圖
ax3 = fig.add_subplot(gs[22:, :])    # ax3畫(huà)的圖在原圖(40*40)占據(jù)行22-39,占據(jù)所有的列(從零開(kāi)始索引)
ax3.plot(x3, y3, label='第三個(gè)子圖')   
ax3.set_title('第三', fontsize=30, x=0.5, y=1.02)
ax3.set_xlabel('X', fontsize=30)
ax3.set_ylabel('Y', fontsize=30)
ax3.tick_params(axis='x', labelsize=25)   # 改變ticks值
ax3.tick_params(axis='y', labelsize=25)   # 改變ticks值
ax3.legend(fontsize=30, loc='upper right')

plt.savefig('xxx.png')
plt.show()

            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 米奇7777狠狠狠狠视频影院 | 久久精品国产四虎 | 91最新免费地址入口 | 日韩免费中文字幕 | 欧美日韩成人午夜免费 | 久久久国产这里有的是精品 | 日韩欧美一区二区三区久久 | 天天综合久久久网 | 不卡猪 | 日日摸夜夜爽久久综合 | 热久久国产精品 | 99热久久国产精品这里小说 | 亚洲精品一区二区三区福利 | 日本aaaa级毛片在线看 | 97视频免费观看 | 亚洲黄色在线看 | 久久水蜜桃 | 精品小视频在线 | 欧美一区二区三区精品影视 | 波多野一区二区三区在线 | 欧美aaaa在线观看视频免费 | 久久精品国产99久久6动漫欧 | 久久久久综合中文字幕 | 人人爽天天爽 | 情趣视频网站在线观看 | 日本aaaa| 中文字幕在线观看不卡 | 亚洲国产精品乱码在线观看97 | 国产欧美精品三区 | 欧美高清成人 | 国产成人精品一区二区免费 | 日本九九视频 | 草草福利影院 | 极品欧美人体xxxxoo | 色噜噜五月综合激情久久爱 | 狠狠色噜噜狠狠狠狠色综合久 | 日本xxxx色视频在线观看免 | 色综合网站国产麻豆 | 欧美精品中文字幕手机免费视频 | 欧美交换乱理伦片在线观看 | 91精彩视频 |