赞
踩
大家好,小编来为大家解答以下问题,python数据可视化的工具库有哪些,Python数据可视化工具matplotlib,现在让我们一起来看看吧!
数据可视化可以使用d3js和echarts,doris
plotly和pyecharts
在python可以使用seaborn,matplotlib,plotnine可视化包
R语言的ggplot2包
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- %matplotlib inline
- plt.rcParams['font.sans-serif']=['SimHei','Songti SC','STFangsong']
- plt.rcParams['axes.unicode_minus']=False
- #用来正常显示负号
- import seaborn as sns
-
- df=pd.DataFrame({'variable':['gender','gender','age','age','income','income','income','income'],
- 'catogory':['Female','Male','1-24','25-24','55+','Lo','Lo-Med','Med','High'],
- 'value':[60,40,50,30,20,10,25,25,40],})
-
- df['variable']=pd.Categorical(df['variable'],categories=['gender','age','income'])
-
- df['category']=pd.Categorial(df['category'],categories=df['category'])
-
- #堆叠柱状图
- from plotnine import *
- (
- ggplot(df,aes(x='variable',y='value',fill='category'))+geom_col()
- )
- # 柱状图
- from plotnine import *
- (
- ggplot(df,aes(x='variable',y='value',fill='category'))+gem_col(stat='identity',position='dodge')
- )
-
-
-
创建一个图形对象,并设置图形对象的大小(可以想象成在白纸中添加一个图,并设置图的大小):plt.figure(figsize=(6,4))
在纸上的坐标系中绘制散点:plt.scatter(x=x, y=y)
设置x轴的标签label:plt.xlabel(‘x’)
设置y轴标签的label:plt.ylabel(‘y’)
设置图表的标题:plt.title(‘y = sin(x)’)
展示图标:plt.show()
plt.legend()
- x=np.linspace(-2*np.pi,2*np.pi,100)
- y=np.sin(x)
- array = numpy.linspace(start, end, num=num_points)
- #将在start和end之间生成一个统一的序列,共有num_points个元素。
import matplotlib.pyplot as plt
plt.figure(figsize=(8,6))
plt.scatter(x=x, y=y)
plt.xlabel(‘x’)
plt.ylabel(‘y’)
plt.title(‘y = sin(x)’)
plt.show()
【例子】绘制y = sin(x) 和 y=cos(x)的散点图:
- x=np.linspace()-2*np.pi,2+np.pi,100)
- y1=np.sin(x)
- y2=np.cos(x)
- #绘制第一个图
- fig1=plt.figure(figsize=
- (6,4),num='first')
- fig1.suptitle('y=sin(x)')
- plt.scatter(x=x,y=y1)
- plt.xlabel('x')
- plt.ylabel('y')
-
- #绘制第二个图
- fig2=plt.figure(figsize=(6,4),num='second')
- fig2.suptitle('y=cos(x)')
- plt.scatter(x=x,y=y2)
- plt.xlabel('x')
- plt.ylabel('y')
- x=np.linspace(-10,10,100)
- y=2*x+1+np.random.randn(100)
- df=pd.DataFrame({'x':x,'y':y})
-
- #使用matplotlib绘制带有拟合直线效果的散点图
- func=np.polyfit(x,y,1)#拟合直线
- poly=np.poly1d(func)#设置拟合直线
- y_pred=poly(x)#预测
- plt.scatter(x,y)#绘制点图
- plt.plot(x.y_pred)#绘制拟合直线图
- plt.xlabel('x')
- plt.ylabel('y')
- plt.show()
-
- #使用seaborn绘制带有拟合直线效果的散点图
- sns.lmplot("x","y",data=df)
-
- from plotnine improt *
- from plotnine.data import *
- mpg.head()
mpg数据集记录了美国1999年和2008年部分汽车的制造厂商,型号,类别,驱动程序和耗油量python简单新年祝福代码。
- # 绘制汽车在不同驱动系统下,发动机排量与耗油量的关系
- p1=(
- ggplot(mpg,aes(x=''displ),y='hwy',color='drv'))+geom_point()#绘制散点图图层
- +geom_smooth(method='lm')#绘制平滑线图层
- +labs(x='displacement',y='horsepower') # 绘制x、y标签图层
-
- )
- print(p1)
Plotnine没有实现除了直角坐标以外的坐标体系
Matplotlib具有ggplot风格,可以通过设置ggplot风格绘制具有ggplot风格的图表。plt.style.use("ggplot") #风格使用ggplot
Matplotlib 图表的组成元素包括: 图形 (figure)、坐标图形 (axes)、图名 (title)、图例 (legend)、 主要刻度 (major tick)、次要刻度 (minor tick)、主要刻度标签(major tick label)、次要刻度标签 (minor tick label)、 Y轴名 (Y axis label)、X轴名 ( X axis label)、边框图 (line)、数据标记 (markers)、网格 (grid) 线等
Mayplotlib绘图元素包括:基本绘图类型与容器绘图类型
(1)基本绘图类型(graphic primitives):点 (marker)、线 (line)、文本 (text)、图例 (legend)、网格线 (grid)、 标题 (title)、图片 (image) 等;
(2)容器绘图类型(containers):
Figure:最重要的元素,代表整个图像,所有的其他元素都是绘制在其上(如果有多个子图,子图也绘制在figure上)。Figure 对象包含一些特殊的 artist 对象,如图名 (title)、图例 (legend)。
Axes:第二重要的元素,代表 subplot(子图),数据都是显示在这个区域。一个Figure至少含有一个Axes对象,当绘制多个子图时
Axis:代表坐标轴对象,本质是一种带装饰的 spines,一般分为 xaxis 和 yaxis,Axis对象主要用于控制数据轴上的刻度位置和显示数值。
Spines:表示数据显示区域的边界,可以显示或不显示。
Artist:表示任何显示在 Figure 上的元素,Artist 是很通用的概念,几乎任何需要绘制的元素都可以当成是 Artist,但是一个 Artist 只能存在于一个 Axes 之上。
- plt.figure(figsize=(6,3), dpi=75)#设置图表的大小figsize与分辨率dpi
- plt.title('这是一个标题')
- plt.xlabel("这是x轴标签")/plt.ylabel("这是y轴标签")
- plt.axis(xmin=0, xmax=1, ymin=0.5)#设置x轴和y轴的显示范围 |plt.xlim(0,1)/plt.ylim(0,1)
- plt.xticks(labels=['A', 'B', 'C', 'D'])/plt.yticks(list(np.arange(11))#设置x轴和y轴的刻度数值
- grid()#设置网格线
- plt.grid(b=True, which='both', axis='y')
- # b: 是否显示网格线 True/None;
- # which: 网格线显示的尺度。字符串,可选参数,取值范围为{'major', 'minor', 'both'},
- #默认为'both'。'major'为主刻度、'minor'为次刻度。
- # axis: 选择网格线显示的轴。字符串,可选参数,取值范围为{'both', 'x', 'y'},默认为'both'`。
- # | | legend() | 设置图表的图例 | plt.legend("这是一个图例", loc='best')
- # loc表示图例的位置,可选:0-'best', 1-'upper right',2-'upper left',3-'lower left',4-'lower right',5-'right',6-'center left',7-'center right',
- # 8-'lower center',9-'upper center',10-'center' |
-
创建一个figure,figure的大小figsize为(12,10);
在figure中创建两个Axes子图;
在每个Axes子图中分别绘制y=sin(x)和y=cos(x)图像,并添加title、xlabel、ylabel、axis、grid、和legend
- x=np.linspace(-2*np.pi,2*np.pi,100)
- y1=np.sin(x)
- y2=np.cos(x)
- #开始绘图
- fig=plt.figure(figsize=(16,6))
- ax1=fig.add_axes([0.1,0.1,0.4,0.8])
-
- plt.scatter(x=x, y=y1, label=r"$y=sin(x)$") # 在axes1中绘制y=sin(x)散点图, label是为了legend能够知道是哪个绘图的图例
- plt.title("y = sin(x)") # 在axes1设置标题
- plt.xlabel("x") # 在axes1中设置x标签
- plt.ylabel("y") # 在axes1中设置y标签
- plt.axis(xmin=-2*np.pi, xmax=2*np.pi, ymin=-1, ymax=1) # 在axes1中设置x轴和y轴显示范围
- plt.xticks(
- ticks=[-2*np.pi, -3/2*np.pi, -np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi, 3/2*np.pi, 2*np.pi],
- labels=[r'$-2 \pi$', r'$-\frac{3 \pi}{2}$', r'$-\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3 \pi}{2}$', r'$2\pi$']
- ) # 在axes1中设置x轴刻度的值,ticks代表在哪个位置修改,labels代表修改的具体值是多少
- plt.grid(b=True, which='both') # 在axes1中设置设置网格线
- plt.legend(loc=1)
- ax2 = fig.add_axes([0.6,0.1,0.4,0.8]) # [left, bottom, width, height], 它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度
- plt.scatter(x=x, y=y2, label=r"$y=cos(x)$") # 在axes2中绘制y=cos(x)散点图,label是为了legend能够知道是哪个绘图的图例
- plt.title("y = cos(x)") # 在axes2设置标题
- plt.xlabel("x") # 在axes2中设置x轴标签
- plt.ylabel("y") # 在axes2中设置y标签
- plt.axis(xmin=-2*np.pi, xmax=2*np.pi, ymin=-1, ymax=1) # 在axes2中设置x轴和y轴显示范围
- plt.xticks(
- ticks=[-2*np.pi, -3/2*np.pi, -np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi, 3/2*np.pi, 2*np.pi],
- labels=[r'$-2 \pi$', r'$-\frac{3 \pi}{2}$', r'$-\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3 \pi}{2}$', r'$2\pi$']
- ) # 在axes2中设置x轴刻度的值,ticks代表在哪个位置修改,labels代表修改的具体值是多少
- plt.grid(b=True, which='both') # 在axes2中设置设置网格线
- plt.legend(loc=1) # 在axes2中设置图例
-
- plt.show()
Plotnine中的图层可以分为:必备图层和可选图层
(1)必备图层:ggplot()图层与geom_xxx()/stat_xxx()图层
ggplot()图层 底层绘图函数
ggplot(data, aes(x=‘col_x’, y=‘y_value’, fill=‘col_class’))
设置变量的映射aes(),用来表示x和y,还可以在aes()内控制颜色color、大小size和形状shape
geom_xxx()图层:几何对象
散点图geom_point()、柱状图geom_bar()、折线图geom_line()、直方图geom_histogram()
stat_xxx()图层。根据图层函数输入的变量个数和输入变量的数据类型(涉及复杂的统计变换)
- x = np.linspace(-2*np.pi, 2*np.pi, 100)
- y = np.sin(x)
- y_label = np.random.choice(['1','2','3'], 100)
- data = pd.DataFrame({'x':x, 'y':y, 'label':y_label})
- # 绘制散点图geom_point()
- p1 = (
- ggplot(data, aes(x='x', y='y', fill='y_label', size='y', shape='y_label'))+
- geom_point()
- )
- print(p1)
(2)可选图层
scale_xxx()、facet_xxx()、guides_xxx()、coord_xxx()以及theme()
- p1=(
- ggplot(mpg,aes(x='displ', y='hwy', color='drv', shape='drv'))
- + geom_point() # 绘制散点图图层
- + labs(x='displacement', y='horsepower') # 绘制x、y标签图层
- + scale_shape_manual(values=('o', 's', '*')) # 添加shape映射美化
- )
直角坐标系的类型,分面图层
- p1=(ggplot(mpg,aes(x='displ', y='hwy', color='drv') +geom_point()
- + labs(x='displacement', y='horsepower') # 绘制x、y标签图层
- + facet_grid('.~ class', labeller='label_value') # 按照车辆类型分面))
数据可视化的图表分为以下类别:
(1)类别型图表:
类别型图表一般表现为:X类别下Y数值之间的比较,因此类别型图表往往包括:X为类别型数据、Y为数值型数据。类别型图表常常有:柱状图、横向柱状图(条形图)、堆叠柱状图、极坐标的柱状图、词云、雷达图、桑基图等等。
(2)关系型图表:
关系型图表一般表现为:X数值与Y数值之间的关系,如:是否是线性关系、是否有正向相关关系等等。一般来说,关系可以分为:数值型关系、层次型关系和网络型关系。
(3)数据分布型图表:
分布这个词在概率论和数理统计中出现,分布常常指数据以及出现的频率,常见的图表有:频次直方图、频率直方图、核密度图、箱线图、提琴图等等。
(4)时间序列型图表:
时间序列型图表主要描述了数据沿着之间变化而变化的规律,一般来说横轴是时间,纵轴是数值或者类别型数据。常见的图表有折线图、日历图、甘特图等等。
(5)空间分布型图表:
空间分布顾名思义,主要描述了某个数值型/类别型数据随着空间位置变化的规律,如:地图散点图、地图气泡图、地图热力图等等。
下面,我们来详细学习每一种图表的绘制过程:
- x = np![在这里插入图片描述](https://img-blog.csdnimg.cn/6c1b90ee2c574a6fa2fc65d5e89c330f.png)
- .array([4, 8, 10, 12, 25, 32, 43, 58, 63, 69, 79])
- y = np.array([20, 33, 50, 56, 42, 31, 33, 46, 65, 75, 78])
-
- figure1 = plt.figure(figsize=(8, 6))
- # coeff 为系数,poly_fit 拟合函数
- # 1. 先拟合获取系数
- coeff_1 = np.polyfit(x, y, 1)#在这里修改你和的阶数
- print("一阶拟合系数为:", coeff_1)
- # 2. 根据系数得到多项式
- poly_fit_1 = np.poly1d(coeff_1)
- print("一阶多项式为:", poly_fit_1)
- # 3. 输入变量(单个值或者变量数组),得到拟合结果(数组)
- y_fit_1 = poly_fit_1(x)
- print("拟合得到的数据为L", y_fit_1)
- # 4. 根据结果作图
- plt.plot(x, y_fit_1, 'green',label="一阶拟合")
- # 5. 根据原始数据以及拟合数据得到拟合优度
- rr1 = goodness_of_fit(y_fit_1, y)
- print("拟合优度为%.5f" % rr1)
np.ployfit使用最小二乘法进行多项式拟合
numpy.polyfit(x,y,deg,rcond = None,full = False,w = None,cov = False )
参数:
x: 类数组,形状(M,),表示M个采样点的x坐标
y: 类似array_,形状为(M,)或(M,K), 表示采样点的y坐标。通过传递每列包含一个数据集的2D数组,可以一次拟合多个共享相同x坐标的采样点数据集
deg: 度:整数, 表示拟合多项式的度
cov: cov:布尔值,可选。返回估算值和估算值的协方差矩阵。如果full为True,则不返回cov
np.poly1d
如果f(x) = 2x2 +x +1
a= np.array([2,1,1])
p = np.poly1d(a)
numpy.poly1d(c_or_r,r = False,变量= None )
参数:
c_or_r: 数组array,代表多项式的系数,以幂次递减,或者如果第二个参数的值为True,则为多项式的根(多项式求值为0的值)。
r bool(可选): 如果为True,则c_or_r指定多项式的根。默认值为False。
可变str(可选): 将打印p时使用的变量从x更改为variable 。
返回值: 相应的多项式
多项式对象的deriv( )和integ( )方法分别用于计算多项式函数的微分和积分p.deriv()
#微分p.integ()
#积分
多项式函数的根可以用roots( )计算:np.roots(p)
除了使用多项式对象外,还可以直接使用Numpy提供的多项式函数对多项式系数的数组进行运算,主要函数包括:np.poly, np.polyadd, np.polydiv, np.polyint, np.polysub, np.poly1d, np.polyder, np.polyfit, np.polymul, np.polyval等。
1、np.poly1d()此函数有两个参数:
参数1:为一个数组,若没有参数2,则生成一个多项式,例如:
p = np.poly1d([2,3,5,7])
print§ ==>>2x3 + 3x2 + 5x + 7 数组中的数值为coefficient(系数),从后往前 0,1,2.。。为位置书的次数
参数2:若参数2为True,则表示把数组中的值作为根,然后反推多项式,例如:
q = np.poly1d([2,3,5],True)
print(q) ===>>(x - 2)(x - 3)(x - 5) = x3 - 10x2 + 31x -30
参数3:variable=‘z’表示改变未知数的字母,例如:
q = np.poly1d([2,3,5],True,varibale = ‘z’)
print(q) ===>>(z - 2)(z - 3)(z - 5) = z3 - 10z2 + 31z -30
2、多项式poly1d()的方法
a. p(0.5)表示当x = 0.5时,多项式的值为多少
b. p.r表示当多项式为 0 时,此等式的根
c. p.c表示生成多项式的系数数组
d. p.order表示返回最高项的次方数
e. p[1]表示返回第一项的系数
f. 多项式支持实数的四则运算
3、 其他函数
a. deriv([m])表示求导,参数m表示求几次导数
b. integ([m,k])表示积分,参数m表示积几次分,k表示积分后的常数项的值
seaborn主要通过两个函数来展示通过回归得到的线性关系,regplot()和lmplot()。
- sns.regplot(x='tital_bill',y='tip',data=tips)
- sns.lmplot(x="total_bill", y="tip", data=tips);
-
他们之间最主要的区别在于
regplot()中的x, y参数接受多种数据类型,包括numpy数组、pandas序列(Series),或者将pandas DataFrame传递给data参数。
lmplot()的data参数是不能为空的,同时x和y参数必须以字符串形式指定
部分引用:
https://www.jianshu.com/p/f83d61952983
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。