zoukankan      html  css  js  c++  java
  • Matplotlib入门

    画一个简单的图形
    #画一条 [0, 2pi] 上的正弦曲线
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50) # 生成一个包含50个元素的数组,这50个元素均匀的分布在 [0, 2pi] 的区间上
    plt.plot(x, np.sin(x)) # 如果没有第一个参数x,图形的x轴坐标将不再是0到2pi,而应该是数组的索引范围
    plt.show() # 显示图形,如果没有这行代码图像就不会显示
    View Code

    在一张图上绘制两个数据集

    #在一张图上绘制两个数据集,函数sin(x)和sin(2x)的图形
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50)
    plt.plot(x, np.sin(x),
            x, np.sin(2 * x))  #调用plt.plot()的时候多传入了一个数据集,并用逗号与第一个数据集分隔开。
    plt.show()
    View Code

    自定义图形的外观

    #自定义图形的外观,展示多个数据集时,非常必要
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50)
    plt.plot(x, np.sin(x), 'r-o', #red红色,'-o' 代表实心点标记
            x, np.cos(x), 'g--') #green, '--' 代表虚线
    plt.show()
    
    '''
    颜色: 蓝色 - 'b' 绿色 - 'g' 红色 - 'r' 青色 - 'c' 品红 - 'm' 黄色 - 'y' 黑色 - 'k'('b'代表蓝色,所以这里用黑色的最后一个字母) 白色 - 'w'
     
    线: 直线 - '-' 虚线 - '--' 点线 - ':' 点划线 - '-.'
     
    常用点标记 点 - '.' 像素 - ',' 圆 - 'o' 方形 - 's' 三角形 - '^' 
    '''
    View Code

    使用子图

    #使用子图,在一个窗口绘制多张图
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50)
    plt.subplot(2, 1, 1) # (行,列,活跃区)
    plt.plot(x, np.sin(x), 'r')
    plt.subplot(2, 1, 2)  
    plt.plot(x, np.cos(x), 'g')
    plt.show()
    
    '''
    调用plot()函数之前需要先调用subplot()函数,该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。
    活跃区域代表当前子图所在绘图区域,绘图区域是按从左至右,从上至下的顺序编号。
    
    '''
    View Code

    简单的散点图

    # 简单的散点图,散点图是一堆离散点的集合
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50)
    y = np.sin(x)
    plt.scatter(x,y)  #调用scatter()函数并传入x坐标和y坐标的数据
    plt.show()
    View Code

    彩色映射散点图

    # 彩色映射散点图,根据数据的大小给每个点赋予不同的颜色和大小,并在图中添加一个颜色栏
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.random.rand(1000)  #绘图数据随机产生
    y = np.random.rand(1000)
    size = np.random.rand(1000) * 50
    colour = np.random.rand(1000)
    plt.scatter(x, y, size, colour)  #scatter()函数新增两个参数,图上点的大小和颜色根据数据的大小变化
    plt.colorbar()  #colorbar()函数添加了一个颜色栏
    plt.show()
    View Code

    直方图

    # 直方图
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.random.randn(1000)
    plt.hist(x, 50)  # (数据,分组数)
    plt.show()
    View Code

    标题,标签和图例

    # 添加标题,坐标轴标记和图例
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 2 * np.pi, 50)
    plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
    plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
    plt.legend() # 展示图例
    plt.xlabel('Rads') # 给x轴添加标签
    plt.ylabel('Amplitude') # 给y轴添加标签
    plt.title('Sin and Cos Waves') # 添加图形标题
    plt.show()
    View Code

     

    python 画饼图

    画饼图用到的方法为:

    matplotlib.pyplot.pie()

    参数为:

    pie(x, explode=None, labels=None,  
        colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'),  
        autopct=None, pctdistance=0.6, shadow=False,  
        labeldistance=1.1, startangle=None, radius=None,  
        counterclock=True, wedgeprops=None, textprops=None,  
        center = (0, 0), frame = False )
    View Code

    参数说明:

    x       (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
    labels  (每一块)饼图外侧显示的说明文字
    explode (每一块)离开中心距离
    startangle  起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
    shadow  是否阴影
    labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
    autopct 控制饼图内百分比设置,可以使用format字符串或者format function
            '%1.1f'指小数点前后位数(没有用空格补齐)
    pctdistance 类似于labeldistance,指定autopct的位置刻度
    radius  控制饼图半径

    返回值:
    如果没有设置autopct,返回(patches, texts)
    如果设置autopct,返回(patches, texts, autotexts)

    patches -- list --matplotlib.patches.Wedge对象

    texts autotexts -- matplotlib.text.Text对象

     
    示例:
    # -*- coding: utf-8 -*-
    import numpy as np  
    import matplotlib.mlab as mlab  
    import matplotlib.pyplot as plt  
    labels=['China','Swiss','USA','UK','Laos','Spain']
    X=[222,42,455,664,454,334]  
     
    fig = plt.figure()
    plt.pie(X,labels=labels,autopct='%1.2f%%') #画饼图(数据,数据对应的标签,百分数保留两位小数点)
    plt.title("Pie chart")
      
    plt.show()  
    plt.savefig("PieChart.jpg")
    View Code

    from matplotlib import pyplot as plt
     
    #调节图形大小,宽,高
    plt.figure(figsize=(6,9))
    #定义饼状图的标签,标签是列表
    labels = [u'第一部分',u'第二部分',u'第三部分']
    #每个标签占多大,会自动去算百分比
    sizes = [60,30,10]
    colors = ['red','yellowgreen','lightskyblue']
    #将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
    explode = (0.05,0,0)
     
    patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
                                    labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
                                    startangle = 90,pctdistance = 0.6)
     
    #labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
    #autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
    #shadow,饼是否有阴影
    #startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
    #pctdistance,百分比的text离圆心的距离
    #patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本
     
    #改变文本的大小
    #方法是把每一个text遍历。调用set_size方法设置它的属性
    for t in l_text:
        t.set_size=(30)
    for t in p_text:
        t.set_size=(20)
    # 设置x,y轴刻度一致,这样饼图才能是圆的
    plt.axis('equal')
    plt.legend()
    plt.show()
    View Code

      Matplotlib画图步骤

    plt.plot(x,y,ls=,lw=,c=,marker=,markersize=,markeredgecolor=,markerfacecolor,label=)

    x:x轴上的数据       y:y轴上的数据

    ls:line style折线风格("-","--","-.",":")       lw: line width线条宽度

    c: color颜色

    marker: 线条上点的形状;  markersize: 点的大小      markeredgecolor: 点的边框色     markerfacecolor:点的填充色

    label: 文本标签

    解决中文乱码的代码:

    plt.rcParams['font.sans-serif'] = ['SimHei']
    
    plt.rcParams['axes.unicode_minus'] = False

     
     
  • 相关阅读:
    SecureCRT和乱码
    iphone“连接到icloud是出错”的可能原因
    Tcpdump usage examples
    leetcode-pascal triangle I&&II
    How To Capture Packets with TCPDUMP?
    leetcode-two sum
    Linux统计某文件夹下文件、文件夹的个数
    leetcode-Minimum Depth of Binary Tree
    leetcode-Construct Binary Tree from Preorder and Inorder Traversal
    patch 修改有问题的
  • 原文地址:https://www.cnblogs.com/ttrrpp/p/6678906.html
Copyright © 2011-2022 走看看