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()