一、matplotlib介绍
python优秀的数据可视化第三方库
matplotlib库的效果
当我们想画一个图但不知道怎么画出来的时候,就可以去这个网站上去找了,网站上罗列出来了各式各样的绘图形式
配置参数:
axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
font: 字体集(font family)、字体大小和样式设置
grid: 设置网格颜色和线性
legend: 设置图例和其中的文本的显示
line: 设置线条(颜色、线型、宽度等)和标记
patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
Python matplotlib的绘图风格效果展示大全
matplotlib的plot函数说明
pyplot的基础图标函数
引入模块:
import matplotlib.pyplot as plt import numpy as np import pandas as pd
折线图
plt.style.use('seaborn-whitegrid') """设置字体,用于显示中文""" plt.rcParams['font.sans-serif']=['FangSong'] """SimSun 宋体,Microsoft YaHei微软雅黑 YouYuan幼圆 FangSong仿宋""" plt.rcParams['font.size']=20 plt.rcParams['axes.unicode_minus']=False# 负号乱码 """折线图""" x = np.array([1,3,5,7,9]) y = np.array([2,4,5,8,10]) plt.plot(x,y) plt.xlabel('X') plt.ylabel('Y') plt.title('折线图') # plt.xlim(4,6)# 指定坐标轴的显示范围 # plt.ylim(3,7) # plt.xticks((0,1,2,3,4,5,6,7,8,9))# 指定坐标轴的显示刻度
散点图:
"""散点图""" """plot() 指定图样为点状实现""" x = np.array([1,3,5,7,9]) y = np.array([2,4,5,8,10]) plt.plot(x,y,'r.')
x = np.random.randint(0,100,10) y = np.random.randint(0,100,10) z = np.random.randint(0,100,10) plt.plot(x,y,'r.') plt.plot(x,z,'g^') plt.plot(y,z,'y+')
"""采用不同的线型""" a = np.arange(10) # plt.plot(a,a*1.5,'go-',a,a*2.5,'r>',a,a*3.5,'*',a,a*4.5,'b-.') plt.plot(a,a*1.5,'go-',a*2.5,'r>',a*3.5,'*',a*4.5,'b-.')# 同时传入多个数据集
"""scatter() 散点图""" # 绘图风格 plt.style.use('classic') x = np.random.random(100) y = np.random.random(100) colors=np.random.random(100) plt.scatter(x,y,c=colors,s=50) # colors 随机颜色 随机颜色效果显示不佳,和绘图风格有关系,s 控制点的大小
"""自定义生成随机颜色""" def random_colors(number):# number 生成随机颜色的个数 elem = '0123456789ABCDEF'# 从这个字符串中随机选取六个字符,组成随机颜色,形如 #78SFES colors=[] for i in range(number): colors.append('#'+''.join(np.random.choice(list(elem),6))) return colors
plt.style.use('seaborn-whitegrid') x = np.random.random(100) y = np.random.random(100) colors=random_colors(100) plt.scatter(x,y,c=colors,s=50)
柱形图:
GDP = np.arange(10000,20000,2000) citys=['北京','上海','广州','深圳','杭州'] plt.bar(citys,GDP,alpha=0.5,width=0.5,color='g')#alpha 透明度
"""多画板绘图 subplot()"""
多画板绘图:
a = np.linspace(0,10,100)
print(a)
plt.figure(figsize=(12,5))# 指定画板的尺寸 plt.subplot(1,2,1) # 生成一行两列的画板,指定第一个画板 plt.plot(a,np.sin(a),'r--') plt.subplot(1,2,2)# 生成一行两列的画板,指定第二个画板 plt.plot(a,np.cos(a),'b.')
"""subplots() """ a = np.linspace(0,10,100) fig,ax = plt.subplots(2,2,sharex=True,sharey=True,figsize=(12,5))# 生成两行两列的画板对象 share 共享坐标轴 ax[0,0].plot(a,np.sin(a)) ax[0,0].set_title('sin()') ax[0,1].plot(a,np.cos(a),'r') ax[0,1].set_title('cos()') ax[1,0].plot(a,np.sin(a)+1,'g') # ax[1,0].set_title('sin()+1') ax[1,0].text(4,0.5,'sin()+1')# 在指定位置显示文字 ax[1,1].plot(a,np.cos(a)+1,'y') ax[1,1].text(6,1,'cos()+1')# 在指定位置显示文字 坐标轴(6,1)
t = np.linspace(0,2*np.pi,100) x = 16*np.sin(t)**3 y = 13*np.cos(t)-5*np.cos(2*t)-2*np.cos(3*t)-np.cos(4*t) plt.plot(x,y,'r-')
频率分布直方图
"""频率分布直方图""" arr = [10,20,30,40,10,20,30,40,20,30] plt.figure(figsize=(12,3)) # 值方图 bins宽度,alpha透明度 plt.hist(arr,bins=15,alpha=0.5,color='r',density=False)# ,density=False 显示频数,True 频率 plt.xlabel('value') plt.ylabel('frequency') plt.xticks((10,20,30,40))# 指定刻度 plt.title('Histogram')
np.random.seed(0) arr = np.random.randint(0,10,size=(100,2)) #100 X 2 ,100行2列 plt.figure(figsize=(12,6)) plt.hist(arr,label=['第一列','第二列'],bins=25,alpha=0.7) plt.legend(loc='best')# 显示图例,并置于最佳位置
堆叠展示
plt.figure(figsize=(12,6)) plt.hist(arr,label=['第一列','第二列'],bins=25,alpha=0.7,stacked=True)# 堆叠展示 plt.legend(loc='best')# 显示图例,并置于最佳位置 """注意构造一个多列的数据集"""
"""利用小费数据集,统计不同性别,是否吸烟的分布""" tips = pd.read_csv('tips.csv',header=0) tips.head()
"""构造n X 2的数据结构""" tips['smoker2']=tips['smoker'].map({'No':0,'Yes':1}) male = tips.loc[tips['sex']=='Male','smoker2'] female = tips.loc[tips['sex']=='Female','smoker2'] d = pd.DataFrame({'male':male,'female':female}) # d.head() plt.figure(figsize=(8,4)) plt.hist(d.values,label=['male','female'],bins=10) plt.legend() plt.title('不同性别的吸烟者人数,0 不吸烟,1 吸烟') plt.xticks((0,1))
pandas 自带的绘图函数plot()
"""pandas 自带的绘图函数plot()""" d.plot(kind='hist',figsize=(12,5),subplots=True,xticks=(0,1),yticks=(10,30,50,70,90))# subplot =True 分开绘制 xticks 设置刻度显示
柱形图
"""柱形图""" d2 = tips.groupby(['sex','smoker'])['sex'].count() d2.plot(kind='bar',figsize=(12,5),width=0.3)
折线图
"""折线图""" d3 = np.random.randint(1,100,10) se = pd.Series(d3) se.plot(kind='line',figsize=(12,5))
饼状图
"""饼状图""" plt.figure(figsize=(5,5)) size = [30,30,25,15] labels=['阿里','腾讯','百度','今日头条'] explode = [0.2,0,0.1,0] #分离效果 plt.pie(size,autopct='%.2f%%',labels=labels,explode=explode)# autopct 控制数字的效果显示 ,explode 分离效果 plt.title('互联网巨头市场份额')
"""缺点:参数太多,绘图效率较低"""
"""优势,和numpy,pands 无缝对接,在数据分析的过程中增加一种数据可视化的辅助方法"""