matplotlib绘图

matplotlib 介绍

Matplotlib是一个Python 2D绘图库,可以生成各种硬拷贝格式和跨平台交互式环境的出版物质量数据。Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

Matplotlib试图让简单易事的事情成为可能。你只需几行代码即可生成绘图,直方图,功率谱,条形图,误差图,散点图等。

对于简单的绘图,pyplot模块提供类似MATLAB的接口,特别是与IPython结合使用时。 对于高级用户,你可以通过面向对象的界面或通过MATLAB用户熟悉的一组函数完全控制线型,字体属性,轴属性等。

文档:https://www.matplotlib.org.cn/index.html

安装:

访问https://pypi.org/project/matplotlib/#files下载和python安装的对应版本

打开命令窗口,并切换到该项目文件夹,在使用pip来安装

python -m pip install --user matplotlib-3.1.1-cp37-cp37m-win32.whl

安装完成后打开python终端回话,尝试导入matplotlib

import matplotlib

这样则安装成功

下面部分是绘制图形

使用plot()绘制折线图:

import matplotlib.pyplot as plt

#创建一个列表
#对应数据,inp——values为x轴刻度尺,squares为y轴数据
input_values = [1, 2, 3, 4, 5]
squares = [1, 3, 5, 6, 20]
#将列表传递给函数plot,绘制图像,linewidth线条的粗细
plt.plot(input_values, squares, linewidth = 2)
#设置图表标题,并给坐标轴加上标签
plt.title("Square Numbers", fontsize = 24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

#设置刻度标记的大小axis='both'影响x轴y轴上的刻度,labelsize设置字号
plt.tick_params(axis='both', labelsize = 14)

#打开matplotlib查看器
plt.show()

效果图片:

使用scatter()来绘制单个点

import matplotlib.pyplot as plt

#使用scatter()来绘制单个点,前两个参数为坐标位置,s设置绘制图形时使用的点的尺寸
#设置坐标位置,两个列表
#x_values = [1, 2, 3, 4, 5]
#y_values = [1, 4, 9, 16, 25]

#循环绘制点,连接成线
x_values = list(range(1, 1001))
y_values = [x**2 for x in x_values]

#edgecolor删除节点轮廓,c='red'设置图颜色
#plt.scatter(x_values, y_values, c='red', edgecolor='none', s = 10)
#颜色映射,起始颜色渐变到结束颜色,c设置成一个y值列表,cmap告诉pyplot使用哪个颜色映射
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolor='none', s = 10)
#设置图表标题并给坐标轴加上标签
plt.title("Square Numbers", fontsize=24)
plt.xlabel("value", fontsize = 24)
plt.ylabel("Square of value", fontsize=24)

#设置刻度标记的大小
plt.tick_params(axis='both', which='major', labelsize=14)

#设置每个坐标轴的取值范围
plt.axis([0, 1100, 0, 1100000])
plt.show()
#将图片保存到工作目录
#plt.savefig('squares_plot.png', bbox_inches = 'tight')

效果图:

绘制随机漫步图:

先创建一个RandwmWalk()类,他随机的选择前进方向

from random import choice

class RandomWalk():
	"""一个生成随机漫步数据的类"""
	#num_points设置默认点数
	def __init__(self, num_points = 5000):
		"""初始化随机漫步的属性"""
		self.num_points = num_points
		
		#所有随机漫步都始于(0, 0)
		#创建了两个用于存储x和y值的列表,并让每次漫步都从点(0, 0)出发
		self.x_values = [0]
		self.y_values = [0]
	
	def fill_walk(self):
		"""计算随机漫步包含的所有点"""
		#不断漫步,直到列表到达指定的长度
		while len(self.x_values) < self.num_points:
			#决定前进方向以及沿这个方向前进的距离
			#1表示向右走的1,-1表示向左走的-1
			x_direction = choice([1, -1])
			#沿指定方向走多远,choice随机选择一个数字
			x_distance = choice([0, 1, 2, 3, 4])
			#移动方向乘以移动距离,确定沿x和y轴移动的距离,如果x_self为正将向右移动,为负向左移动
			x_step = x_direction * x_distance
			
			y_direction = choice([1, -1])
			y_distance = choice([0, 1, 2, 3, 4])
			y_step = y_direction * y_distance
			
			#拒绝原地踏步
			if x_step == 0 and y_step == 0:
				continue
				
			#计算下一个点的x和y值
			next_x = self.x_values[-1] + x_step
			next_y = self.y_values[-1] + y_step
			
			self.x_values.append(next_x)
			self.y_values.append(next_y)

生成简单的漫步图:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

#创建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
plt.scatter(rw.x_values, rw.y_values, s = 5)
plt.show()

生成效果:

给点设置渐变色:

#将所有点数生成一个数字列表
point_number = list(range(rw.num_points))
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
#edgecolor='none'删除每个点周围的轮廓,给点着色
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, edgecolor='none', s = 5)

突出终点和起点:

#突出起点和终点
plt.scatter(0, 0, c = 'green', edgecolors = 'none', s = 100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c = 'red', edgecolors = 'none', s = 100)

英寸坐标轴:

#隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)

调整图表大小:

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

完整代码:

import matplotlib.pyplot as plt

from random_walk import RandomWalk

#创建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()

#设置绘图窗口的尺寸,figure()用于指定图表的宽度和高度,分辨率和背景色,指出绘图窗口的尺寸,单位英寸
plt.figure(figsize=(10, 6))

#将所有点数生成一个数字列表
point_number = list(range(rw.num_points))
#将随机漫步包含的x和y值传递给scatter(),并选择了合适的点尺寸
#edgecolor='none'删除每个点周围的轮廓,给点着色
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, edgecolor='none', s = 5)

#突出起点和终点
plt.scatter(0, 0, c = 'green', edgecolors = 'none', s = 100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c = 'red', edgecolors = 'none', s = 100)

#隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.show()

效果图:

直方图——掷骰子案例首先需要安装一下pygal

同样的需要在项目目录中使用pip安装,这里我的项目目录为:E:\2019mcy\pythonWord\matplotlib

python -m pip install --user pygal==1.7

之后创建一个die.py文件,里边存放一个Die()类,骰子的属性类

from random import randint

class Die():
	"""表示一个骰子的类"""
	def __init__(self, num_sides=6):
		"""骰子默认为6面"""
		self.num_sides = num_sides
	
	def roll(self):
		"""返回一个位于1和骰子面数之间的随机值"""
		return randint(1, self.num_sides)

之后模拟掷骰子,分析和结果,统计没一面出现的次数,结果使用直方图进行统计出来

from die import Die
import pygal

#创建一个D6
die = Die()

#掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(100):
	result = die.roll()
	results.append(result)

#分析结果
frequencies = []
for value in range(1, die.num_sides+1):
	#计算每种点数在results中出现了多少次
	frequency = results.count(value)
	frequencies.append(frequency)

#对结果进行可视化
hist = pygal.Bar()

#嘴上方标题
hist.title = "Results of rolling one D6 100 times."
#x轴标签,和x,y轴标题
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

#将一系列值添加到图表中
hist.add('D6', frequencies)
#生成svg文件存放在和文件同一目录,可以在浏览器中打开查看
hist.render_to_file('die_visual.svg')

效果图:

同时掷两个面数不同的骰子:

只需是多创建一个Die实例,把骰子面数传递过去,掷骰子是,把两个骰子的面数相加放入列表中,分析结果会有两个骰子面数相加种结果

x轴坐标需要改变一下,具体代码如下:

from die import Die
import pygal

#创建一个D6
die = Die()
die2 = Die(10)

#掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(100):
	result = die.roll()+die2.roll()
	results.append(result)

#分析结果
frequencies = []
max_result = die.num_sides+die2.num_sides
for value in range(2, max_result+1):
	#计算每种点数在results中出现了多少次
	frequency = results.count(value)
	frequencies.append(frequency)

#对结果进行可视化
hist = pygal.Bar()

#嘴上方标题
hist.title = "Results of rolling a D6 and a D10 100 times."
#x轴标签,和x,y轴标题
hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

#将一系列值添加到图表中
hist.add('D6+D10', frequencies)
#生成svg文件存放在和文件同一目录,可以在浏览器中打开查看
hist.render_to_file('die_visual.svg')

效果图:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值