Python学习笔记:生成数据

# -*- coding: utf-8 -*-
"""
Created on Wed Mar 11 21:05:45 2020

@author: 86159
"""
# use #%% to create cells;Run current cell(ctrl+enter)
# matplotlib
#%%
#matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
#若不带key=,则按默认顺序给属性赋值,若为键-值对,则按实参的顺序
#x,y--横纵坐标的值,可为列表、数字
#s--数字或列表,默认值为20,代表图形的大小
#c--色彩('red')或颜色列表['red','green','blue']或rgb元组c=(0.6,0.5,0.8),默认颜色为蓝色
#marker--标记样式,默认为'o' 圆圈;有多种
#cmap--颜色映射,告诉pyplot使用哪个颜色映射,默认None,如cmap=matplotlib.pyplot.cm.Blues  cmap=matplotlib.pyplot.cm.Reds
#edgecolor--图形是否带有轮廓,值可赋值为颜色,如'red',默认None
#alpha--透明度,值在0-1之间
#matplotlib.pyplot.axes([x, y, w, h])用来设定图形区
#matplotlib.pyplot.axis([x_left, x_right, y_bottom, y_top])是用来设置所绘制图形的视窗大小的,表示直接展示的图形是需要满足参数中范围的值,直观表现是绘图区实际展示的坐标范围。
#%%
import numpy as np
import matplotlib.pyplot as plt

#np.random.seed(10)

N = 50

x = np.random.rand(N)
y = np.random.rand(N)

colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2 

plt.scatter(x, y, s=area, c=colors, alpha=0.5)

plt.show()
#%%
#测试matplotlib是否已成功安装
import numpy as np  
import matplotlib.pyplot as pt  
x = np.arange(0 , 360)  
y = np.sin( x * np.pi / 180.0)  
pt.plot(x,y)  
pt.xlim(0,360)  
pt.ylim(-1.2,1.2)  
pt.title("SIN function")  
pt.show()
#%%
#绘制简单的折线图
import matplotlib.pyplot as plt

squares=[1,4,9,16,25]
plt.plot(squares)
plt.show()
#%%
#修改标签文字和线条粗细
import matplotlib.pyplot as plt

squares=[1,4,9,16,25]
plt.plot(squares,linewidth=5)#数据,线条宽度

#设置图表标题,并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)#图表标题,fontsize指定图表中文字的大小
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of value",fontsize=14)

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

plt.show()
#%%
#校正图形
#向plot()提供一系列数字时,它假设第一个数据点对应的x坐标值为0,但上面给的数据里第一个点对应的x值为1
#为改变这种默认行为,可以给plot()同时提供输入值和输出值
#因为同时提供了输入值和输出值,plot()无需对输出值的生成方式做出假设,将正确地绘制数据
import matplotlib.pyplot as plt

input_values=[1,2,3,4,5]
squares=[1,4,9,16,25]
#plot(*arges,**kwarges)的参数如下
#*arges没有key值,可以理解为一个包含多个元素的名为arges元组
#**kwarges有key值,包含多个键值对的名为kwarges的字典--kw:keyword
plt.plot(input_values,squares,linewidth=5)

#设置图表标题,并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)#图表标题,fontsize指定图表中文字的大小
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of value",fontsize=14)

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

plt.show()
#%%
#绘制散点图并设置其样式 scatter()
import matplotlib.pyplot as plt

plt.scatter(2,4)#实参为(横坐标,纵坐标),在这个坐标处标记一个点
plt.show()
#%%
#设置散点图 输出的样式
import matplotlib.pyplot as plt

plt.scatter(2,4,s=200)#使用实参s设置绘制图形时使用的点的尺寸
#设置图表标题并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of Value",fontsize=14)

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

plt.show()
#%%
#使用scatter()绘制一系列点
import matplotlib.pyplot as plt

#x_values=[1,2,3,4,5]
#y_values=[1,4,9,16,25]
x_values=list(range(1,1001))#创建一个包含数组1-1000的列表
y_values=[x**2 for x in x_values]#列表解析,自动计算y的值

#plt.scatter(x_values,y_values,s=40)#依次从每个列表中读取一个值(组成坐标)来绘制一个点(x_values[0],y_values[0])
#允许给散点图中的各个点指定颜色,默认为蓝色点和黑色轮廓,在散点图包含的数据点不多时效果很好
#绘制很多点时,黑色轮廓可能会粘连在一起,要删除数据点的轮廓,科在调用scatter()时传递实参edgecolor='none'
#plt.scatter(x_values,y_values,edgecolor='none',s=40)#在2.0.0版本的matplotlib中,scatter()函数的实参edgecolor默认为'none'
#自定义颜色,向scatter()传递参数c,并将其设置为要使用的颜色的名称
#也可以使用RGB颜色模式自定义颜色,传递参数c,并将其设置为一个元组,其中包含三个0~1之间的小数值,分别表示红色、绿色和蓝色分量
#plt.scatter(x_values,y_values,c='red',s=40)
#plt.scatter(x_values,y_values,c=(0.6,0.5,0.8),s=40)#c中值越接近0,指定的颜色越深,越接近1,指定的颜色越浅
#使用颜色映射:colormap是一系列颜色,从起始颜色渐变到结束颜色。
#在可视化中,颜色映射用于突出数据的规律
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=40)#参数cmap告诉pyplot使用哪个颜色映射,渐变蓝色,y值较小的点显示为浅蓝色,y值较大的点显示为深蓝色

#设置图表标题并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of Value",fontsize=14)

#设置刻度标记的大小
#plt.tick_params(axis='both',which='major',labelsize=14)
#设置每个坐标轴的取值范围
plt.axis([0,1100,0,1100000])#要求提供四个值:x和y坐标轴的最小值和最大值

plt.show()
#%%
#scatter()参数
import matplotlib.pyplot as plt

x_values=list(range(1,15))#[1,2,3,4,5]
y_values=[x**2 for x in x_values]#[1,4,9,16,25]

plt.scatter(x_values,y_values,s=y_values,c=y_values,edgecolor='green',cmap=plt.cm.Reds,marker='H')#marker标记样式,s的大小随着y变化,c颜色随着y变化
#设置图标,在图像的左上角有标识
#plt.legend('x1')
#设置图表标题并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of Value",fontsize=14)

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

plt.show()
#%%
#自动保存图表
import matplotlib.pyplot as plt

x_values=list(range(1,15))#[1,2,3,4,5]
y_values=[x**2 for x in x_values]#[1,4,9,16,25]

plt.scatter(x_values,y_values,s=y_values,c=y_values,edgecolor='green',cmap=plt.cm.Reds,marker='H')#marker标记样式,s的大小随着y变化,c颜色随着y变化
#设置图标,在图像的左上角有标识
#plt.legend('x1')
#设置图表标题并给坐标轴加上标签
plt.title("Square Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.ylabel("Square of Value",fontsize=14)

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

plt.savefig('squares_plot.png',bbox_inches='tight')#保存图表,第一个实参指定保存图表的文件名,位置与程序相同;第二个实参指定将图表多余的空白区域裁剪掉
#plt.savefig('C:\\Users\\lcg\\Desktop\\3.jpg')#保存图片,指定绝对路径存储
plt.show()
#%%
#15-1-1
import matplotlib.pyplot as plt

x_values=list(range(1,6))
y_values=[x**3 for x in x_values]

plt.scatter(x_values,y_values)
#设置图表标题并给坐标轴加上标签
plt.title("Y=X^3",fontsize=30)
plt.xlabel("X",fontsize=20)
plt.ylabel("Y",fontsize=20)

plt.show()
#%%
#15-1-2
import matplotlib.pyplot as plt

x_values=list(range(1,1000))
y_values=[x**3 for x in x_values]

#颜色映射
plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Reds)#'color' kwarg must be an mpl color spec or sequence of color specs.For a sequence of values to be color-mapped, use the 'c' kwarg instead.
#设置图表标题并给坐标轴加上标签
plt.title("y=x^3",fontsize=20)
plt.xlabel("x",fontsize=15)
plt.ylabel("y",fontsize=15)

#plt.grid(True)#显示网格
#在图表中某个位置处插入文本
#---------设置字体样式,分别是字体,颜色,宽度,大小
font1 = {'family': 'Times New Roman',
        'color':  'purple',
        'weight': 'normal',
        'size': 16,
        }
font2 = {'family': 'serif',
        'color':  'blue',
        'weight': 'bold',
        'size': 14,
        }
#-----------两种不同字体显示风格-----
#横坐标值,纵坐标值,文本;fontdict--描述文本的属性,包括颜色、字体大小等属性的字典类型
plt.text(200,0.8e9,'y=x^3',fontdict=font1)#存储图表并展示

plt.savefig("y=x^3.png")
plt.show()
#%%
import matplotlib.pyplot as plt

x=plt.imread("testpic.jpg")#读取图片
plt.imshow(x,alpha=0.2)#显示图片
#%%
#随机漫步:每次行走都是随机的,没有明确的方向,结果是由一系列随机决策决定的。
#有实际用途:漂浮在水滴上的花粉因不断受到水分子的挤压而在水面上移动。水滴中的分子运动是随机的,因此花粉在水面上的运动路径犹如随机漫步
import matplotlib.pyplot as plt

from random_walk import RandomWalk

#创建一个RandomWalk实例,并将其包含的点都绘制出来
rw=RandomWalk()
rw.fill_walk()#计算完5000个点的位置,存在两个列表中
#将5000个点绘制出来
plt.scatter(rw.x_values,rw.y_values,s=15,c=rw.y_values)
#存储图表,若存储图表的语句在show()后面,则存储的是空白
plt.savefig("amazingpic.png")
plt.show()
#%%
#多次随机漫步
import matplotlib.pyplot as plt

from random_walk import RandomWalk

while True:
    
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw=RandomWalk()
    rw.fill_walk()#计算完5000个点的位置,存在两个列表中
    #将5000个点绘制出来
    plt.scatter(rw.x_values,rw.y_values,s=15,c=rw.y_values)
    #存储图表,若存储图表的语句在show()后面,则存储的是空白
    plt.savefig("amazingpic.png")
    plt.show()
    
    kr=input("Go on?y/n")
    if kr.lower()=='n':
        break
#%%
#设置随机漫步图的样式
#给点着色
import matplotlib.pyplot as plt

from random_walk import RandomWalk

while True:
    
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw=RandomWalk(50000)#num_points是可选参数,默认值是5000,可以通过传递实参修改点的个数
    rw.fill_walk()#计算完5000个点的位置,存在两个列表中
    
    #调整尺寸以适合屏幕,函数figure()用于指定图表的宽度、高度、分辨率和背景色
    #给形参figsize指定一个元组,指出绘图窗口的尺寸,单位为英寸
    #形参dpi向figure()传递系统的分辨率,例dpi=128
    plt.figure(figsize=(10,6))
    
    #将5000个点绘制出来
    point_numbers=list(range(rw.num_points))
    plt.scatter(rw.x_values,rw.y_values,s=1,c=point_numbers,cmap=plt.cm.Greens)#根据点的绘制顺序着色
    
    #重新绘制起点和终点;要在show()前面
    plt.scatter(rw.x_values[0],rw.y_values[0],s=100,c='r')#起点
    plt.scatter(rw.x_values[-1],rw.y_values[-1],s=100,c='b')#终点
    
    #隐藏坐标轴 plt.axes()
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    
    #存储图表,若存储图表的语句在show()后面,则存储的是空白
    plt.savefig("amazingpictest.png")
    plt.show()
    
    kr=input("Go on?y/n")
    if kr.lower()=='n':
        break
#%%
#15-3
import matplotlib.pyplot as plt

from random_walk import RandomWalk

rw=RandomWalk()
rw.fill_walk()#随机漫步

plt.plot(rw.x_values,rw.y_values,linewidth=5)

plt.show()
#%%
#15-5重构
import matplotlib.pyplot as plt

from randomwalk_step import RandomWalk

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

rw=RandomWalk()
rw.fill_walk()

num_points=list(range(rw.num_points))
plt.scatter(rw.x_values,rw.y_values,c=num_points,cmap=plt.cm.Reds)

plt.show()

random_walk.py

#创建RandomWalk()类:三个属性,一个是存储随机漫步次数的变量,其他两个列表分别存储随机漫步经过的每个点的x和y坐标
from random import choice
#每次做决策时都使用choice()来决定使用哪种选择
class RandomWalk():
    '''一个生成随机漫步数据的类'''
    
    def __init__(self,num_points=5000):
        '''初始化随机漫步的属性'''
        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])#向左走还是向右走,左-1,右1
            x_distance=choice([0,1,2,3,4])#走多远;包含0,不仅可以沿着两个轴移动,也可以沿y轴移动
            x_step=x_direction*x_distance
            
            y_direction=choice([1,-1])#向上走还是向下走,下-1,上1
            y_distance=choice([0,1,2,3,4])#走多远;可沿x轴移动
            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#索引为-1,是列表的倒数第一个元素
            next_y=self.y_values[-1]+y_step
            
            self.x_values.append(next_x)
            self.y_values.append(next_y)

randomwalk_step.py

#原方法fill_walk()很长,新建方法get_step(),重构缩小fill_walk()的规模
#创建RandomWalk()类:三个属性,一个是存储随机漫步次数的变量,其他两个列表分别存储随机漫步经过的每个点的x和y坐标
from random import choice
#每次做决策时都使用choice()来决定使用哪种选择
class RandomWalk():
    '''一个生成随机漫步数据的类'''
    
    def __init__(self,num_points=5000):
        '''初始化随机漫步的属性'''
        self.num_points=num_points
        
        #所有随机漫步都始于(0,0)
        self.x_values=[0]
        self.y_values=[0]
        
    def get_step(self):
        '''确定每次漫步的距离和方向,并计算这次漫步将如何移动'''
        direction=choice([1,-1])
        distance=choice([0,1,2,3,4,5])
        
        step=direction*distance
        return step
    
    def fill_walk(self):
        '''计算随机漫步包含的所有点'''
        
        #不断漫步,直到列表达到指定的长度
        while len(self.x_values)<self.num_points:
            #决定前进方向以及沿这个方向前进的距离
            x_step=self.get_step()
            y_step=self.get_step()
#            x_step=get_step()  #调用函数方法错误
#            y_step=get_step()
            
            #拒绝原地踏步
            if x_step==0 and y_step==0:
                continue#跳过本次循环,执行下一次循环
            
            #计算下一个点的x和y值
            next_x=self.x_values[-1]+x_step#索引为-1,是列表的倒数第一个元素
            next_y=self.y_values[-1]+y_step
            
            self.x_values.append(next_x)
            self.y_values.append(next_y)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值