79 Matplotlib和数据可视化

绘制折线图

import matplotlib.pyplot as plt


def main():
    # 保存x轴数据的列表
    x_values = [x for x in range(1, 11)]
    # 保存y轴数据的列表
    y_values = [x ** 2 for x in range(1, 11)]
    # 设置图表的标题以及x和y轴的说明
    plt.title("Square Numbers")
    plt.xlabel("Value", fontsize=16)
    plt.ylabel("Square", fontsize=16)
    # 设置刻度标记的文字大小
    plt.tick_params(axis="both", labelsize=12)
    # 绘制折线图
    plt.plot(x_values, y_values)
    plt.show()


if __name__ == '__main__':
    main()

绘制散点图

可以将上面代码中的的plot函数换成scatter函数来绘制散点图,效果如下图所示。

import matplotlib.pyplot as plt


def main():
    # 保存x轴数据的列表
    x_values = [x for x in range(1, 11)]
    # 保存y轴数据的列表
    y_values = [x ** 2 for x in range(1, 11)]
    # 设置图表的标题以及x和y轴的说明
    plt.title("Square Numbers")
    plt.xlabel("Value", fontsize=16)
    plt.ylabel("Square", fontsize=16)
    # 设置刻度标记的文字大小
    plt.tick_params(axis="both", labelsize=12)
    # 绘制折线图
    plt.scatter(x_values, y_values)
    plt.show()


if __name__ == '__main__':
    main()

当然,也可以直接通过plot函数设置绘图的颜色和线条的形状将折线图改造为散点图,对应的代码如下所示,其中参数'xr'表示每个点的记号是‘x’图形,颜色是红色(red)。

plt.plot(x_values, y_values, "xr")

1和10对应的‘x’记号在图形边角的位置不太明显,要解决这个问题可以通过添加下面的代码调整x轴和y轴的坐标范围。

plt.axis([0, 12, 0, 120])

使用Pygal绘制矢量图

矢量图(SVG)是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示的图像,也是目前应用得非常多的一种图像文件格式,全称是“Scalable Vector Graphics”。和使用像素表示图像的位图不同,SVG基于XML存储图像数据,它是W3C定义的一种开放标准的矢量图形语言,可以用来设计更为清晰的Web图像,因为SVG与分辨率无关,在任意放大时不会丢失细节或影响清晰度。SVG可以直接用代码来描绘图像,也可以用任何文字处理工具来打开它,通过改变SVG的代码我们可以让图像具备交互功能。

Python中可以使用Pygal来生成SVG,可以通过pip来安装它。

from random import randint
import pygal


def roll_dice(n=1):
    total = 0
    for _ in range(n):
        total += randint(1, 6)
    return total


def main():
    results = []
    # 将两颗筛子摇10000次记录点数
    for _ in range(10000):
        face = roll_dice(2)
        results.append(face)
    freqs = []
    # 统计2~12点各出现了多少次
    for value in range(2, 13):
        freq = results.count(value)
        freqs.append(freq)
    # 绘制柱状图
    hist = pygal.Bar()
    hist.title = "Result of rolling two dice"
    hist.x_labels = [x for x in range(2, 13)]
    hist.add("Frequency", freqs)

    # 保存矢量图
    hist.render_to_file("result.svg")


if __name__ == '__main__':
    main()

 

posted @ 2020-09-07 16:15  Laney_Sun  阅读(181)  评论(0编辑  收藏  举报