p15-项目2-生成数据

我是python版本3.8.8 不是python3的话自己去找一下python的安装语句
pip3 install matplotlib 安装命令
切记多试几次!
pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
如果上面的命令还不行可以用这个
多试几次的原因是每一次下载一部分包,多几次就下载好了
折线图
import matplotlib.pyplot as plt



input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

# 使用内置样式
plt.style.use('seaborn')
# fig 代表图片 ax代表各个图标
fig, ax = plt.subplots()
# plot方法绘制图表
ax.plot(input_values, squares, linewidth=3)
# 设置图标标题并给坐标
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)
# 设置刻度标记的大小
ax.tick_params(axis='both', labelsize=14)

# RuntimeWarning: Glyph missing fromcurrent font. font.set_text(s, 0, flags=flags)解决方案
# 警告原因:plt 画图是找不到字体,需要添加两行程序,如下:
# 建议放到最后  因为之前使用样式可能设置会被覆盖
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False
plt.show()

 

 散点图 连起来就是线图
import matplotlib.pyplot as plt

# 使用内置样式
plt.style.use('seaborn')
#
# input_values = [1, 2, 3, 4, 5]
# squares = [1, 4, 9, 16, 25]


# fig 代表图片 ax代表各个图标
fig, ax = plt.subplots()

x_value = range(1, 1001)
y_value = [x ** 2 for x in x_value]

# scatter 方法绘制图表
# ax.scatter(x_value, y_value,c='red', s=10) 给颜色
# ax.scatter(x_value, y_value, c=(0, 0.8, 0), s=10)
ax.scatter(x_value, y_value, c=y_value, cmap=plt.cm.Blues, s=10) # cmap使用那个颜色 c代表渐进

# 设置图标标题并给坐标
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)
# 设置刻度标记的大小
ax.tick_params(axis='both', labelsize=14)

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

# RuntimeWarning: Glyph missing fromcurrent font. font.set_text(s, 0, flags=flags)解决方案
# 警告原因:plt 画图是找不到字体,需要添加两行程序,如下:
# 建议放到最后  因为之前使用样式可能设置会被覆盖
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False
plt.show()
# plt.savefig('plot.png', bbox_inches = 'tight') 保存 bbox_inches表示将空余部分去掉

 


随机漫步
import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态 就不断的模拟随机漫步
while True:
    # 创建一个RandomWalk实例
    rw = RandomWalk(50_000)
    rw.fill_walk()

    # 将所有的点画出来
    plt.style.use('classic')
    # figsize 窗口的尺寸 单位是英寸 dpi是分辨率  其实我没太搞懂 但是dpi越高越清晰
    fig, ax = plt.subplots(figsize=(16, 10), dpi= 100)
    point_numbers = range(rw.num_points)
    # edgecolors='none' 删除每个点的轮廓  从浅蓝色到深蓝色
    ax.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,
        edgecolors='none', s=1)



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

    # 隐藏坐标轴
    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

直方图(条形图)模拟投骰子
1 投一个骰子
from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

# 创建一个 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)

# 对结果进行可视化
x_values = list(range(1, die.num_sides + 1))
data = [Bar(x=x_values, y=frequencies)]

x_axis_config = {'title': '结果'}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='投一个D6 1000次的结果',
                   xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6.html')

 

2创建2个
from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

# 创建2个 D6.
die1 = Die()
die2 = Die()

# 投几次骰子并将结果放在一个列表中
results = []
for roll_num in range(1000):
    result = die1.roll() + die2.roll()
    results.append(result)

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

# 对结果进行可视化
x_values = list(range(2, max_result + 1))
data = [Bar(x=x_values, y=frequencies)]
# dtick 刻度值
x_axis_config = {'title': '结果', 'dtick': 1}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='投2个D6 1000次的结果',
                   xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html')

 

1个6面一个十面
from plotly.graph_objs import Bar, Layout
from plotly import offline

from die import Die

# 创建2个 D6.
die1 = Die(6)
die2 = Die(10)

# 投几次骰子并将结果放在一个列表中
results = []
for roll_num in range(50_000):
    result = die1.roll() + die2.roll()
    results.append(result)

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

# 对结果进行可视化
x_values = list(range(2, max_result + 1))
data = [Bar(x=x_values, y=frequencies)]
# dtick 刻度值
x_axis_config = {'title': '结果', 'dtick': 1}
y_axis_config = {'title': '结果的频率'}
my_layout = Layout(title='投1个D6和1个D10 50000次的结果',
                   xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='d6_d10.html')

 总结:感觉是一个比较简单的库,如何深入使用和高阶的玩法值得探究

posted @ 2021-04-17 14:00  野兽Gentleman  阅读(92)  评论(0)    收藏  举报