【python實(shí)戰(zhàn)】matplotlib繪圖(三)

今天主要講一下get到的一些小技能刷钢,包括:

  1. 當(dāng)坐標(biāo)軸標(biāo)簽太長串绩,出框的時(shí)候室琢,自動(dòng)調(diào)整子圖——語句:plt.tight_layout()
  2. 自動(dòng)調(diào)整text(文本標(biāo)簽)的位置遮糖,避免重疊——調(diào)包:adjustText(具體文檔見adjustText文檔
  3. 調(diào)用已有的顏色主題麻汰;Choosing Colormaps in Matplotlib
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import matplotlib.transforms as mtransforms
from matplotlib.ticker import FuncFormatter
from adjustText import adjust_text
from matplotlib import cm
#設(shè)置字體速客、圖形樣式
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False
# 顏色轉(zhuǎn)換
def RGB_to_Hex(tmp):
    rgb = tmp.split(',')#將RGB格式劃分開來
    strs = '#'
    for i in rgb:
        num = int(i)#將str轉(zhuǎn)int
        #將R、G五鲫、B分別轉(zhuǎn)化為16進(jìn)制拼接轉(zhuǎn)換并大寫
        strs += str(hex(num))[-2:].replace('x','0').upper()
    return strs

1.左右條形圖(left_right_barh)

left_right_barh.png
def left_right_barh(fig,subplotid,ylabel,values1,values2,label1,label2,textformat,withlegend=1,category=0,filename=0):
    values1=[0-i for i in values1]
    # 倒序
    ylabel,values1,values2=ylabel[::-1],values1[::-1],values2[::-1]
    # 作圖
    ax=fig.add_subplot(subplotid)
    barh1=ax.barh(ylabel,width=values1,label=label1)
    barh2=ax.barh(ylabel,width=values2,label=label2)
    # 去掉邊框
    orientation=['top','bottom','right']
    for o in orientation:
        ax.spines[o].set_visible(False)
    # 去掉xticks
    ax.set_xticks(())
    # 圖例
    if withlegend:
        ax.legend(ncol=2, bbox_to_anchor=(0.5, -0.1),edgecolor='w',
                      loc='lower center', fontsize='small')
    # y軸標(biāo)題
    if category:
        ax.set_ylabel(category)
    # 添加barh的數(shù)據(jù)標(biāo)簽
    texts=[]
    for b in barh1:
        texts.append(ax.text(b.get_width()-0.04,b.get_y()+b.get_height()/3,
            format(-b.get_width(),textformat),va="center",ha='left'))
    for b in barh2:
        texts.append(ax.text(b.get_width(),b.get_y()+b.get_height()/3,
            format(b.get_width(),textformat),va="center",ha='right'))
    adjust_text(texts,only_move={'points':'x', 'text':'x', 'objects':'x'}) #避免y軸上的調(diào)整
    plt.tight_layout()#調(diào)整子圖溺职,避免標(biāo)簽出框,自動(dòng)調(diào)整的語句,圖則會(huì)自動(dòng)調(diào)整標(biāo)簽大小
    if filename:
        plt.savefig(filename,dpi=600)
    return ax
def left_right_barh_ex():
    # 數(shù)據(jù)
    ylabel=["不識(shí)字或識(shí)字很少","小學(xué)","初中","普通高中","中等職業(yè)/技術(shù)/師范學(xué)校","高職/大專","本科","研究生","博士"]
    values1=[0.0477,0.2013,0.2751,0.128,0.0774,0.1219,0.1244,0.0172,0.007]
    values2=[0.0196,0.1405,0.2834,0.1577,0.0597,0.1275,0.1698,0.0299,0.0119]
    textformat='.2%'
    fig=plt.figure()
    left_right_barh(fig,111,ylabel=ylabel,values1=values1,values2=values2,
        label1='母親',label2='父親',filename="left_right_barh.png",textformat=textformat)
    plt.show()
left_right_barh_ex()
  1. 若不加plt.tight_layout()的效果如下位喂,可以看到辅愿,縱坐標(biāo)標(biāo)簽太長已經(jīng)出去了。
left_right_barh(軸標(biāo)簽未調(diào)整).png
  1. 若不加adjust_text(texts,only_move={'points':'x', 'text':'x', 'objects':'x'})的效果如下忆某,可以看到点待,數(shù)據(jù)標(biāo)簽擠在一起了。
left_right_barh(數(shù)據(jù)標(biāo)簽未調(diào)整).png

adjustText這個(gè)包在做散點(diǎn)圖進(jìn)行數(shù)據(jù)標(biāo)簽添加時(shí)弃舒,應(yīng)該是最有用的癞埠,文檔中的例子如下:

adjustText.png

2.簡單柱狀圖(simple_bar)

simple_bar1.png
def simple_bar(xlabel,value,colorname,filename):
    # 系列顏色選取
    colorname=cm.get_cmap(name=colorname)
    color=colorname(value)
    fig=plt.figure()
    ax=fig.add_subplot()
    bar=ax.bar(xlabel,value,color=color)
    # 去掉邊框
    orientation=['top','left','right']
    for o in orientation:
        ax.spines[o].set_visible(False)
    # 去掉xticks
    ax.set_yticks(())
    # 文本標(biāo)簽
    for b in bar:
        ax.text(b.get_x()+b.get_width()/2,b.get_height()+0.01,
            format(b.get_height(),'.2%'),va="center",ha='center')
    plt.savefig(filename,dpi=600)
    plt.show()
def simple_bar_ex1():
    xlabel=["5萬元以下",    "5萬-10萬",   "11萬-20萬",  "21萬-40萬",  "41萬以上"]
    value=[0.3417,  0.3095, 0.2272, 0.0858, 0.0359]
    simple_bar(xlabel,value,colorname='coolwarm',filename='simple_bar1.png')

這里用的colorname是”coolwarm”状原,改一下這個(gè)colorname為“Pastel1”,效果如下:

simple_bar11.png

現(xiàn)有的主題顏色有:

color1.png
color2.png
color3.png
color4.png
color5.png
color6.png
color7.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苗踪,一起剝皮案震驚了整個(gè)濱河市颠区,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌通铲,老刑警劉巖毕莱,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颅夺,居然都是意外死亡朋截,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門吧黄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來部服,“玉大人,你說我怎么就攤上這事拗慨±耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵赵抢,是天一觀的道長剧蹂。 經(jīng)常有香客問我,道長烦却,這世上最難降的妖魔是什么国夜? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮短绸,結(jié)果婚禮上车吹,老公的妹妹穿的比我還像新娘。我一直安慰自己醋闭,他們只是感情好窄驹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著证逻,像睡著了一般乐埠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囚企,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天丈咐,我揣著相機(jī)與錄音,去河邊找鬼龙宏。 笑死棵逊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的银酗。 我是一名探鬼主播辆影,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼徒像,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛙讥?” 一聲冷哼從身側(cè)響起锯蛀,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎次慢,沒想到半個(gè)月后旁涤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迫像,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年劈愚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侵蒙。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖傅蹂,靈堂內(nèi)的尸體忽然破棺而出纷闺,到底是詐尸還是另有隱情,我是刑警寧澤份蝴,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布犁功,位于F島的核電站,受9級特大地震影響婚夫,放射性物質(zhì)發(fā)生泄漏浸卦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一案糙、第九天 我趴在偏房一處隱蔽的房頂上張望限嫌。 院中可真熱鬧,春花似錦时捌、人聲如沸怒医。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稚叹。三九已至,卻和暖如春拿诸,著一層夾襖步出監(jiān)牢的瞬間扒袖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工亩码, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留季率,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓描沟,卻偏偏與公主長得像蚀同,于是被迫代替她去往敵國和親缅刽。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348