机器学习——Matplotlib画廊的使用

绘制简单的折线图plt.plot

import matplotlib.pyplot as plt

#设置数值点
x= [1, 2, 3, 4, 5]
y=[1,4,9,16,25]

#画图
plt.plot(x,y)


# 用黑体显示中文
plt.rcParams['font.sans-serif'] = ['SimHei'] 

#标签
plt.title("折线图", fontsize=24)
plt.xlabel("X轴", fontsize=14) 
plt.ylabel("Y轴", fontsize=14) # 设置刻度标记的大小 

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

绘制简单的散点图plt.scatter

import matplotlib.pyplot as plt


x= [1, 2, 3, 4, 5]
y= [1, 4, 9, 16, 25]

#输入x,y数据,并s设置点的粗细
plt.scatter(x,y,s=100)

 自动计算数据

import matplotlib.pyplot as plt

x = list(range(1, 1001))
y= [x**2 for x in x_values]
plt.scatter(x, y, s=40)

# 设置每个坐标轴的取值范围
plt.axis([0, 1100, 0, 1100000])
plt.show()

 删除数据点的轮廓

#要删除数据点的轮廓,可在调用scatter() 时传递实参edgecolor='none'
plt.scatter(x, y, edgecolor='none', s=40)

自定义颜色

#要修改数据点的颜色,可向scatter() 传递参数c
plt.scatter(x, y, c='red', edgecolor='none', s=40)


#使用RGB颜色模式自定义颜色,它们分别表示红色、绿色和蓝色分量
plt.scatter(x, y, c=(0, 0, 0.8), edgecolor='none', s=40)
#值越接近0,指定的颜色越深,值越接近1,指定的颜色越浅。

使用颜色映射

将参数c 设置成了一个 y 值列表,并使用参数cmap 告诉pyplot 使用哪个颜色映射。这些代码将 y 值较小的点显示为浅蓝色,并将 y 值较大的点显示为深蓝色

x = list(range(1001))
y = [x**2 for x in x]
plt.scatter(x, y, c=y, cmap=plt.cm.Blues,edgecolor='none', s=40)

 自动保存图表

将对plt.show() 的调用替换为对plt.savefig() 的调用

#将对plt.show() 的调用替换为对plt.savefig() 的调用
plt.savefig('plot.png', bbox_inches='tight')

第一个实参指定要以什么样的文件名保存图表,这个文件将存储到.py所在的目录中;

第二个实参指定将图表多余的空白区域裁剪掉。如果要保留图表周围多余的空 白区域。

随机漫步

from random import 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])
            x_distance = choice([0, 1, 2, 3, 4])
            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)

用choice([1, -1]) 给x_direction 选择一个值,结果要么是表示向右走的1,要么是表示向左走的-1

choice([0, 1, 2, 3, 4]) 随机地 选择一个0~4之间的整数,告诉Python沿指定的方向走多远(x_distance )

如果x_step 为正,将向右移动,为负将向左移动,而为零将垂直移动;如果y_step 为正,就意 味着向上移动,为负意味着向下移动,而为零意味着水平移动。如果x_step 和y_step 都为零,则意味着原地踏步,我们拒绝这样的情况,接着执行下一次循环

为获取漫步中下一个点的 x 值,我们将x_step 与x_values 中的最后一个值相加

获得下一个点的 x 值和 y 值后,我们将它们分别附加到 列表x_values 和y_values 的末尾。

 给点着色

加参数:c=point_numbers, cmap=plt.cm.Set3

 重新绘制起点和终点

# 突出起点和终点
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)

增加点数

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

调整尺寸以适合屏幕

# 设置绘图窗口的尺寸 
plt.figure(dpi=128,figsize=(10, 6))

import matplotlib.pyplot as plt
while True:
    #创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()

    # 设置绘图窗口的尺寸 
    plt.figure(dpi=128,figsize=(10, 6))
    
    # 绘制点并将图形显示出来 
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Set3,
    edgecolor='none', s=1)
   
    # 隐藏坐标轴 
    plt.axes().get_xaxis().set_visible(False) 
    plt.axes().get_yaxis().set_visible(False)

    
    # 突出起点和终点
    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.show()
    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
        break

使用使 Pygal模拟掷骰子

from random import randint
import pygal

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

# 创建一个D6
die = Die()


# 掷几次骰子,并将结果存储在一个列表中
results = []
for roll_num in range(1000):
    result = die.roll()
    results.append(result)
# 分析结果
frequencies = []
for value in range(1, die.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)


# 对结果进行可视化
hist = pygal.Bar()
hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = ['1', '2', '3', '4', '5', '6']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')

猜你喜欢

转载自blog.csdn.net/qq_21402983/article/details/123938462