zoukankan      html  css  js  c++  java
  • Matplotlib画图详解

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

     1.1图像无法显示中文的原因

    matplotlib中无中文库

    解决办法:每次编代码时加上

    每次编代码时都进行参数设置如下:
    
    #coding:utf-8
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    #有中文出现的情况,需要u'内容'
    

    2、 散点图详解

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 数据个数
    n = 1024
    # 均值为0, 方差为1的随机数
    x = np.random.normal(0, 1, n)
    y = np.random.normal(0, 1, n)
    
    # 计算颜色值
    color = np.arctan2(y, x)
    # 绘制散点图
    plt.scatter(x, y, s = 75, c = color, alpha = 0.5)
    # 设置坐标轴范围
    plt.xlim((-1.5, 1.5))
    plt.ylim((-1.5, 1.5))
    
    # 不显示坐标轴的值
    plt.xticks(())
    plt.yticks(())
    
    plt.show()
    

    scatter

    • x,y 形如shape(n,)的数组,可选值,
    • s 点的大小(也就是面积)默认20
    • c 点的颜色或颜色序列,默认蓝色。其它如c = 'r' (red); c = 'g' (green); c = 'k' (black) ; c = 'y'(yellow)
    • marker 形状,可选值,默认是圆
      基本
      如果需要其他的,可搜索matplotlib的官网,在官网中搜索markers,选择第一个结果。

       
      import numpy as np
      import matplotlib.pyplot as plt
      N = 1000
      x = np.random.randn(N)
      y = np.random.randn(N)
      color = ['r','y','k','g','m']
      plt.scatter(x, y,c=color,marker='>')
      plt.show()
      

        

      示例

    • alpha:标量,可选,默认值:无, 0(透明)和1(不透明)之间的alpha混合值

      import numpy as np
      import matplotlib.pyplot as plt
      N = 1000
      x = np.random.randn(N)
      y = np.random.randn(N)
      plt.scatter(x, y,alpha=0.5)
      plt.show()
      

        

      示例alpha = 0.5
    • edgecolors,顾名思义,边缘颜色或颜色序列,可选值,默认值:None

    • import numpy as np
      import matplotlib.pyplot as plt
      N = 1000
      x = np.random.randn(N)
      y = np.random.randn(N)
      plt.scatter(x, y,alpha=0.5,edgecolors= 'white') #edgecolors = 'w',亦可
      plt.show()
      

        

       
    • 与上图对比

    3、直方图

    直方图与条形图的区别:
    条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;
    直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
    由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
    条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据。
    示例代码:
    [python] view plain copy
    #概率分布直方图  
    #高斯分布  
    #均值为0  
    mean = 0  
    #标准差为1,反应数据集中还是分散的值  
    sigma = 1  
    x=mean+sigma*np.random.randn(10000)  
    fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))  
    #第二个参数是柱子宽一些还是窄一些,越大越窄越密  
    ax0.hist(x,40,normed=1,histtype='bar',facecolor='yellowgreen',alpha=0.75)  
    ##pdf概率分布图,一万个数落在某个区间内的数有多少个  
    ax0.set_title('pdf')  
    ax1.hist(x,20,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8)  
    #cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率  
    ax1.set_title("cdf")  
    fig.subplots_adjust(hspace=0.4)  
    plt.show()  
    

      

    运行结果为:
     
  • 相关阅读:
    洛谷 P1550 [USACO08OCT]Watering Hole G(最小生成树||超级源点)
    洛谷 P2168 [NOI2015]荷马史诗(Huffman树|编码)
    洛谷 P5658 括号树(DFS)
    用堆来求中位数
    c++各种输入输出(文件输入输出,标准输入输出,一些字符串)
    Hello,world!
    【NOIP2013】花匠
    【洛谷习题】最长上升子序列
    【NOIP2014】联合权值
    【NOIP2014】飞扬的小鸟
  • 原文地址:https://www.cnblogs.com/lvpengbo/p/8662230.html
Copyright © 2011-2022 走看看