15 使用Python绘制简单的折线图

 

 

2019年2月份编程语言排行榜出炉,多年王者java正式跌落下神坛,Python等上NO.1,Python语言相对java语言它简单,入门更快

对java熟悉的人,上手Python就比较容易了,Python中变量命名,继承等相比java更简单;通过一两个月的学习,发现它太简便了,同样的一个功能,java实现得几十甚至上百行代码实现,而Python只需一行代码搞定,提升了开发效率.

在学习Python中,通过记录学习Python的点点滴滴,回顾掌握内容提升自己,之前学习Python时,未发现记录博客,总是看的多,总结的少,似会不会,2019年为鞭策自己,将所看所学的知识总结,同时也希望同更多志同道合的同学一块进步学习,开始写博客,之前Python基础后续会慢慢补上;先赋使用Python绘制简单的折线图;

使用scatter()绘制一系列的点
要绘制一系列的点,可向scatter() 传递两个分别包含x 值和y 值的列表
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.title("scatter", fontsize=24)
plt.scatter(x_values, y_values, s=100)
# 设置刻度标记的大小
plt.tick_params(axis='both', which='major', labelsize=14)
plt.show()

运行后如下图

手动列表包含的值效率低下,如果绘制的点过多更是如此;可以让Python帮助我们完成计算

x_values = list(range(1, 10001))
y_values = [x ** 2 for x in x_values]
plt.title("scatter", fontsize=24)
#plt.scatter(x_values, y_values, s=100)
#设置颜色
#plt.scatter(x_values, y_values, c='red',edgecolor = 'none',s=40)
#设置颜色通过RGB设置颜色
plt.scatter(x_values, y_values, c=(0,0,0.8),edgecolor = 'none',s=40)

plt.tick_params(axis='both', which='major', labelsize=14)
# 设置x轴和y轴取值范围,x轴取值范围[0,1100],y轴取值范围[0,110000]
plt.axis([0, 1100, 0, 1110000])
plt.show()

运行结果

使用颜色映射

颜色映射 (colormap)是一系列颜色,它们从起始颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律,例如,你可能用较浅的颜色来显示较小的值,并使用较深的颜色来显示较大的值

x_values = list(range(1, 1001))
y_values = [x ** 2 for x in x_values]
plt.title('scattle', fontsize=24)
#我们将参数c 设置成了一个 y 值列表,并使用参数cmap 告诉pyplot 使用哪个颜色映射
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,
            edgecolor='none', s=40)
plt.show()

自动保存图表

将show()替换为saveConfig(‘文件名称.png’,bbox_inches=’tight’)

第二个参数:将图标多余空白区域裁剪掉,如果要保留图表周围多余的空白区域,可省略这个实参

随机漫步

创建RandomWalk类,这个类需要三个属性,其中一个存储随机漫步次数的数量,其它两个是列表
random_walk.py
class RandomWalk():
    """一个生成随机漫步数据的类"""

    def __init__(self, num_points=5000):
        """初始化随机漫步的属性"""
        self.num_points = num_points
        # 所有随机漫步都始于(0,0)
        self.x_values = [0]
        self.y_value = [0]

def fill_walk(self):
    """计算漫步包含所有的点"""
    # 不断漫步,直到列表到达指定的长度
    while len(self.x_values) < self.num_points:
        # 决定前进方向以及沿这个方向前进的距离
        # 要么向右走的1,要么向左走的-1
        x_direction = choice([1, -1])
        # 随机地选择一个0到4的整数
        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)

绘制随机漫步图

rw = RandomWalk()
rw.fill_walk()
# 绘制起点和终点
plt.scatter(0, 0, c='green', edgecolor='none', s=100
#给点着色
#plt.scatter(rw.x_values, rw.y_values, s=15)
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues,
            edgecolor='none', s=15)

plt.show()

运行结果

隐藏坐标轴

plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
....
plt.show()

运行如下图

15.4 Pygal模拟投掷骰子,计算出投掷100次时各个点数的总次数,并使用直方图显示

15.4.1 安装pygal

在linux和mac os系统中,应执行类似于下面这样

pip install --user pygal

在windows系统中,命令类似于这样

Python -m pip install --user pygal

注意 你可能需要使用命令pip3 而不是pip ,如果这还是不管用,你可能需要删除标志--user 。

15.4.2  pygal画廊(使用pygal模拟投骰子)

创建骰子的类(Die)
class Die():
    """表示骰子的类"""

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

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

 

模拟投骰子

die = Die()
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(100):
    result = die.roll()
    results.append(result)

print(results)

分析结果:

die = Die()
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(100):
    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 = "Result 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')
print(frequencies)

运行后程序,在当前目录生成die_visual.svg,建议使用web浏览器打开,使用其它格式打开svg图,有时加载不出来,这个需要 注意下

运行结果如下图

注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.在同一个图表中绘制多个数据集时,这项功能显得特别有用

15.4.7 同时投掷两个骰子

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)

# 对结果进行可视化
#注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.
# 在同一个图表中绘制多个数据集时,这项功能显得特别有用
hist = pygal.Bar()
hist.title = "Result of rolling one 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')
print(frequencies)

运行结果 

15.4.8 同时投掷不同的骰子

需要注意:x轴最低数值为2,最高为16
die_1 = Die()
die_2 = Die(10)
results = []
# 投掷几次骰子,并将结果存储在一个列表中
for roll_num in range(5000):
    result = die_1.roll()+die_2.roll()
    results.append(result)

frequencies = []
max_result = die_1.num_sides+die_2.num_sides
#两棵骰子,从2开始计算
for value in range(2, max_result + 1):
    frequency = results.count(value)
    frequencies.append(frequency)

# 对结果进行可视化
#注意:pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何图形,将看到与之相关联的数据.
# 在同一个图表中绘制多个数据集时,这项功能显得特别有用
hist = pygal.Bar()
hist.title = "Result of rolling one D6 5000 times"
hist.x_labels = [ '2', '3', '4', '5', '6','7','8','9','10','11','12','13',
                  '14','15','16']
hist.x_title = "Result"
hist.y_title = "Frequency of result"
hist.add('D6+D6', frequencies)
hist.render_to_file('die_visual.svg')
print(frequencies)

运行结果

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值