matplotlib画图

参考文档:Matplotlib tutorial

如何在论文中画出漂亮的插图?

matplotlib画饼状图

1. 图中加标注

matplotlib画图_第1张图片

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-1,1,10)
y=x**2  
fig=plt.figure(figsize=(8,4))
ax=plt.subplot(111)
plt.plot(x,y)
for i,(_x,_y) in enumerate(zip(x,y)):
    plt.text(_x,_y,i,color='red',fontsize=i+10)
plt.text(0.5,0.8,'subplot words',color='blue',ha='center',transform=ax.trans    Axes)
plt.figtext(0.1,0.92,'figure words',color='green')
plt.annotate('buttom',xy=(0,0),xytext=(0.2,0.2),arrowprops=dict(facecolor='blue', shrink=0.05))
plt.show()

2. 柱状图

matplotlib画图_第2张图片        matplotlib画图_第3张图片

import  matplotlib.pyplot as plt
import numpy as np
dict = {'A': 40, 'B': 70, 'C': 30, 'D': 85}
for i, key in enumerate(dict):#Circulate both index and value(Here is key)
    plt.bar(i, dict[key], color='r', width=0.2)
plt.xticks(np.arange(len(dict))+0.1, dict.keys())#Translation
plt.yticks(dict.values())
plt.grid(True)
plt.show()


3. colormap图

matplotlib画图_第4张图片

# -*- coding: utf-8 -*-
#**********************************************************
import os
import numpy as np
import wlab #pip install wlab
import matplotlib
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from scipy.interpolate import griddata
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
#**********************************************************
FreqPLUS=['F06925','F10650','F23800','F18700','F36500','F89000']
#
FindPath='/d3/MWRT/R20130805/'
#**********************************************************
fig = plt.figure(figsize=(8,6), dpi=72, facecolor="white")
axes = plt.subplot(111)
axes.cla()#清空坐标轴内的所有内容
#指定图形的字体
font = {'family' : 'serif',
        'color'  : 'darkred',
        'weight' : 'normal',
        'size'   : 16,
        }
#**********************************************************
# 查找目录总文件名中保护F06925,EMS和txt字符的文件
for fp in FreqPLUS:
    FlagStr=[fp,'EMS','txt']
    FileList=wlab.GetFileList(FindPath,FlagStr)
    #
    LST=[]#地表温度
    EMS=[]#地表发射率
    TBH=[]#水平极化亮温
    TBV=[]#垂直极化亮温
    #
    findex=0
    for fn in FileList:
        findex=findex+1
        if (os.path.isfile(fn)):
            print(str(findex)+'-->'+fn)
            #fn='/d3/MWRT/R20130805/F06925_EMS60.txt'
            data=wlab.dlmread(fn)
            EMS=EMS+list(data[:,1])#地表发射率
            LST=LST+list(data[:,2])#温度
            TBH=TBH+list(data[:,8])#水平亮温
            TBV=TBV+list(data[:,9])#垂直亮温
    #-----------------------------------------------------------
    #生成格点数据,利用griddata插值
    grid_x, grid_y = np.mgrid[275:315:1, 0.60:0.95:0.01]
    grid_z = griddata((LST,EMS), TBH, (grid_x, grid_y), method='cubic')
    #将横纵坐标都映射到(0,1)的范围内
    extent=(0,1,0,1)
     #指定colormap
    cmap = matplotlib.cm.jet
    #设定每个图的colormap和colorbar所表示范围是一样的,即归一化
    norm = matplotlib.colors.Normalize(vmin=160, vmax=300)
    #显示图形,此处没有使用contourf #>>>ctf=plt.contourf(grid_x,grid_y,grid_z)
    gci=plt.imshow(grid_z.T, extent=extent, origin='lower',cmap=cmap, norm=norm)
    #配置一下坐标刻度等
    ax=plt.gca()
    ax.set_xticks(np.linspace(0,1,9))
    ax.set_xticklabels( ('275', '280', '285', '290', '295',  '300',  '305',  '310', '315'))
    ax.set_yticks(np.linspace(0,1,8))
    ax.set_yticklabels( ('0.60', '0.65', '0.70', '0.75', '0.80','0.85','0.90','0.95'))
    #显示colorbar
    cbar = plt.colorbar(gci)
    cbar.set_label('$T_B(K)$',fontdict=font)
    cbar.set_ticks(np.linspace(160,300,8))
    cbar.set_ticklabels( ('160', '180', '200', '220', '240',  '260',  '280',  '300'))
    #设置label
    ax.set_ylabel('Land Surface Emissivity',fontdict=font)
    ax.set_xlabel('Land Surface Temperature(K)',fontdict=font) #陆地地表温度LST
    #设置title
    titleStr='$T_B$ for Freq = '+str(float(fp[1:-1])*0.01)+'GHz'
    plt.title(titleStr)
    figname=fp+'.png'
    plt.savefig(figname)
    plt.clf()#清除图形

#plt.show()
print('ALL -> Finished OK')


4. 饼状图


数据:

USA        15094025
China      11299967
India       4457784
Japan       4440376
Germany     3099080
Russia      2383402
Brazil      2293954
UK          2260803
France      2217900
Italy       1846950

# Make a pie chart
# This script is written by Vamei, http://www.cnblogs.com/vamei
# you may freely use it.

import matplotlib.pyplot as plt
# quants: GDP
# labels: country name
labels   = []
quants   = []
# Read data
for line in file('../data/major_country_gdp'):
    info = line.split()
    labels.append(info[0])
    quants.append(float(info[1]))

# make a square figure
plt.figure(1, figsize=(6,6))

# For China, make the piece explode a bit
def explode(label, target='China'):
    if label == target: return 0.1
    else: return 0
expl = map(explode,labels)
# Colors used. Recycle if not enough.
colors  = ["pink","coral","yellow","orange"]
# Pie Plot
# autopct: format of "percent" string;
plt.pie(quants, explode=expl, colors=colors, labels=labels, autopct='%1.1f%%',pctdistance=0.8, shadow=True)
plt.title('Top 10 GDP Countries', bbox={'facecolor':'0.8', 'pad':5})

plt.show()



你可能感兴趣的:(matplotlib画图)