matplotlib安装入门及基本图形绘制

    在 Python 中,将数据可视化有多种选择,matplotlib会很好上手。Matplotlib是一个Python 2维绘图库,已经成为python中公认的数据可视化工具,通过Matplotlib你可以很轻松地画一些或简单或复杂地图形,几行代码即可生成线图、直方图、功率谱、条形图、错误图、散点图等等。

对于一些简单的绘图,特别是与IPython结合使用时,pyplot模块提供了一个matlab接口。你可以通过面向对象的接口或通过一些MATLAB的函数来更改控制行样式、字体属性、轴属性等。

1.1安装:

1)linux系统

方法一:

sudo apt-get install python-dev

sudo apt-get install python-matplotlib

方法二:

pip install matplotlib

2)windows系统

先下载对应的安装包pyproj和matplotlib

打开Anaconda Prompt,输入安装包所在路径,然后分别输入

pip install pyproj 1.9.5.1 cp36 cp36m win_amd64.whl #输入下载的pyproj文件名

pip install matplotlib_tests‑2.1.0‑py2.py3‑none‑any.whl

3)mac os系统

方法一:

pip install matplotlib

方法二:

sudo curl -O https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

1.2快速入门

import numpy as np

import matplotlib.mlab as mlab

import matplotlib.pyplot as plt

#产生随机数

np.random.seed(19680801)

# 定义数据的分布特征

mu = 100 

sigma = 15 

x = mu + sigma * np.random.randn(437)

num_bins = 50

fig, ax = plt.subplots()

n, bins, patches = ax.hist(x, num_bins, normed=1)

# 添加图表元素

y = mlab.normpdf(bins, mu, sigma)

ax.plot(bins, y, '--')

ax.set_xlabel('Smarts')

ax.set_ylabel('Probability density')

ax.set_title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')

# 图片展示与保存

fig.tight_layout()

plt.savefig("Histogram.png")

plt.show()

1.3 matplotlib一些基本图形绘制

import matplotlib.pyplot as plt

import numpy as np

1、风格的设置

plt.style.available#查看所有风格

x = np.linspace(-10, 10)

y = np.sin(x)

plt.style.use('seaborn-notebook')

plt.plot(x, y)

plt.xkcd()

plt.plot(x, y)

2、条形图

np.random.seed(0)

x = np.arange(5)

y = np.random.randint(-5, 5, 5)

fig, axes = plt.subplots(ncols=2)

v_bars = axes[

0].bar(x, y, color='red')

h_bars = axes[1].barh(x, y)

axes[0].axhline(0, color='blue', linewidth=2)

axes[1].axvline(0, color='red', linewidth=2)

fig, ax = plt.subplots()

v_bars = ax.bar(x, y,color='lightblue')

for bar, height in zip(v_bars, y):

if height < 0:

        bar.set(edgecolor='darkred', color='lightgreen', linewidth=3)

x = np.random.randn(100)

x = x.cumsum()

y = np.linspace(0, 10, 100)

fig, ax = plt.subplots()

ax.fill_between(x, y,color='lightblue')

x = np.linspace(0, 10, 200)

y1 =2*x + 1

y2 = 3*x + 1.5

y_mean = 0.5*x*np.cos(2*x)+ 2.5 + 1

fig, ax = plt.subplots()

ax.fill_between(x, y1, y2,color='red')

ax.plot(x, y_mean,color='black')

mean_values = [1,2,3]

variance = [0.2, 0.4, 0.5]

bar_label = ['bar1', 'bar2', 'bar3']

x_pos =list(range(len(bar_label)))

plt.bar(x_pos, mean_values,

yerr=variance, alpha=0.3)#绘图x_pos为x轴,mean_values为y轴,alpha为透明度bar函数指定了条形图的x轴、y轴值,设置x轴刻度标签,条形图的色,同时设置透明度alpha;,plt.ylabel('variable y')#添加y轴标签

max_y =max(zip(mean_values, variance))

plt.ylim([0, (max_y[0] + max_y[1])*1.1])#设置Y轴刻度范围

plt.xticks(x_pos, bar_label)#添加x轴刻度标签

2、两组数据用条形图做对比

x1 = np.array([1,2,3])

x2 = np.array([2,2,3])

bar_labels = ['bar1', 'bar2', 'bar3']

# figsize参数:指定绘图对象的宽度width和高度height,单位为英寸;

# dpi

#参数指定绘图对象的分辨率;

#分辨率即每英寸是多少个像素,默认值为80

因此本代码中所创建的图表窗口的宽度为8*80=640像素fig = plt.figure(figsize=(8,6), dpi=80)

y_pos =list(np.arange(len(x1)))

plt.barh(y_pos, x1,color='g', alpha=0.5)

plt.barh(y_pos, -x2,color='b', alpha=0.5)

plt.xlim(max(x2)-1, max(x1)+1) 

3、三组数据用条形图做对比

green_data = [1,2,3]

blue_data = [3,2,1]

red_data = [2,3,3]

labels = ['group1', 'group2', 'group3']

pos =list(range(len(blue_data)))

width =0.2

fig, ax = plt.subplots(figsize=(8,6))

plt.bar(pos, green_data,width=width, alpha=0.5, color='g', label=labels[0])

plt.bar([p+widthfor p in pos], blue_data, width=width, alpha=0.5, color='b', label=labels[1])

plt.bar([p+2*width for p in pos], red_data, width=width, alpha=0.5, color='r', label=labels[2])

data = range(200, 225, 5)

bar_labels = ['a', 'b', 'c', 'd', 'e']

fig = plt.figure(figsize=(6,4))

y_pos = np.arange(len(data))

bars = plt.barh(y_pos, data,

alpha=0.5, color='g')

plt.yticks(y_pos, bar_labels,fontsize=16)

for b, d in zip(bars, data):

    plt.text(b.get_width() + b.get_width()*0.05, b.get_y() + b.get_height()/2, '%.2f' % (d/ min(data)))

3、条形图的颜色的选择

mean_values = range(10,18)

x_pos =range(len(mean_values))

import matplotlib.colors as col

import matplotlib.cm as cm

cmap1 = cm.ScalarMappable(col.Normalize(min(mean_values), max(mean_values), cm.hot))

cmap2 = cm.ScalarMappable(col.Normalize(0, 20, cm.BuGn))

plt.subplot(121)

plt.bar(x_pos, mean_values,

color=cmap1.to_rgba(mean_values))

plt.subplot(122)

plt.bar(x_pos, mean_values,color=cmap2.to_rgba(mean_values))

patterns = ('-', '+', 'x', '\\', '*', 'o', '0', '.')

fig = plt.gca()

mean_values =range(1, len(patterns) + 1)

x_pos =list(range(len(mean_values)))

bars = plt.bar(x_pos, mean_values)

for bar, pattern in zip(bars, patterns):

    bar.set_hatch(pattern)

4、饼图

1)格式

plt.pie(x, explode=None, labels=None, colors=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0,0), frame=False)

说明:

x: 指定绘图的数据

explode:指定饼图某些部分的突出显示,即呈现爆炸式

labels:为饼图添加标签说明,类似于图例说明

colors:指定饼图的填充色

autopct:设置百分比格式,如'%.1f%%'为保留一位小数

shadow:是否添加饼图的阴影效果

pctdistance:设置百分比标签与圆心的距离

labeldistance:设置各扇形标签(图例)与圆心的距离;

startangle:设置饼图的初始摆放角度, 180为水平;

radius:设置饼图的半径大小;

counterclock:是否让饼图按逆时针顺序呈现, True / False;

wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等, 如wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'}

textprops:设置饼图中文本的属性,如字体大小、颜色等;

center:指定饼图的中心点位置,默认为原点

frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

2)示例

male = 43948

female = 23244

m_perc = male/(male+female)

f_perc = female/(male+female)

labels = ['男', '女']

colors = ['navy', 'lightcoral']

plt.figure(figsize=(10,10))

paches, texts, autotexts = plt.pie([m_perc, f_perc],

labels=labels, colors=colors, explode=[0,0.05], autopct='%0.1f%%')

for text in autotexts:

    text.set_color('white')

for text in texts+autotexts:

    text.set_fontsize(20)

5、箱图

1)格式

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)

说明:

x:指定要绘制箱线图的数据;

notch:是否是凹口的形式展现箱线图,默认非凹口;

sym:指定异常点的形状,默认为+号显示;

vert:是否需要将箱线图垂直摆放,默认垂直摆放;

whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;

positions:指定箱线图的位置,默认为[0,1,2…];

widths:指定箱线图的宽度,默认为0.5;

patch_artist:是否填充箱体的颜色;

meanline:是否用线的形式表示均值,默认用点来表示;

showmeans:是否显示均值,默认不显示;

showcaps:是否显示箱线图顶端和末端的两条线,默认显示;

showbox:是否显示箱线图的箱体,默认显示;

showfliers:是否显示异常值,默认显示;

boxprops:设置箱体的属性,如边框色,填充色等;

labels:为箱线图添加标签,类似于图例的作用;

filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;

medianprops:设置中位数的属性,如线的类型、粗细等;

meanprops:设置均值的属性,如点的大小、颜色等;

capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;

whiskerprops:设置须的属性,如颜色、粗细、线的类型等;


6、解决中文乱码问题

sans-serif就是无衬线字体,是一种通用字体族。常见的无衬线字体有 Trebuchet MS, Tahoma, Verdana, Arial, Helvetica, 中文的幼圆、隶书等等。

import matplotlib as mpl

mpl.rcParams[

'font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容