美文网首页python 画图python可视化分析
matplotlib安装入门及基本图形绘制

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

作者: 冷多多 | 来源:发表于2018-12-31 22:59 被阅读0次

        在 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 #用来正常显示负号

    相关文章

      网友评论

        本文标题:matplotlib安装入门及基本图形绘制

        本文链接:https://www.haomeiwen.com/subject/uakglqtx.html