matplotlib图表绘制

一.安装

pip install matplotlib

二.折线图

# 折线图
import matplotlib.pyplot as plt

squares = [i * i for i in range(1, 6)]
plt.plot(squares, linewidth=5)


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

# 设置刻度标记的大小和客户标记样式
plt.tick_params(axis='both', labelsize=14)

plt.show()
matplotlib图表绘制_第1张图片
image.png
import matplotlib.pyplot as plt

input_values=[i for i in range(1, 6)]
squares = [i * i for i in range(1, 6)]
plt.plot(input_values,squares, linewidth=5) # 加上x轴刻度值


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

# 设置刻度标记的大小和客户标记样式
plt.tick_params(axis='both', labelsize=14)

plt.show()
matplotlib图表绘制_第2张图片
image.png

三.撒点图

# 撒点图

import matplotlib.pyplot as plt

plt.scatter(2,4)
plt.show()
matplotlib图表绘制_第3张图片
image.png
import matplotlib.pyplot as plt

plt.scatter(2,4,s=200) # s=200表示点的大小

# 设置图表标题并给坐标轴加上标签
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()
matplotlib图表绘制_第4张图片
image.png
import matplotlib.pyplot as plt

# 多个点的设置
x_values=[1,2,3,4,5]
y_values=[1,4,9,16,25]

plt.scatter(x_values,y_values,s=100) 

# 设置图表标题并给坐标轴加上标签
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()
matplotlib图表绘制_第5张图片
image.png
import matplotlib.pyplot as plt

# 自动计算数据
x_values=list(range(1,1001))
y_values=[x**2 for x in x_values]

plt.scatter(x_values,y_values,c='red',s=10,edgecolor='none') 
# edgecolor=none 表示删除数据点的轮廓 
# c=red 表示设置点的颜色 也可以c=(0,0,0.8)
# 可以c=y_values,cmap=plt.cm.Blues  根据y_values的该表而改变颜色额的深浅 以蓝色为颜色

# 设置图表标题并给坐标轴加上标签
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])

plt.show()
# 自动保存为图表 第一个参数是图表名称 第二个参数bbox_inches是将图标多余的空白区域裁剪
# plt.savefig('squares_plot.png',bbox_inches='tight') 
matplotlib图表绘制_第6张图片
image.png

三.随机漫步
random_walk.py

from random import choice
class RndomWalk():
    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

            x_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = x_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)

rw_visual.py

import matplotlib.pyplot as plt

from random_walk import RndomWalk

while True:
    # 创建一个RandomWalk实例 并将其包含的点都绘制出来
    rw = RndomWalk(50000)  # 设置了50000个点
    rw.fill_walk()

    # 设置绘制窗口的尺寸
    plt.figure(figsize=(10, 6), dpi=128)  # figsize 设置屏幕尺寸 dpi 设置屏幕分辨率

    point_numbers = list(range(rw.num_points))
    # 设置点的颜色 渐变
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor='none', s=1)

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

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

    plt.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break

image.png

四.Pygal模拟掷骰子绘制直方图
安装Pygal

pip install --user pygal

die.py

from random import randint

class Die():
    """表示一个骰子的类"""

    def __init__(self,num_sides=6):
        # 骰子默认为6面
        self.num_sides=num_sides

    def roll(self):
        """return 一个位于1和骰子面数之间的随机值"""
        return randint(1,self.num_sides)

die_visual.py

import pygal
from die import Die

# create die
die_1 = Die()
die_2 = Die()

# 掷几次骰子,并将结果存储在一个列表中
results = []

for roll_num in range(1000):
    result = die_1.roll() + die_2.roll()
    results.append(result)

# 分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2, max_result + 1):
    frequency = results.count(value)
    frequencies.append(frequency)

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

hist.title = "Results of rolling two D6 1000 times"
hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6+D6', frequencies)
hist.render_to_file('die_visual.svg')

matplotlib图表绘制_第7张图片
image.png

你可能感兴趣的:(matplotlib图表绘制)