画一个简单的图形
#画一条 [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() # 显示图形,如果没有这行代码图像就不会显示
在一张图上绘制两个数据集
#在一张图上绘制两个数据集,函数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()
自定义图形的外观
#自定义图形的外观,展示多个数据集时,非常必要 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' 三角形 - '^' '''
使用子图
#使用子图,在一个窗口绘制多张图 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()函数,该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。 活跃区域代表当前子图所在绘图区域,绘图区域是按从左至右,从上至下的顺序编号。 '''
简单的散点图
# 简单的散点图,散点图是一堆离散点的集合 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()
彩色映射散点图
# 彩色映射散点图,根据数据的大小给每个点赋予不同的颜色和大小,并在图中添加一个颜色栏 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()
直方图
# 直方图 import matplotlib.pyplot as plt import numpy as np x = np.random.randn(1000) plt.hist(x, 50) # (数据,分组数) plt.show()
标题,标签和图例
# 添加标题,坐标轴标记和图例 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()
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 )
参数说明:
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")
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()
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