zoukankan      html  css  js  c++  java
  • 数据可视化:折线图、直方图、散点图

    目录

    1、折线图

    2、直方图

    3、散点图

    4、颜色映射(colormap)

    5、pygal模块(svg格式)

    6、随机漫步

    重要知识点

    import matplotlib.pyplot as plt  -- 绘制2D折线图,直方图,散点图等

    import numpy as np   -- 将列表转换为数组,给图形上每个点添加标签时会用到

    import pygal  -- pygal是一个SVG图表库。SVG是一种矢量图格式,全称Scalable Vector Graphics -- 可缩放矢量图形。

    from random import choice -- 生成随机漫步数据,函数choice([])从列表中随机输出一个数

    from random import randint --randint()从一个区间随机返回一个数

    1、折线图

    plt.plot() 绘制折线图

    np.array() 将列表转换为存储单一数据类型的多维数组,例如[1 2 3 4 5] 

    zip(x,y) 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内  存。我们可以使用 list() 转换来输出列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将组解压为列表,例如a1,a2 = zip(*zip(a,b))

    plt.annotate() 给折线点设置(x,y)坐标值

    plt.tick_params() 设置刻度线和标签的大小,颜色,内外侧,both代表xy同时设置

    plt.title()设置图表标题

    plt.xlabel() 设置X轴标签

    plt.ylabel() 设置Y轴标签

    plt.axis([]) 设置X,Y轴刻度的取值范围 

    plt.savefig('') 保存图表为图片格式

    plt.show() 打开matplotlib查看器,并显示绘制的图形

    #模块pyplot包含很多生成图表的函数
    import matplotlib.pyplot as plt
    import numpy as np
    input_values = [1,2,3,4,5,6]
    squares = [1,4,9,16,25,36]
    #plot()绘制折线图
    plt.plot(input_values,squares,linewidth=5,color='m')
    #np.array()将列表转换为存储单一数据类型的多维数组
    x = np.array(input_values)
    y = np.array(squares)
    #annotate()给折线点设置坐标值
    for a,b in zip(x,y):
        plt.annotate('(%s,%s)'%(a,b),xy=(a,b),xytext=(-25,15),
                     textcoords='offset points')
    #设置标题
    plt.title('Square Numbers',fontsize=24)
    plt.xlabel('Value',fontsize=14)
    plt.ylabel('Square of Value',fontsize=14)
    #设置刻度线和标签的大小,颜色,内外侧,both代表xy同时设置
    plt.tick_params(axis='both',direction='in',colors='c',labelsize=14)
    plt.axis([0,8,0,45])
    plt.savefig('imagesline_chart.png')
    #show()打开matplotlib查看器,并显示绘制的图形
    plt.show()

    2、直方图

    plt.bar() 绘制直方图

    plt.text() 给条形柱添加标签

    import numpy as np
    import matplotlib.pyplot as plt
    #创建带数字标签的直方图
    numbers = list(range(1,11))
    x = np.array(numbers)
    y = np.array([a**2 for a in numbers])
    #绘制图形
    plt.bar(x,y,width=0.5,align='center',color='c')
    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)
    #设置xy轴坐标取值范围
    plt.axis([0,11,0,110])
    #设置标签,a,b代表标签的坐标,第二个为标签内容,然后是对齐方式和尺寸
    for a,b in zip(x,y):
        plt.text(a,b+0.1,'%.0f'%b,ha = 'center',va = 'bottom',fontsize=7)
    plt.savefig('imagessquares.png')
    plt.show()

    3、散点图

    plt.scatter() 绘制散点图

    #scatter()绘制散点图
    import matplotlib.pyplot as plt
    x_values = list(range(1,11))
    y_values = [x**2 for x in x_values]
    #参数c为点的颜色,默认蓝色;edgecolor为点的轮廓颜色,默认黑色,none为无色
    plt.scatter(x_values,y_values,c='white',edgecolor='green',s=1000)
    '''
    还可以使用RGB模式,向参数c传递一个元组,包含三个0-1之间的小数,
    他们分别代表红绿蓝的份量,越接近0,颜色越深,越接近1,颜色越浅
    c=(0,0,0.8),代表淡蓝色
    '''
    #设置标题
    plt.title('Square Numbers',fontsize=24)
    plt.xlabel('Value',fontsize=14)
    plt.ylabel('Square of Value',fontsize=14)
    #设置刻度的大小,both代表xy同时设置
    plt.tick_params(axis='both',labelsize=14)
    #设置坐标轴的取值范围
    plt.axis([0,11,-20,110])
    #plt.savefig('imagessquares_plot1.png')
    plt.show()

    4、颜色映射(colormap)

    #根据每个点的Y值来设置颜色映射
    x_values = list(range(1,11))
    y_values = [x**2 for x in x_values]
    '''参数c设置成Y值列表,代表各点的先后顺序,使用参数camp告诉
    pyplot使用什么颜色映射,s为点的大小
    '''
    plt.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Reds,
                edgecolor='green',s=1000)
    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.axis([0,11,-20,110])
    #savefig()自动保存图表,第二个参数表示删除图表多余的空白区域
    plt.savefig('imagessquares_plot2.png',bbox_inches='tight')
    plt.show()

    5、pygal模块(svg格式)

    randint(1,5) 从一个区间随机返回一个数,包括两端的数
    hist = pygal.Bar() 定义直方图类
    hist.x_labels=[]  设置X轴刻度
    hist.x_title='' X轴标题
    hist.y_title='' Y轴标题
    hist.add(' ',[]) 绘制直方图,''内为图表标题
    hist.render_to_file('') 保存到文件夹
    #pygal模块:创建可缩放的矢量图形文件(.svg)
    import pygal
    from random import randint
    class Die():
        def __init__(self,num_sides=6):
            self.num_sides = num_sides
        def roll(self):
            '''函数randint()返回一个区间的任意数值'''
            return randint(1,self.num_sides)
    #创建一个6面骰子,摇1000次,将结果存在列表中
    die_1 = Die()
    die_2 = Die(10)
    results = [die_1.roll() + die_2.roll() for roll_num in range(5000)]
    #分析每一种结果的出现频率,存在一个列表中
    max_result = die_1.num_sides + die_2.num_sides
    frequencies = [results.count(value) for value in range(2,max_result+1)]
    #对结果进行可视化,hist:频数直方图
    hist = pygal.Bar()
    hist.x_labels = list(range(2,max_result+1,1))#x轴刻度
    hist.x_title = 'Result' # 标题
    hist.y_title = 'Freqency of Rsult'
    #add()向它传递一个指定的标签,一个列表,包含将出现在图表中的值
    hist.add('D6 + D10',frequencies)
    hist.render_to_file('imageshist.svg')

    6、随机漫步

    choice([])从列表中随机输出一个数

    figure()用于指定图表的宽度、高度、分辨率和背景色,形参figsize需要指定一个元组,单位为英寸,dpi为分辨率,facecolor为窗口边框颜色

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

    line = pygal.Line() 绘制可缩放的折线图

    import matplotlib.pyplot as plt
    import pygal
    from random import choice
    class RandomWalk():
        '''一个生成随机漫步数据的类'''
        def __init__(self,num_points):
            self.num_points = num_points
            #所有的随机漫步都始于(0,0)
            self.x_values = [0]
            self.y_values = [0]
        def get_step(self):
            direction = choice([1, -1])  # 随机选择向左向右两个方向
            distance = choice([0, 1, 2, 3, 4, 5, 6, 7, 8])  # 随机选择移动的距离
            return direction * distance  # 每次移动的步长
        def fill_walk(self):
            '''定义一个循环,直到达到给定的点数'''
            while len(self.x_values) < self.num_points:
                x_step = self.get_step()
                y_step = self.get_step()
                #拒绝原地踏步
                if x_step and y_step == 0:
                    continue
                #计算下一个点的xy值,用列表的最后一个值加上步长
                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(5000)
    rw.fill_walk()
    #绘制特定窗口尺寸和分辨率的随机漫步散点图
    plt.figure(figsize=(6,6),dpi=128,facecolor='palegreen')
    point_numbers = list(range(rw.num_points))
    #以颜色映射的方式展示出来,可以看出漫步中各点的先后顺序
    plt.scatter(rw.x_values,rw.y_values,c=point_numbers,
                cmap=plt.cm.Greens,edgecolor='none',s=1)
    #重新绘制第一个和最后一个点,突出显示
    plt.scatter(0,0,c='red',edgecolors='none',s=100)
    plt.scatter(rw.x_values[-1],rw.y_values[-1],c='orange',
                edgecolors='none',s=100)
    #exes()隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    #plt.savefig(r'images
    andom_plot1.png')
    plt.show()
    '''生成随机漫步折线图'''
    rw = RandomWalk(5000)
    rw.fill_walk()
    plt.plot(rw.x_values,rw.y_values,color='cyan',linewidth=1)
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    plt.show()
    '''利用pygal实现随机漫步折线图'''
    lc = RandomWalk(5000)
    lc.fill_walk()
    line_chart = pygal.Line()
    line_chart.x_labels = map(str, range(0, 9))
    line_chart.add('random',lc.y_values)
    line_chart.render_to_file(r'images
    andom.svg')
  • 相关阅读:
    【后缀数组】
    【后缀数组之height数组】
    【后缀数组之SA数组】【真难懂啊】
    【转】为何浮点数可能丢失精度
    UVa_Live 3664(精度坑)
    【火车出栈】ZOJ
    并发查询
    java基础知识1
    感悟__你总是要建立自己的价值观,世界观,人生观,信念的,总不能一直靠鸡汤,被外界,环境,他人,见闻等所掌控你的情绪,积极或者消极.
    batch、随机、Mini-batch梯度下降
  • 原文地址:https://www.cnblogs.com/charliedaifu/p/9975611.html
Copyright © 2011-2022 走看看