【python實戰(zhàn)】matplotlib繪圖(一)

上次用pyecharts畫了地圖,【python實戰(zhàn)】 pyecharts繪制地圖
雖然很好看牢屋,但是且预,考慮到渲染成圖片時間比較長,因此烙无,要是要批量作圖的話锋谐,還是用matplotlib比較好,就像之前的Python批量word報告(帶圖)【思路篇】
截酷,也是用的matplotlib涮拗。

matplotlib算是很底層的包了,好處在于個性化設(shè)置上更靈活迂苛,缺點可能是要寫的代碼更多些吧三热,但是,總的來說灾部,瑕不掩瑜康铭。

在學(xué)著用matplotlib作圖的時候,主要是看matplotlib(https://matplotlib.org/index.html)里面的例子以及相應(yīng)的文檔赌髓。但不得不說从藤,里面的文檔真的挺難看的,pyecharts的就好看多了锁蠕。另外就是加上搜索引擎了夷野。

這里放兩個最近用到的圖。

1.條形圖(broken_barh)

broken_barh.png
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.lines as lines

# 顏色轉(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進制拼接轉(zhuǎn)換并大寫
        strs += str(hex(num))[-2:].replace('x','0').upper()
    return strs

#設(shè)置字體、圖形樣式
# sns.set_style("whitegrid")
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False

# 數(shù)據(jù)
data={
        "data": [
            {"name":'全省',"5pct": 354, "mean":500,"95pct":684},
            {"name":'全市',"5pct": 342, "mean":511,"95pct":668},
            {"name":'A縣',    "5pct": 327, "mean":514,"95pct":661}
        ],
    }

# 數(shù)據(jù)設(shè)置
ylabel=[d["name"] for d in data['data']]
pct5=[d["5pct"] for d in data['data']]
pct95=[d["95pct"] for d in data['data']]
mean=[d["mean"] for d in data['data']]
xbar=[(d["5pct"],d["95pct"]-d["5pct"]) for d in data['data']]

# 屬性設(shè)置
yticks=[5,10,15]
xlim=(min(pct5)-100,max(pct95)+100)
colors=[RGB_to_Hex('255,140,0'),RGB_to_Hex('107,142,35'),RGB_to_Hex('116,162,221')]
barheight=2

# 作圖
# 設(shè)置圖形大小
plt.rcParams['figure.figsize'] = (6,2.5) 
fig, ax = plt.subplots()
for i in range(len(xbar)):
    ax.broken_barh([xbar[i]],(4+i*5,barheight),facecolors=(colors[i]))
    # 加標(biāo)簽
    ax.text(pct5[i]-40,yticks[i]-0.2,str(pct5[i]),size=10)
    ax.text(pct95[i]+10,yticks[i]-0.2,str(pct95[i]),size=10)
    ax.text(mean[i]-30,yticks[i]-0.2,str(mean[i]),size=10,color='black')
    # 加豎線
    line = lines.Line2D([mean[i],mean[i]], [4+i*5,4+i*5+barheight],
                    lw=1, color='black', axes=ax)
    ax.add_line(line)

# 去掉邊框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

#設(shè)置x軸取值范圍舌仍,y軸間隔及標(biāo)簽
ax.set_xlim(xlim)
ax.set_yticks(yticks)
ax.set_yticklabels(ylabel)

plt.savefig("broken_barh.png",dpi=600,bbox_inches = 'tight')
plt.show()

2.散點圖(scatter)

scatter.png
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.lines as lines
from matplotlib.ticker import FuncFormatter

# 顏色轉(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進制拼接轉(zhuǎn)換并大寫
        strs += str(hex(num))[-2:].replace('x','0').upper()
    return strs

#設(shè)置字體铸豁、圖形樣式
# sns.set_style("whitegrid")
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False

# 數(shù)據(jù)(太多了灌曙,就只放三條吧)
data={
        "data": [
        {"校間差異":0.135311972763609,"全省其他縣":0,"你市各縣":577.362102747501,"你市":0},
        {"校間差異":0.0616036942022612,"全省其他縣":0,"你市各縣":546.788848220486,"你市":0},
        {"校間差異":0.209066958823479,"全省其他縣":0,"你市各縣":517.929672671431,"你市":0}
    }

# 數(shù)據(jù)設(shè)置
x=[d["校間差異"] for d in data['data']]
y1=[d["全省其他縣"] for d in data['data'] ]
y2=[d["你市各縣"] for d in data['data']]
y3=[d["你市"] for d in data['data']]
label=["全省其他縣","你市各縣","你市"]


# 作圖
# 設(shè)置圖形大小
plt.rcParams['figure.figsize'] = (8,6) 
fig, ax = plt.subplots()
ax.scatter(x,y1,c=RGB_to_Hex('79,129,189'),label=label[0])
ax.scatter(x,y2,c=RGB_to_Hex('0,176,80'),label=label[1])
ax.scatter(x,y3,c=RGB_to_Hex('228,108,10'),marker='^',label=label[2])

# 去掉邊框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

#添加圖例
ax.legend(loc=9,ncol=3,edgecolor='grey',bbox_to_anchor=(0.5,1.1))

#設(shè)置y軸取值范圍
ylim=[400,600]
xlim=[0,0.4]
ax.set_ylim(ylim)
ax.set_xlim(xlim)

# x軸以百分比的形式呈現(xiàn)
def to_percent(temp, position):
    return '%.2f'%(10*temp) + '%'
plt.gca().xaxis.set_major_formatter(FuncFormatter(to_percent))

# 添加x和y軸名稱
ax.set_xlabel('校間差異',weight='bold',size=12)
ax.set_ylabel('語文成績',weight='bold',size=12,rotation='vertical')

# 加虛線
linecolor=RGB_to_Hex('79,129,189')
linestyle='--'
line_pos=[0.1,0.2,450,550]
for i in range(2):
    line = lines.Line2D([line_pos[i],line_pos[i]],ylim,lw=0.5, color=linecolor, axes=ax,linestyle=linestyle)
    ax.add_line(line)
for i in range(2,4):
    line = lines.Line2D(xlim,[line_pos[i],line_pos[i]],lw=0.5, color=linecolor, axes=ax,linestyle=linestyle)
    ax.add_line(line)

# 添加文本
ax.text(0,ylim[1]-10,'校間差異小,\n語文成績高',size=12,color=RGB_to_Hex('79,129,189'),fontweight='bold')
ax.text(0,ylim[0]+10,'校間差異小节芥,\n語文成績低',size=12,color='red',fontweight='bold')
ax.text(xlim[1]-0.04,ylim[0]+10,'校間差異大在刺,\n語文成績低',size=12,color='red',fontweight='bold')
ax.text(xlim[1]-0.04,ylim[1]-10,'校間差異大逆害,\n語文成績高',size=12,color='red',fontweight='bold')

plt.savefig("scatter.png",dpi=600,bbox_inches = 'tight')
plt.show()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蚣驼,隨后出現(xiàn)的幾起案子魄幕,更是在濱河造成了極大的恐慌,老刑警劉巖颖杏,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纯陨,死亡現(xiàn)場離奇詭異,居然都是意外死亡输玷,警方通過查閱死者的電腦和手機队丝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欲鹏,“玉大人机久,你說我怎么就攤上這事∨夂浚” “怎么了膘盖?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尤误。 經(jīng)常有香客問我侠畔,道長,這世上最難降的妖魔是什么损晤? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任软棺,我火速辦了婚禮,結(jié)果婚禮上尤勋,老公的妹妹穿的比我還像新娘喘落。我一直安慰自己,他們只是感情好最冰,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布瘦棋。 她就那樣靜靜地躺著,像睡著了一般暖哨。 火紅的嫁衣襯著肌膚如雪赌朋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天篇裁,我揣著相機與錄音沛慢,去河邊找鬼。 笑死达布,一個胖子當(dāng)著我的面吹牛团甲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播往枣,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼伐庭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了分冈?” 一聲冷哼從身側(cè)響起圾另,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕沉,沒想到半個月后集乔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡坡椒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年扰路,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔叼。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡汗唱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丈攒,到底是詐尸還是另有隱情哩罪,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布巡验,位于F島的核電站际插,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏显设。R本人自食惡果不足惜框弛,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捕捂。 院中可真熱鬧瑟枫,春花似錦、人聲如沸绞蹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幽七。三九已至景殷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澡屡,已是汗流浹背猿挚。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驶鹉,地道東北人绩蜻。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像室埋,于是被迫代替她去往敵國和親办绝。 傳聞我的和親對象是個殘疾皇子伊约,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348