matplotlib和plotly绘图
参考书籍《Python编程 从入门到实践》
折线图
15-1 立方:数字的三次方被称为其立方。请绘制一个图形,显示前5 个整数的立方
值,再绘制一个图形,显示前5000 个整数的立方值。
15-2 彩色立方:给你前面绘制的立方图指定颜色映射。
import matplotlib.pyplot as plt
#设置字体为中文
plt.rcParams['font.sans-serif'] = 'SimHei'
#使用subplots()函数,变量fig表示整张图片,变量ax,sec_ax表示图片中的图表
#subplot()函数的参数分别为图片中图表的行数与列数,没有实参默认为 1,1
fig,(ax,sec_ax) = plt.subplots(1,2)
#对于第一个图
x_values = range(1,6)
y_values = [x**3 for x in x_values]
#使用plot()方法,其中参数linewidth为折线的宽度
ax.plot(x_values,y_values,linewidth = 2)
#修改图表与每条轴标题,参数fontsize为标题字号
ax.set_title("立方",fontsize = 15)
ax.set_xlabel("值",fontsize = 10)
ax.set_ylabel("值的立方",fontsize = 10)
#设置刻度
ax.tick_params(labelsize = 14)
#对于第二个图
x = range(1,5001)
y = [x**3 for x in x]
#使用scatter()方法绘制散点图
#设置颜色映射
sec_ax.scatter(x,y,c=y,cmap = plt.cm.Blues,s=2)
plt.show()
补充:
内置样式:matplotlib提供了很多内置样式,可在终端通过命令plt.style.available查看
若要使用这些样式,可在生成图表的代码前加入以下代码行
plt.style.use("seaborn")
若想让程序自动把图表保存在文件中,可将plt.show()替换为plt.savefig()
plt.savefig('squares_plot.png',bbox_inches = 'tight')
第一个实参指定保存的图表文件名,默认保存至程序所在目录,第二个实参‘tight’指定将图表多余的空白部分裁剪掉。
随机漫步
#random_walk.py
from random import choice
class RandomWalk:
"""一个生成随机漫步数据的类"""
def __init__(self, num_points = 500):
"""初始化随机漫步的属性"""
self.num_points = num_points
#所有随机漫步都始于(0,0)
self.x_values = [0]
self.y_values = [0]
def fill_walk(self):
"""计算随机漫步包含的所有点"""
#不断漫步,直到列表达到指定长度
while len(self.x_values) < self.num_points:
#决定前进方向以及沿这个方向移动的距离
x_direction = choice([-1,1])
x_distance = choice([0,1,2,3,4])
x_step = x_distance * x_direction
y_direction = choice([-1,1])
y_distance = choice([0,1,2,3,4])
y_step = y_distance * y_direction
#拒绝原地踏步
if x_step == 0 and y_step == 0:
continue
x = self.x_values[-1] + x_step
y = self.y_values[-1] + y_step
self.x_values.append(x)
self.y_values.append(y)
#rw_visual.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk
while True:
rw = RandomWalk(5000)
rw.fill_walk()
# figsize参数设置生成图形的大小,dpi参数设置分辨率
fig, ax = plt.subplots(figsize=(15, 9), dpi=128)
point_numbers = range(rw.num_points)
ax.scatter(rw.x_values,rw.y_values,c = point_numbers,cmap = plt.cm.Blues,s = 10)
#隐藏坐标轴
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
#生成一个图片后,让用户选择是否继续生成
keep_running = input("Make another walk?y/n")
if keep_running == 'n':
break
条形图
#die.py
from random import randint
class Die:
"""表示一个骰子的类"""
def __init__(self,num_size = 6):
self.num_size = num_size
def roll(self):
"""返回一个随机值"""
return randint(1,self.num_size)
#dice_visual.py
from die import Die
from plotly.graph_objs import Bar,Layout
from plotly import offline
die_1 = Die()
die_2 = Die(10)
results = []
for roll_num in range(50000):
result = die_1.roll() + die_2.roll()
results.append(result)
max_result = die_1.num_size + die_2.num_size
#分析结果
frequencies = []
for value in range(2,max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
x_values =list(range(2,max_result+1))
#Bar()类表示用于绘制条形图的数据集,需要一个存储x值的列表和一个存储y值的列表
data = [Bar(x = x_values,y = frequencies)]
#设置坐标轴配置字典,参数dtick指定x轴显示的刻度间距
x_axis_config = {'title':'结果','dtick':1}
y_axis_config = {"title":"结果的次数"}
#类Layout()返回一个指定图表布局和配置的对象
#这里设置图表名称并传入了x轴和y轴的配置字典
my_layout = Layout(title = "掷一个D6和一个D10 50000次的结果",xaxis = x_axis_config,yaxis = y_axis_config)
#调用函数offline.plot(),该函数需要一个包含数据和布局对象的字典,
#还接受一个文件名,指定将图表保存到哪里
offline.plot({"data":data,"layout":my_layout},filename='d6_d10.html')
标签:plt,python,die,self,matplotlib,num,values,plotly,ax
From: https://www.cnblogs.com/zhiyue-bit/p/17305266.html