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()
- 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()
-
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()
运行结果为: