Matplotlib绘图——玩转Python数据可视化

Python大火的原因之一就是它有规模强大的工具库,今天我们将介绍Python的最热门的几大库之一——Matplotlib。可以发现,它和我们常听到的Matlib很像,都是数学绘图工具,但是由于Python强大的功能,它比Matlib容易上手和使用。

更多资料请参考官网:

中文文档:https://www.matplotlib.org.cn/

英文文档:https://www.matplotlib.org.cn/en/

一、Matplotlib的安装

Python库安装的方式基本都是相同的,在Windows下,都要使用pip命令。

python -m pip install matplotlib(或pip install matplotlib)

安装后,对其进行测试,没有出现错误,则认为已经安装成功,命令如下:

#首先,进入到Python环境中
import matplotlib

二、Matplotlib绘图

一张精美的图应该包含以下几个要素,如图所示。接下来我将用几个简单的例子,分别介绍matplotlib库中常用的函数和方法。

                                         

1.使用plot( )简单绘图

# 导入库
import matplotlib.pyplot as plt
# 数据准备
sqares=[1,4,9,16,25]
# 根据数据画图
plt.plot(sqares)

# 以下部分,就是对结果图进行美化
# 首先是添加标题,并设置字体大小
plt.title("Sqare Draw",fontsize=24)
# 对X,Y轴进行添加标签,设置字体大小
plt.xlabel("Value",fontsize=14)
plt.ylabel("Sqare of Value",fontsize=14)
# 设置刻度标记的大小,就是坐标轴的字体大小,
# 参数axis的值为'x'、'y'、'both',分别代表设置X轴、Y轴以及同时设置,默认值为'both'
plt.tick_params(axis='both',labelsize=14)
# 数据可视化,也就是将结果变成图片展示出来
plt.show()

                                        

可以发现一个问题,就是横坐标为4.0的时候,纵坐标是25,这里出现里问题。这是因为当使用plot()对提供的数据绘图的时候,它默认第一个数据点对应的坐标是0,因此可以手动设定为1。修改后的代码如下:

# 导入库
import matplotlib.pyplot as plt
# 数据准备
input_values=[1,2,3,4,5]
sqares=[1,4,9,16,25]
# 根据数据画图
plt.plot(input_values, sqares, linewidth=5)

# 以下部分,就是对结果图进行美化
# 首先是添加标题,并设置字体大小
plt.title("Sqare Draw",fontsize=24)
# 对X,Y轴进行添加标签,设置字体大小
plt.xlabel("Value",fontsize=14)
plt.ylabel("Sqare of Value",fontsize=14)
# 设置刻度标记的大小,就是坐标轴的字体大小,
# 参数axis的值为'x'、'y'、'both',分别代表设置X轴、Y轴以及同时设置,默认值为'both'
plt.tick_params(axis='both',labelsize=14)
# 数据可视化,也就是将结果变成图片展示出来
plt.show()

                                    

2.使用scatter( )绘制散点图

①手动添加少量数据:

# 导入库
import matplotlib.pyplot as plt
# 数据准备
x_values=[1,2,3,4,5]
y_values=[1,4,9,16,25]
# scatter方法是将点标在图上,s是设置点的大小
plt.scatter(x_values,y_values,s=100)
# 数据可视化,也就是将结果变成图片展示出来
plt.show()

                                     

②自动计算数据:当数据密集的时候,会自动生成由点组成的密集曲线

# 导入库
import matplotlib.pyplot as plt
# 数据准备
x_values=list(range(1,1001))
y_values=[x**2 for x in x_values]
# scatter方法是将点标在图上,s是设置点的大小
plt.scatter(x_values,y_values,s=40)
# 设置每个坐标轴的取值范围
plt.axis([0, 1200, 0, 1200000])
# 数据可视化,也就是将结果变成图片展示出来
plt.show()

                                          

自定义数据点的颜色:

# 参数c可以设定颜色,也可以使用RGB颜色模式,如c=(0,0,0.8)
# 三个数都是0~1,分别代表红、绿、蓝,越接近0,颜色越深,越接近1,颜色越浅。
# edgecolors是数据点的轮廓,默认值就是none
plt.scatter(x_values,y_values,c='red',edgecolors='none',s=40)

③颜色映射:用颜色从浅到深,表示数值从小到大

# 导入库
import matplotlib.pyplot as plt
# 数据准备
x_values=list(range(1,1001))
y_values=[x**2 for x in x_values]
# scatter方法是将点标在图上,s是设置点的大小,将参数c设置为y值的列表,并用参数cmap告诉plt使用哪个# # 颜色映射,y值小的显示为浅蓝色,y值大的显示为深蓝色。
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=40)
# 设置每个坐标轴的取值范围
plt.axis([0, 1200, 0, 1200000])
# 数据可视化,也就是将结果变成图片展示出来
plt.show()

                                       

自动保存图片

plt.savefig('sqares_plot.png',bbox_inches='tight')
# 第一个参数是设定保存的图片的名称,第二个参数是将图表多余的空白区域剪掉,也可以不设置它。

3.使用RandomWalk( )生成随机数据

①我们需要创建一个RandomWalk( )类

它有3个属性:

  • 存储随机漫步次数的变量
  • 其他2个是列表,分别存储每次漫步经过的x和y的坐标
from random import choice

class RandomWalk():
    """一个生成随机漫步数据的类"""
    
    def __init__(self,num_points=5000):
        """初始化随机漫步的步数为5000步"""
        self.num_points=num_points
        
        """所有的随机漫步都始于(0,0)"""
        self.x_values=[0]
        self.y_values=[0]

完整代码如下:

注意,每次生成的图都是随机的

from random import choice
import matplotlib.pyplot as plt
class RandomWalk():
    """一个生成随机漫步数据的类"""

    def __init__(self,num_points=5000):
        """初始化随机漫步的步数为5000步"""
        self.num_points=num_points

        """所有的随机漫步都始于(0,0)"""
        self.x_values=[0]
        self.y_values=[0]

    def fill_walk(self):
        """计算随机漫步包含的所有点"""

        # 不断漫步,直到到达规定的步数,本例为5000
        while len(self.x_values)<self.num_points:
            # 决定前进的方向及距离,-1是左,1是右
            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)

rw=RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values,rw.y_values,s=15)
plt.show()

                                     

 ②使用颜色映射随机漫步图:

由于点是按照顺序生成的,因此颜色从浅到深也是按照点的顺序生成的。因此将代码执行的部分修改成如下:

rw=RandomWalk()
rw.fill_walk()
point_number=list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, s=15)
plt.show()

                                       

③用不同的颜色标注起始点和终点

rw=RandomWalk()
rw.fill_walk()
point_number=list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, s=15)

# 起点是绿色,终点是红色
plt.scatter(0,0,c='green',s=100)
plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',s=100)

plt.show()

                                     

④隐藏坐标轴

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

                                      

⑤增加点数

创建实例的时候,可以赋值一个新的实参值,覆盖原先的默认值,如:(其他代码相同)

rw=RandomWalk(50000)

⑥调整尺寸

#python默认的屏幕分辨率是80像素/英寸,可以使用函数figure()修改分辨率
plt.figure(dpi=128, figsize=(10, 6))

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值