美文网首页
Python入门:数据可视化(1)

Python入门:数据可视化(1)

作者: 果蝇饲养员的生信笔记 | 来源:发表于2021-02-05 19:47 被阅读0次

    这是《Python编程:从入门到实践》的第二个实践项目的第一部分,对应第15章,使用MatplotlibPlotly绘制简单的图表。是真的讲的太简略了。


    1. 使用Matplotlib绘制简单的折线图

    import matplotlib.pyplot as plt
    
    input_values = [1, 2, 3, 4, 5]
    squares = [1, 4, 9, 16, 25]
    
    fig, ax = plt.subplots()
    #subplots()可以在一张图片中绘制一个或多个图表
    #fig表示整张图片,ax表示图片中的各个图表
    
    #ax.plot(squares,linewidth=3)
    ax.plot(input_values, squares, linewidth=3)
    #plot()根据给定的数据以有意义的方式绘制图表
    #只输入一个列表时ax.plot(squares),假设第一个数据点对应x坐标为0
    #同时提供输入和输出ax.plot(input_values, squares)
    
    ax.set_title("Square Numbers", fontsize=24) #标题
    ax.set_xlabel("Value", fontsize=14) #坐标轴标签
    ax.set_ylabel("Square of Value", fontsize=14)
    ax.tick_params(axis='both', labelsize=14) #刻度标记
    
    plt.show()
    #打开Matplotlib查看器并显示绘制的图表
    
    01_line_graph.png

    2. 使用内置样式

    import matplotlib.pyplot as plt
    print(plt.style.available) #显示有哪些可用的内置样式
    
    mystyles = plt.style.available
    
    # 使用内置样式画图
    import matplotlib.pyplot as plt
    
    input_values = [1, 2, 3, 4, 5]
    squares = [1, 4, 9, 16, 25]
    
    for mystyle in mystyles:
        plt.style.use(mystyle) #使用内置样式
        fig, ax = plt.subplots()
        ax.plot(input_values, squares)
    
        ax.set_title(mystyle) #标题
        ax.set_xlabel("Value") #坐标轴标签
        ax.set_ylabel("Square of Value")
        ax.tick_params(axis='both') #刻度标记
    
        plt.show()
    

    3. 使用Matplotlib绘制简单的散点图

    import matplotlib.pyplot as plt
    
    x_values = range(1, 101)
    y_values =  [x**2 for x in x_values] #列表解析
    
    plt.style.use('seaborn') #使用内置样式
    fig, ax = plt.subplots()
    ax.scatter(x_values, y_values, c='red', s=2)
    #绘制散点图,传递x和y坐标,点的尺寸s
    #颜色c,可用设置为'red',(0, 0.8, 0)
    
    ax.set_title("Square Numbers", fontsize=20)
    ax.set_xlabel("Value", fontsize=13)
    ax.set_ylabel("Square of Value", fontsize=13)
    ax.tick_params(axis='both', which='major', labelsize=12)
    ax.axis([0, 110, 0, 11000]) #每个坐标轴的取值范围,提供4个值,x和y的最小、最大值
    
    plt.show()
    
    03_scatter.png

    4. 颜色映射

    import matplotlib.pyplot as plt
    
    x_values = range(1, 101)
    y_values =  [x**2 for x in x_values] #列表解析
    
    plt.style.use('seaborn') #使用内置样式
    fig, ax = plt.subplots()
    ax.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=2)
    #绘制散点图,传递x和y坐标,点的尺寸s
    #颜色c,设置为y值列表,参数cmap告诉pyplot使用哪个颜色映射
    
    ax.set_title("Square Numbers", fontsize=20)
    ax.set_xlabel("Value", fontsize=13)
    ax.set_ylabel("Square of Value", fontsize=13)
    ax.tick_params(axis='both', which='major', labelsize=12)
    ax.axis([0, 110, 0, 11000]) #每个坐标轴的取值范围,提供4个值,x和y的最小、最大值
    
    #plt.show()
    plt.savefig('04_colormap.png', bbox_inches='tight') #自动保存图表
    
    04_colormap.png

    5. 随机漫步

    创建一个随机漫步的类。

    from random import choice
    
    class RandomWalk:
        """一个生成随机漫步数据的类"""
        #随机漫步可以看做是蚂蚁在晕头转向的情况下,每次都沿随机的方向前行所经过的路径
    
        def __init__(self, num_points=5000):
            """初始化随机漫步的属性"""
            self.num_points = num_points #随机漫步的次数
            self.x_values = [0] #随机漫步经过的每个点的xy坐标
            self.y_values = [0] #起始于(0,0)
    
        def fill_walk(self):
            """计算随机漫步包含的所有点"""
    
            #不断漫步,直到列表到达指定的长度
            while len(self.x_values) < self.num_points:
                #决定前进方向以及沿这个方向前进的距离
                x_direction = choice([1, -1]) #choice()从中随机选择一个值
                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 #返回循环开头
    
                #计算下一个点的xy值
                x = self.x_values[-1] + x_step
                y = self.y_values[-1] + y_step
    
                self.x_values.append(x)
                self.y_values.append(y)
    

    绘制随机漫步图。

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #创建一个RandomWalk实例
    rw = RandomWalk()
    rw.fill_walk()
    
    #绘制所有的点
    plt.style.use('classic')
    fig, ax = plt.subplots()
    #ax.scatter(rw.x_values, rw.y_values, s=5)
    point_numbers = range(rw.num_points)
    ax.scatter(rw.x_values, rw.y_values, c=point_numbers, 
        cmap=plt.cm.Blues, edgecolors='none', s=5)
    
    #显示图像或保存图片
    plt.show()
    #plt.savefig('05_random_walks.png', bbox_inches='tight') #自动保存图表
    
    05_random_walks1.png

    设置随机漫步图的样式。

    import matplotlib.pyplot as plt
    
    from random_walk import RandomWalk
    
    #创建一个RandomWalk实例
    rw = RandomWalk(50_000)
    rw.fill_walk()
    
    #绘制所有的点
    plt.style.use('classic')
    fig, ax = plt.subplots(figsize=(8, 6), dpi=115)
    #指定生成的图形尺寸,单位为英寸,分辨率默认dpi=100像素/英寸
    point_numbers = range(rw.num_points)
    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=50)
    ax.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=50)
    
    #隐藏坐标轴
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    
    #显示图像或保存图片
    #plt.show()
    plt.savefig('06_random_walks2.png', bbox_inches='tight')
    
    06_random_walks2.png

    6. 使用Plotly模拟掷骰子

    创建一个表示骰子的类。

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

    掷一个骰子,并绘制直方图。

    from plotly.graph_objs import Bar, Layout
    from plotly import offline #plotly可以生成交互式图表
    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)
    
    #对结果进行可视化
    x_values = list(range(1, die.num_sides+1)) #list()转化为列表
    data = [Bar(x=x_values, y=frequencies)] #Bar()表示用于绘制条形图的数据集,放在方括号里
    x_axis_config = {'title': 'Result'} #每个配置选项是一个字典元素
    y_axis_config = {'title': 'Frequency of Result'}
    my_layout = Layout(title='Results of rolling one D6 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config) #Layout()返回一个指定图表布局和配置的对象
    offline.plot({'data': data, 'layout': my_layout}, filename='07_d6.html') #生成图表
    
    07_rolling_the_die1.JPG

    掷两个骰子,并绘制点数和的直方图。

    from plotly.graph_objs import Bar, Layout
    from plotly import offline #plotly可以生成交互式图表
    from die import Die
    
    #创建两个D6
    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)
    
    #对结果进行可视化
    x_values = list(range(2, max_result+1)) #list()转化为列表
    data = [Bar(x=x_values, y=frequencies)] #Bar()表示用于绘制条形图的数据集,放在方括号里
    x_axis_config = {'title': 'Result', 'dtick': 1} #每个配置选项是一个字典元素,dtick表示显示的刻度间距
    y_axis_config = {'title': 'Frequency of Result'}
    my_layout = Layout(title='Results of rolling two D6 dice 1000 times',
        xaxis=x_axis_config, yaxis=y_axis_config) #Layout()返回一个指定图表布局和配置的对象
    offline.plot({'data': data, 'layout': my_layout}, filename='d6_d6.html') #生成图表
    
    08_rolling_the_die2.JPG

    相关文章

      网友评论

          本文标题:Python入门:数据可视化(1)

          本文链接:https://www.haomeiwen.com/subject/xbugtltx.html