<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          超好看!手把手教你用Matplotlib畫(huà)一張好看的圖

          共 3788字,需瀏覽 8分鐘

           ·

          2021-04-09 22:24


          ↑↑↑關(guān)注后"星標(biāo)"簡(jiǎn)說(shuō)Python

          人人都可以簡(jiǎn)單入門Python、爬蟲(chóng)、數(shù)據(jù)分析
           簡(jiǎn)說(shuō)Python推薦 
          來(lái)源:Python讀財(cái)

          作者:易執(zhí)

          Matplotlib進(jìn)階圖表繪圖第一篇,手把手教你如何從0到1畫(huà)出一張好看的圖。

          本文用的數(shù)據(jù)如圖所示,Dataframe中顯示的是相關(guān)職位對(duì)應(yīng)的地區(qū)和相應(yīng)的薪水狀況,單位是千,要統(tǒng)計(jì)各個(gè)城市的薪資狀況。

          最終目的是用Matplotlib結(jié)合Seaborn得到這種可視化效果

          首先,導(dǎo)入要用到的包,由于需要在圖中顯示中文字,還需要進(jìn)行一些字體的設(shè)置。

          import matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline
          # 設(shè)置中文字體為微軟雅黑plt.rcParams['font.sans-serif'] = 'SimHei'

          先用Seaborn生成一張基礎(chǔ)的柱狀圖,并給圖加上標(biāo)題,之后圍繞這張圖進(jìn)行進(jìn)一步的修改。

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax)ax.set_title('各城市薪資水平對(duì)比')

          可以比較明顯看出橫縱坐標(biāo)的刻度標(biāo)簽的字體有點(diǎn)小,同時(shí)刻度線顯示起來(lái)不好看,所以第一步把刻度標(biāo)簽的字體放大去掉刻度線。

          由于刻度的設(shè)置是tick的屬性,所以用ax.tick_param()進(jìn)行設(shè)置,用參數(shù)labelsize指定刻度標(biāo)簽的大小,將length參數(shù)設(shè)置刻度線長(zhǎng)短。

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax)ax.set_title('各城市薪資水平對(duì)比')
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)

          第二步,去掉四邊的邊框(真的不好看),這里有兩種實(shí)現(xiàn)方式。

          第一種是用上篇文章說(shuō)過(guò)的ax.spines['xx'].set_visible(False)分別對(duì)topbottoom、leftright進(jìn)行設(shè)置。

          第二種方式,由于這里只有一個(gè)Axes且四個(gè)邊框都去掉,所以也可以直接使用plt.box(False)

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax)ax.set_title('各城市薪資水平對(duì)比')
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)
          #法一:ax.spines['left'].set_visible(False)ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['bottom'].set_visible(False)
          #法二plt.box(False)

          接下來(lái),為了使條形圖呈從小到大漸變的效果,可以指定各個(gè)城市的排列順序,并設(shè)置相應(yīng)的顏色映射。

          對(duì)各個(gè)城市的薪水求均值并從小到大排序,獲取城市排序列表city_order

          city_order = df.groupby("city")["salary"].mean()\               .sort_values()\               .index.tolist()

          然后用Seaborn中的orderpalette分別設(shè)置排列順序顏色。

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax,           order = city_order,palette = "RdBu_r")ax.set_title('各城市薪資水平對(duì)比')
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)plt.box(False)

          緊接著在y軸上添加網(wǎng)格線便于觀察每個(gè)柱子的數(shù)值大小,因?yàn)槭窃趛軸上,網(wǎng)格線為grid,所以用ax.yaxis.grid()進(jìn)行設(shè)置

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax,           order = city_order,palette = "RdBu_r")ax.set_title('各城市薪資水平對(duì)比')
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)plt.box(False)
          # 設(shè)置y軸網(wǎng)格線ax.yaxis.grid(linewidth=0.5,color='black')# 將網(wǎng)格線置于底層ax.set_axisbelow(True)

          由于x軸和y軸含義比較清晰,所以可以將橫縱坐標(biāo)的標(biāo)簽去掉,同時(shí),為了更直觀,可以將y軸的刻度標(biāo)簽由20,15...換成20k,15k...

          這個(gè)過(guò)程分別用到ax.set_xlabel(),ax.set_ylabel()ax.set_yticklabels()

          fig,ax = plt.subplots(figsize=(9,6))sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax,           order = city_order,palette = "RdBu_r")ax.set_title('各城市薪資水平對(duì)比')
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)plt.box(False)
          # 設(shè)置y軸網(wǎng)格線ax.yaxis.grid(linewidth=0.5,color='black')# 將網(wǎng)格線置于底層,ax.set_axisbelow(True)
          ax.set_xlabel('')ax.set_ylabel('')# 將0處設(shè)為空字符串,其他地方加上kax.set_yticklabels([" ","5k","10k","15k","20k"])

          最后對(duì)標(biāo)題進(jìn)行設(shè)置,讓標(biāo)題更加好看,這一步主要是對(duì)ax.set_title()中的參數(shù)進(jìn)行調(diào)整,主要包括

          • backgroundcolor:控制背景顏色
          • fontsize:控制字體大小
          • weight:控制字體粗細(xì)
          • color:控制字體顏色
          fig,ax = plt.subplots(figsize=(9,6))
          sns.barplot(x='city',y='salary',data=df,ci=95,ax=ax, order = city_order,palette = "RdBu_r")
          # 字體為16px大小,刻度線長(zhǎng)度為0ax.tick_params(labelsize=16,length=0)plt.box(False)
          # 設(shè)置y軸網(wǎng)格線ax.yaxis.grid(linewidth=0.5,color='black')# 將網(wǎng)格線置于底層,ax.set_axisbelow(True)
          ax.set_xlabel('')ax.set_ylabel('')# 將0處設(shè)為空字符串,其他地方加上kax.set_yticklabels([" ","5k","10k","15k","20k"])
          ax.set_title(' 各城市薪資水平對(duì)比 ',backgroundcolor='#3c7f99', fontsize=24, weight='bold',color='white')

          我講的比較細(xì),所以可能會(huì)讓大家覺(jué)得畫(huà)起來(lái)挺復(fù)雜的,其實(shí)數(shù)數(shù)最后的代碼也就10行代碼,只是細(xì)節(jié)的地方比較多。如果把之前兩篇相關(guān)文章看懂了,相信這篇理解起來(lái)難度并不大。

          好了,從此之后你用Matplotlib畫(huà)出來(lái)的圖就是和別人不一樣!

          -end-

          掃下方二維碼添加我的私人微信,可以在我的朋友圈獲取最新的Python學(xué)習(xí)資料,以及近期推文中的源碼或者其他資源,另外不定期開(kāi)放學(xué)習(xí)交流群,以及朋友圈福利(送書(shū)、紅包、學(xué)習(xí)資源等)。
          掃碼查看我朋友圈
          獲取最新學(xué)習(xí)資源
          學(xué)習(xí)更多:
          整理了我開(kāi)始分享學(xué)習(xí)筆記到現(xiàn)在超過(guò)250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲(chóng)、機(jī)器學(xué)習(xí)等方面,別再說(shuō)不知道該從哪開(kāi)始,實(shí)戰(zhàn)哪里找了
          點(diǎn)贊”傳統(tǒng)美德不能丟 
          瀏覽 83
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人电影一二三区 | 黑人大粗鸡巴肏白人老骚 逼 | 国产免费黄色 | 在线a片视频 | 天天舔天天爱天天干 |