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()  

  

运行结果为:
 
posted @ 2018-03-28 10:16  布尔先生  阅读(1616)  评论(0编辑  收藏  举报