python 可视化工具-matplotlib

一、matplotlib介绍

python优秀的数据可视化第三方库

 matplotlib库的效果

官网:https://matplotlib.org/

当我们想画一个图但不知道怎么画出来的时候,就可以去这个网站上去找了,网站上罗列出来了各式各样的绘图形式

配置参数:

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 无缝对接,在数据分析的过程中增加一种数据可视化的辅助方法"""

"""其他的第三方绘图库,serborn,pyecharts"""

原文地址:https://www.cnblogs.com/foremostxl/p/11920837.html