python作图的实例

首先导入模块

import numpy as np

import matplotlib

import matplotlib.mlab as mlab

import matplotlib.pyplot as plt

import matplotlib.font_manager as fm

from mpl_toolkits.mplot3d import Axes3D

解决中文乱码问题


# 解决中文乱码问题

plt.rcParams['font.sans-serif']=[u'simHei']

plt.rcParams['axes.unicode_minus']=False

1、简单曲线图


def simple_plot():

    """

    simple plot

    """

    # 生成测试数据

    x = np.linspace(-np.pi, np.pi, 256, endpoint=True)

    y_cos, y_sin = np.cos(x), np.sin(x)

    # 生成画布,并设定标题

    plt.figure(figsize=(8, 6), dpi=80)

    plt.title("简单曲线图")

    plt.grid(True)

    # 设置X轴

    plt.xlabel("X轴")

    plt.xlim(-4.0, 4.0)

    plt.xticks(np.linspace(-4, 4, 9, endpoint=True))

    # 设置Y轴

    plt.ylabel("Y轴")

    plt.ylim(-1.0, 1.0)

    plt.yticks(np.linspace(-1, 1, 9, endpoint=True))

    # 画两条曲线

    plt.plot(x, y_cos, "b--", linewidth=2.0, label="cos示例")

    plt.plot(x, y_sin, "g-", linewidth=2.0, label="sin示例")

    # 设置图例位置,loc可以为[upper, lower, left, right, center]

    plt.legend(loc="upper left",shadow=True)

    # 图形显示

    plt.show()

    return

simple_plot()

2、复杂曲线图,双y轴

def simple_advanced_plot():

    """

    simple advanced plot

    """

    # 生成测试数据

    x = np.linspace(-np.pi, np.pi, 256, endpoint=True)

    y_cos, y_sin = np.cos(x), np.sin(x)

    # 生成画布, 并设定标题

    plt.figure(figsize=(8, 6), dpi=80)

    plt.title("复杂曲线图")

    plt.grid(True)

    # 画图的另外一种方式

    ax_1 = plt.subplot(111)

    ax_1.plot(x, y_cos, color="blue", linewidth=2.0, linestyle="--", label="左cos")

    ax_1.legend(loc="upper left", shadow=True)

    # 设置Y轴(左边)

    ax_1.set_ylabel("左cos的y轴")

    ax_1.set_ylim(-1.0, 1.0)

    ax_1.set_yticks(np.linspace(-1, 1, 9, endpoint=True))

    # 画图的另外一种方式

    ax_2 = ax_1.twinx()

    ax_2.plot(x, y_sin, color="green", linewidth=2.0, linestyle="-", label="右sin")

    ax_2.legend(loc="upper right", shadow=True)

    # 设置Y轴(右边)

    ax_2.set_ylabel("右sin的y轴")

    ax_2.set_ylim(-2.0, 2.0)

    ax_2.set_yticks(np.linspace(-2, 2, 9, endpoint=True))

    # 设置X轴(共同)

    ax_1.set_xlabel("x轴")

    ax_1.set_xlim(-4.0, 4.0)

    ax_1.set_xticks(np.linspace(-4, 4, 9, endpoint=True))

    # 图形显示

    plt.show()

    return

simple_advanced_plot()


3、子图显示

def subplot_plot():

    """

    subplot plot

    """

    # 子图的style列表

    style_list = ["g+-", "r*-", "b.-", "yo-"]

    # 依次画图

    for num in range(4):

        # 生成测试数据

        x = np.linspace(0.0, 2+num, num=10*(num+1))

        y = np.sin((5-num) * np.pi * x)

        # 子图的生成方式

        plt.subplot(2, 2, num+1)

        plt.title("子图 %d" % (num+1))

        plt.plot(x, y, style_list[num])

    # 图形显示

    plt.show()

    return

subplot_plot()


4、柱状图绘制

def bar_plot():

    """

    bar plot

    """

    # 生成测试数据

    means_men = (20, 35, 30, 35, 27)

    means_women = (25, 32, 34, 20, 25)

    # 设置标题

    plt.title("柱状图")

    # 设置相关参数

    index = np.arange(len(means_men))

    bar_width = 0.35

    # 画柱状图

    plt.bar(index, means_men, width=bar_width, alpha=0.2, color="b", label="男生")

    plt.bar(index+bar_width, means_women, width=bar_width, alpha=0.8, color="r", label="女生")

    plt.legend(loc="upper right", shadow=True)

    # 设置柱状图标示

    for x, y in zip(index, means_men):

        plt.text(x, y+0.3, y, ha="center", va="bottom")

    for x, y in zip(index, means_women):

        plt.text(x+bar_width, y+0.3, y, ha="center", va="bottom")

    # 设置刻度范围/坐标轴名称等

    plt.ylim(0, 45)

    plt.xlabel("分组Group")

    plt.ylabel("得分Scores")

    plt.xticks(index+(bar_width/2), ("A组", "B组", "C组", "D组", "E组"))

    # 图形显示

    plt.show()

    return

bar_plot()


5、水平柱状图

def barh_plot():

    """

    barh plot

    """

    # 生成测试数据

    means_men = (20, 35, 30, 35, 27)

    means_women = (25, 32, 34, 20, 25)

    # 设置标题

    plt.title("横向柱状图")

    # 设置相关参数

    index = np.arange(len(means_men))

    bar_height = 0.35

    # 画柱状图(水平方向)

    plt.barh(index, means_men, height=bar_height, alpha=0.2, color="b", label="Men")

    plt.barh(index+bar_height, means_women, height=bar_height, alpha=0.8, color="r", label="Women")

    plt.legend(loc="upper right", shadow=True)

    # 设置柱状图标示

    for x, y in zip(index, means_men):

        plt.text(y+0.3, x, y, ha="left", va="center")

    for x, y in zip(index, means_women):

        plt.text(y+0.3, x+bar_height, y, ha="left", va="center")

    # 设置刻度范围/坐标轴名称等

    plt.xlim(0, 45)

    plt.xlabel("Scores")

    plt.ylabel("Group")

    plt.yticks(index+(bar_height/2), ("A", "B", "C", "D", "E"))

    # 图形显示

    plt.show()

    return

barh_plot()


6、高级柱状图

def bar_advanced_plot():

    """

    bar advanced plot

    """

    # 生成测试数据

    means_men = np.array((20, 35, 30, 35, 27, 25, 32, 34, 20, 25))

    means_women = np.array((25, 32, 34, 20, 25, 20, 35, 30, 35, 27))

    # 设置标题

    plt.title("高级柱状图")

    # 设置相关参数

    index = np.arange(len(means_men))

    bar_width = 0.8

    # 画柱状图(两种:X轴以上/X轴以下)

    plt.bar(index, means_men, width=bar_width, alpha=0.4, color="b", label="Men")

    plt.bar(index, -means_women, width=bar_width, alpha=0.4, color="r", label="Women")

    # 画折线图(两种,和柱状图对应)

    plt.plot(index, means_men, marker="o", linestyle="-", color="r", label="Men line")

    plt.plot(index, -means_women, marker=".", linestyle="--", color="b", label="Women line")

    # 设置图形标示(两种,和柱状图对应)

    for x, y in zip(index, means_men):

        plt.text(x, y+1, y, ha="center", va="bottom")

    for x, y in zip(index, means_women):

        plt.text(x, -y-1, y, ha="center", va="top")

    # 设置Y轴和图例位置

    plt.ylim(-45, 80)

    plt.legend(loc="upper left", shadow=True)

    # 图形显示

    plt.show()

    return

bar_advanced_plot()


7、类表格图形

def table_plot():

    """

    table plot

    """

    # 生成测试数据

    data = np.array([

        [1, 4, 2, 5, 2],

        [2, 1, 1, 3, 6],

        [5, 3, 6, 4, 1]

    ])

    # 设置标题

    plt.title("层次柱状图")

    # 设置相关参数

    index = np.arange(len(data[0]))

    color_index = ["r", "g", "b"]

    # 声明底部位置

    bottom = np.array([0, 0, 0, 0, 0])

    # 依次画图,并更新底部位置

    for i in range(len(data)):

        plt.bar(index, data[i], width=0.5, color=color_index[i], bottom=bottom, alpha=0.7, label="标签 %d" % i)

        bottom += data[i]

    # 设置图例位置

    plt.legend(loc="upper left", shadow=True)

    # 图形显示

    plt.show()

    return

table_plot()


8、直方图

def histograms_plot():

    """

    histograms plot

    """

    # 生成测试数据

    mu, sigma = 100, 15

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

    # 设置标题

    plt.title("直方图")

    # 画直方图, 并返回相关结果

    n, bins, patches = plt.hist(x, bins=50, density=1, cumulative=False, color="green", alpha=0.6, label="直方图")

    # 根据直方图返回的结果, 画折线图

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

    plt.plot(bins, y, "r--", label="线条")

    # 设置图例位置

    plt.legend(loc="upper left", shadow=True)

    # 图形显示

    plt.show()

    return

histograms_plot()


9、饼状图

def pie_plot():

    """

    pie plot

    """

    # 生成测试数据

    sizes = [15, 30, 45, 10]

    labels = ["Frogs", "中文", "Dogs", "Logs"]

    colors = ["yellowgreen", "gold", "lightskyblue", "lightcoral"]

    # 设置标题

    plt.title("饼图")

    # 设置突出参数

    explode = [0, 0.05, 0, 0]

    # 画饼状图

    patches, l_text, p_text = plt.pie(sizes, explode=explode, labels=labels, colors=colors,

                                      autopct="%1.1f%%", shadow=True, startangle=90)

    plt.axis("equal")

    # 图形显示

    plt.show()

    return

pie_plot()


10、散点图

def scatter_plot():

    """

    scatter plot

    """

    # 生成测试数据

    point_count = 1000

    x_index = np.random.random(point_count)

    y_index = np.random.random(point_count)

    # 设置标题

    plt.title("散点图")

    # 设置相关参数

    color_list = np.random.random(point_count)

    scale_list = np.random.random(point_count) * 100

    # 画散点图

    plt.scatter(x_index, y_index, s=scale_list, c=color_list, marker="o")

    # 图形显示

    plt.show()

    return

scatter_plot()


11、雷达图

def radar_plot():

    """

    radar plot

    """

    # 生成测试数据

    labels = np.array(["A组", "B组", "C组", "D组", "E组", "F组"])

    data = np.array([68, 83, 90, 77, 89, 73])

    theta = np.linspace(0, 2*np.pi, len(data), endpoint=False)

    # 数据预处理

    data = np.concatenate((data, [data[0]]))

    theta = np.concatenate((theta, [theta[0]]))

    # 画图方式

    plt.subplot(111, polar=True)

    plt.title("雷达图")

    # 设置"theta grid"/"radar grid"

    plt.thetagrids(theta*(180/np.pi), labels=labels)

    plt.rgrids(np.arange(20, 100, 20), labels=np.arange(20, 100, 20), angle=0)

    plt.ylim(0, 100)

    # 画雷达图,并填充雷达图内部区域

    plt.plot(theta, data, "bo-", linewidth=2)

    plt.fill(theta, data, color="red", alpha=0.25)

    # 图形显示

    plt.show()

    return

radar_plot()


12、三维散点图

def three_dimension_scatter():

    """

    3d scatter plot

    """

    # 生成测试数据

    x = np.random.random(100)

    y = np.random.random(100)

    z = np.random.random(100)

    color = np.random.random(100)

    scale = np.random.random(100) * 100

    # 生成画布(两种形式)

    fig = plt.figure()

    fig.suptitle("三维散点图")

    # ax = fig.gca(projection="3d")

    ax = fig.add_subplot(111, projection="3d")

    # 画三维散点图

    ax.scatter(x, y, z, s=scale, c=color, marker=".")

    # 设置坐标轴图标

    ax.set_xlabel("X Label")

    ax.set_ylabel("Y Label")


    ax.set_zlabel("Z Label")

    # 设置坐标轴范围

    ax.set_xlim(0, 1)

    ax.set_ylim(0, 1)

    ax.set_zlim(0, 1)

    # 图形显示

    plt.show()

    return

three_dimension_scatter()


13、三维折线图

def three_dimension_line():

    """

    3d line plot

    """

    # 生成测试数据

    x = np.linspace(0, 1, 1000)

    y = np.linspace(0, 1, 1000)

    z = np.sin(x * 2 * np.pi) / (y + 0.1)

    # 生成画布(两种形式)

    fig = plt.figure()

    ax = fig.gca(projection="3d", title="三维折线图")

    # ax = fig.add_subplot(111, projection="3d", title="plot title")

    # 画三维折线图

    ax.plot(x, y, z, color="red", linestyle="-")

    # 设置坐标轴图标

    ax.set_xlabel("X Label")

    ax.set_ylabel("Y Label")

    ax.set_zlabel("Z Label")

    # 图形显示

    plt.show()

    return

three_dimension_line()

14、三维柱状图

def three_dimension_bar():

    """

    3d bar plot

    """

    # 生成测试数据(位置数据)

    xpos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    ypos = [2, 3, 4, 5, 1, 6, 2, 1, 7, 2]

    zpos = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    # 生成测试数据(柱形参数)

    dx = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    dy = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

    dz = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    # 生成画布(两种形式)

    fig = plt.figure()

    ax = fig.gca(projection="3d", title="三维柱状图")

    # 画三维柱状图

    ax.bar3d(xpos, ypos, zpos, dx, dy, dz, alpha=0.5)

    # 设置坐标轴图标

    ax.set_xlabel("X Label")

    ax.set_ylabel("Y Label")

    ax.set_zlabel("Z Label")

    # 图形显示

    plt.show()

    return

three_dimension_bar()

15、图形填充

def fill_plot():

    """

    fill plot

    """

    # 生成测试数据

    x = np.linspace(-2*np.pi, 2*np.pi, 1000, endpoint=True)

    y = np.sin(x)

    # 设置标题

    plt.title("填充图")

    # 画图

    plt.plot(x, y, color="blue", alpha=1.00)

    # 填充图形, plt.fill_between(x, y1, y2, where=None, *kwargs)

    plt.fill_between(x, 0, y, where=(y > 0), color="blue", alpha=0.25)

    plt.fill_between(x, 0, y, where=(y < 0), color="red", alpha=0.25)

    # 图形显示

    plt.show()

    return

fill_plot()

参考链接:https://zhuanlan.zhihu.com/p/22952801

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