[Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

前一篇文章讲述了数据预处理、Jieba分词和文本聚类知识,这篇文章主要介绍Matplotlib和Pandas扩展包绘图的基础用法,同时引入Echarts技术,该技术主要应用于网站可视化展示中。本文内容以实例为主,给读者最直观的图形感受。两万字基础文章,希望对您有所帮助。

文章目录

  • 一.Matplotlib可视化分析
    • 1.绘制曲线图
    • 2.绘制散点图
    • 3.绘制柱状图
    • 4.绘制饼图
    • 5.绘制3D图形
  • 二.Pandas读取文件可视化分析
    • 1.绘制折线对比图
    • 2.绘制柱状图和直方图
    • 3.绘制箱图
  • 三.ECharts可视化技术初识
    • 1.ECharts
    • 2.简单示例
  • 四.总结

下载地址:

  • https://github.com/eastmountyxz/Python-zero2one

前文赏析:

第一部分 基础语法

  • [Python从零到壹] 一.为什么我们要学Python及基础语法详解
  • [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
  • [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

第二部分 网络爬虫

  • [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
  • [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
  • [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
  • [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
  • [Python从零到壹] 八.数据库之MySQL基础知识及操作万字详解
  • [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
  • [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)

第三部分 数据分析和机器学习

  • [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
  • [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)
  • [Python从零到壹] 十三.机器学习之聚类分析万字总结全网首发(K-Means、BIRCH、层次聚类、树状聚类)
  • [Python从零到壹] 十四.机器学习之分类算法三万字总结全网首发(决策树、KNN、SVM、分类算法对比)
  • [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
  • [Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
  • [Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解

第四部分 Python图像处理

第五部分 NLP与文本挖掘

第六部分 人工智能入门知识

第七部分 图像识别与目标检测

第八部分 网络攻防与AI安全

第九部分 知识图谱构建实战

第十部分 人工智能高级案例

作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。


可视化技术是将数据转换成图形或图像呈现在屏幕上,再进行视觉交互。在数据分析中,可视化是非常重要的环节,它通过呈现图形图像直观的体现数据或算法的好坏,给读者最直观的视觉信息。

一.Matplotlib可视化分析

基础用法参考前文:

  • [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)

在这里插入图片描述

在这里插入图片描述

1.绘制曲线图

首先简单地绘制三条直线,其斜率分别为0.5、1.5和3.0,完整代码如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np  
import matplotlib.pyplot as plt  
X = np.arange(0,4)
print(X)
plt.plot(X, X*0.5, label="y=x*0.5")
plt.plot(X, X*1.5, label="y=x*1.5")
plt.plot(X, X*3.0, label="y=x*3.0")
plt.legend()
plt.show() 

输出如图所示,其中X为数组[0,1,2,3],X×0.5表示数组元素都乘以0.5,其结果为:[0,0.5,1.0,1.5],同理X×1.5结果为:[0.0,1.5,3.0,4.5]。

在这里插入图片描述

  • import matplotlib.pyplot as plt
    表示调用Matplotlib子类pyplot绘图,并as重命名为plt,方便代码调用。
  • plt.plot(X, X0.5, label="y=x0.5")
    表示调用plot()绘图,参数分别为X坐标、Y坐标和标签label。
  • plt.legend()
    显示右上角的图标,每条线对应label的含义。
  • plt.show()
    最后调用该函数显示绘制好的图形。

下面将上图绘制成不同类型的线条。核心修改代码如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np  
import matplotlib.pyplot as pltX = np.arange(0,4)
print(X)
plt.plot(X, X*0.5, "r-", label="y=x*0.5")
plt.plot(X, X*1.5, "y--", label="y=x*1.5")
plt.plot(X, X*3.0, "g:", label="y=x*3.0")
plt.legend()
plt.show() 

其中,"r-"表示红色直线,"y–"表示黄色虚线,"g:"表示绿色点线,输出如图所示。

在这里插入图片描述

但是上图绘制的图形有点细,怎么解决呢?设置参数linewidth=2.0即可,参考下面的代码,Matplotlib绘制sin函数和cos函数曲线。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np  
import matplotlib.pyplot as pltX = np.linspace(-np.pi,np.pi,256,endpoint=True)
C = np.cos(X)
S = np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.0, linestyle="-", label="$sin(x)$")
plt.plot(X, S, color="red", linewidth=2.0, linestyle="--", label="$cos(x)$")
plt.legend()
plt.show() 

代码 np.linspace(-np.pi,np.pi,256,endpoint=True) 表示输出负π(-np.pi)到正π(np.pi)范围,然后调用numpy库的cos()函数和sin()函数计算C值和S值,最后调用plt.plot()绘制直线图,plot()函数中的参数含义如下:

  • X:横坐标或X坐标值
  • C\S:纵坐标或Y坐标值,设置为C值和S值
  • color:直线的颜色,blue表示蓝色、red报表时红色,可以简写如"r"
  • linewidth:绘制线条的粗细程度
  • linestyle:设置线条的款式,-表示直线、–表示虚线、:表示点线、-.表示点划线
  • label:设置绘制曲线的标签

输出如图所示。

在这里插入图片描述

最后,感兴趣的同学可以绘制自己喜欢的曲线,下面代码是绘制浪漫的心形函数(笛卡尔曲线)。Python可视化分析可以应用于更多的曲线绘制,比如在数据拟合、回归分析、数学分析等领域绘制曲线。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-8 , 8, 1024)
y1 = 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2)
y2 = 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2) 
plt.plot(x, y1, color = 'r')
plt.plot(x, y2, color = 'r')
plt.show()

输出如图所示:

在这里插入图片描述


2.绘制散点图

Python调用Matplotlib绘制散点图有两种方法,一种是调用scatter()函数实现,另一种方法是调用plot()函数实现,这里主要讲述scatter()函数绘制散点图的方法。从给出的一堆随机点(包含x、y坐标)中调用scatter()绘制散点图,代码如下。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt#构造数据
x = np.random.randn(200)
y = np.random.randn(200)
print(x[:10])
print(y[:10])#绘制散点图
plt.scatter(x, y)
plt.show()

numpy中有一些用来产生随机数的常用函数,randn()和rand()就属于其中。

  • numpy.random.randn(d0, d1, …, dn):从标准正态分布中返回一个或多个样本值。
  • numpy.random.rand(d0, d1, …, dn):产生随机样本,并且数字位于[0, 1]中。

代码中产生了200个服从标准正态分布的随机样本点,对应x数组和y数组,前10行输出如下:

[-0.94086693 -0.92910167 -0.83885859 -0.50927277  2.12230463  0.45695791-0.59766636 -0.62862962  0.28245908  1.46415206]
[ 0.43828148  0.76547797  1.18670217  0.31996158  0.00350372  1.026205663.04573837 -0.59712547  0.45061506 -1.63996253]

产生的200个随机散点图如图所示。

在这里插入图片描述

为了区分点,scatter()提供了参数设置不同点的颜色及大小,其中s参数指定大小,c参数指定颜色,随机为这200个点分配不同的大小及颜色,代码如下。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt#构造数据
x = np.random.randn(200)
y = np.random.randn(200)
print(x[:10])
print(y[:10])
size = 50*np.random.randn(200) 
colors = np.random.rand(200) #绘制散点图
plt.scatter(x, y, s=size, c=colors)
plt.show()

输出如图所示。

在这里插入图片描述

在进行聚类、分类分析中,通常会将不同类型的数据标识成一组(类标),而对应的可视化操作也是将散点图绘制成不同的颜色或形状。下面代码即是分成三种不同类型的点集。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt#随机产生90个二维数组
x = np.random.rand(90,2)
print(x)#numpy中ones()用来构造全一矩阵
label = list(np.ones(40))+list(2*np.ones(30))+list(3*np.ones(20)) #类标label为1、2、3
label = np.array(label)
print(label)
print(type(label))idx1 = np.where(label == 1)
idx2 = np.where(label == 2)
idx3 = np.where(label == 3)#绘图 参数:x值、y值、点样式、颜色、类标、粗细
p1 = plt.scatter(x[idx1,0], x[idx1,1], marker = 'x', color = 'r', label='1', s = 40)
p2 = plt.scatter(x[idx2,0], x[idx2,1], marker = '+', color = 'b', label='2', s = 30)
p3 = plt.scatter(x[idx3,0], x[idx3,1], marker = 'o', color = 'c', label='3', s = 20)
plt.legend(loc = 'upper right')
plt.show()

输出如图所示。

在这里插入图片描述

代码中调用np.random.rand(90,2)函数随机成才90个二维数组,分别对应90个点,其中x[indx1,0]表示获取第一维坐标作x轴,x[indx1,1]表示获取第二维坐标作y轴。然后调用np.ones()函数构造全是1的矩阵,生成的变量label对应90个点的类标,前40个点类标为1、中间30个点类标为2、最后20个点类标为3。最后调用plt.scatter()函数绘制散点图,即:

  • plt.scatter(x[idx1,0], x[idx1,1], marker = ‘x’, color = ‘r’, label=‘1’, s = 40)

代码表示绘制类标(label)为1的散点,其他参数包括x值和y值,设置点样式(marker= ‘x’)为叉形,设置颜色(color = ‘r’)为红色,粗细为40。

这部分主要讲述了scatter()函数绘制散点图,后面的聚类和分类分析中也会讲解另一种方法plot()绘制散点图。


3.绘制柱状图

柱状图主要用于直观的对比统计数据,是常用的一种数学统计图形。下列代码是产生四个用户的随机月消费数据,然后调用bar()函数绘制图形。代码如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import numpy as np
import matplotlib.pyplot as plt#随机产生4个整数(0到100之间)
data = np.random.randint(0,100,4) 
print(data)ind = np.arange(4)  #四个用户
print(ind)
width = 0.35        #设置宽度      
x = ['UserA', 'UserB', 'UserC', 'UserD']plt.bar(ind, data, width, color='green', label='Data')
plt.xlabel("Username")
plt.ylabel("Consumption")
plt.title("Compare four user monthly consumption data")
plt.legend()
plt.xticks(ind+width/2, x, rotation=40) #旋转40度
plt.show()

核心代码详解如下:

  • np.random.randint(0,100,4)
    随机生成0到100之间的4个随机数,输出为[3 66 98 42]。
  • plt.bar(ind, data, width, color=‘green’, label=‘Data’)
    调用bar()函数绘制柱状图,其中ind表示用户的序号,0到3共四个用户;data表示柱状图对应的高度或值;width设置柱状图之间的间隔宽度,即0.35;最后设置颜色类标。
  • plt.xticks(ind+width/2, x, rotation=40)
    设置X轴坐标值的位置和旋转度数,ind+width/2表示间隔中间的位置显示标签,显示的值为四个用户名[UserA, UserB, UserC, UserD],并且旋转40度。

其他设置标题、X轴、Y轴前面已经叙述,这里不再解释。最后输出如图所示。

在这里插入图片描述

下图是柱状图的扩展版,它是对学习、旅游、看剧、聊天四个选项男女比例的对比。采用np.array()定义数组,然后根据男女比例进行绘图。完整代码如下:

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import matplotlib.pyplot as plt
import numpy as npnum = np.array([1342, 6092, 4237, 8219])   #数量
ratio = np.array([0.75, 0.76, 0.72, 0.75]) #男性占比
men = num * ratio
women = num * (1-ratio)
x = ['学习',u'旅游',u'看剧',u'聊天']plt.rc('font', family='SimHei', size=13)   #中文字体显示width = 0.5
idx = np.arange(4)
plt.bar(idx, men, width, color='red', label='男性用户')
plt.bar(idx, women, width, bottom=men, color='yellow', label='女性用户')
plt.xticks(idx+width/2, x, rotation=40)
plt.legend()
plt.show()

输出如图所示。

在这里插入图片描述


4.绘制饼图

绘制饼图主要调用plt.pie()函数实现,这里仅举个简单示例供大家学习,输出下图所示。

在这里插入图片描述

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import matplotlib.pyplot as plt#每一块占得比例,总和为100
mm = [45, 30, 25]             
n = mm[0]+mm[1]+mm[2]
a = (mm[0]*1.0*100/n)
b = (mm[1]*1.0*100/n)
c = (mm[2]*1.0*100/n)
fracs = [a, b, c]
print(a, b, c, n)#离开整体的距离
explode=(0, 0, 0.08)
labels = 'A', 'B', 'C'#绘制图形
plt.pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%',shadow=True, startangle=90, colors = ("c", "r", "y"))
plt.show()

首先计算a、b、c所占mm的比例,输出值为[45.0, 30.0, 25.0]。接下来:

  • 调用plt.pie()绘制饼状图,参数fracs表示占比;
  • explode表示离开整体圆形的距离,比如C离开了0.08的距离;
  • labels表示类标;autopct=’%1.1f%%'表示显示的数据保留一位小数;
  • shadow=True表示图形存在阴影;
  • startangle表示开始的角度,默认值为0。

从此处开始按逆时针方向依次展开显示A、B、C三个板块,颜色依次为青色、红色、黄色。


5.绘制3D图形

Python调用Axes3D子类实现绘制3D图形,绘制3D坐标代码如下:

import matplotlib.pyplot as plt            #绘图用的模块
from mpl_toolkits.mplot3d import Axes3D    #绘制3D坐标的函数
fig1=plt.figure()                          #创建一个绘图对象
ax=Axes3D(fig1)                           #用这个绘图对象创建一个Axes对象
plt.show()                                #显示模块中所有绘图对象

绘制的3D坐标如图所示。

在这里插入图片描述

更多的3D绘图方法请读者下来研究,因为本书主要以数据2D图形可视化为主,下面的代码是一个简单绘制3D图形的实例,包含详细注释。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D  # 绘制3D坐标的函数fig = plt.figure()               #创建一个绘图对象
ax = Axes3D(fig)                 #用这个绘图对象创建一个Axes对象
X = np.arange(-2, 2, 0.25)       #X轴-2到2之间
Y = np.arange(-2, 2, 0.25)       #Y轴-2到2之间
print(Y)X, Y = np.meshgrid(X, Y)         #用两个坐标轴上的点在平面上画格
R = np.sqrt(X**2 + Y**2)         #X和Y的平方和开根号
Z = np.sin(R)                    #计算sin函数赋值为Z坐标#具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')#给三个坐标轴注明
ax.set_xlabel('x label', color='r')  
ax.set_ylabel('y label', color='g')  
ax.set_zlabel('z label', color='b')plt.show()

输出如图所示。

在这里插入图片描述


二.Pandas读取文件可视化分析

本小节主要讲述Pandas读取文件进行可视化分析的常用操作。假设存在2002年到2014年北京、上海、贵阳、武汉、长沙五个城市的商品房房价信息(虚构数据),如表所示,并存储在test16.csv文件中。作者将结合Pandas扩展包对其数据集进行可视化讲解。

在这里插入图片描述

year	Beijing	Shanghai	Guiyang	Wuhan	Changsha
2002	4764	4134	1643	1928	1802
2003	4737	5118	1949	2072	2040
2004	5020.93	5855	1801.68	2516.32	2039.09
2005	6788.09	6842	2168.9	3061.77	2313.73
2006	8279.51	7196	2372.66	3689.64	2644.15
2007	11553.26	8361	2901.63	4664.03	3304.74
2008	12418	8195	3149	4781	3288
2009	13799	12840	3762	5329	3648
2010	17782	14464	4410	5746	4418
2011	16851.95	14603.24	5069.52	7192.9	5862.39
2012	17021.63	14061.37	4846.14	7344.05	6100.87
2013	18553	16420	5025	7717	6292
2014	18833	16787	5608	7951	6116

1.绘制折线对比图

绘制折线对比图代码见源文件。

# -*- coding: utf-8 -*- 
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as plt#读取文件并显示前6行数据 index_col用作行索引的列名
data = pd.read_csv("data.csv",index_col='year')   
print(data.shape)  
print(data.head(6))  plt.rcParams['font.sans-serif'] = ['simHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   #用来正常显示负号data.plot()
plt.savefig(u'test.png', dpi=500)
plt.show()

输出如图所示,最上面蓝线为“北京”的房价,接着绿线为“上海”的房价,接下来的三条线从上往下依次为青色线“武汉”房价、紫色线“长沙”房价、“红色”线长沙房价。

在这里插入图片描述

同时,输出的前六行数据如下:

>>> 
(13, 5)Beijing  Shanghai  Guiyang    Wuhan  Changsha
year                                                
2002   4764.00    4134.0  1643.00  1928.00   1802.00
2003   4737.00    5118.0  1949.00  2072.00   2040.00
2004   5020.93    5855.0  1801.68  2516.32   2039.09
2005   6788.09    6842.0  2168.90  3061.77   2313.73
2006   8279.51    7196.0  2372.66  3689.64   2644.15
2007  11553.26    8361.0  2901.63  4664.03   3304.74
>>> 

重点知识是:

  1. 调用pandas扩展包的read_csv()函数读取数据并绘制图形,其中读取数据时的index_col参数表示获取了年份(year)索引,按照年份绘图。
  2. plt.rcParams代码用于设置中文字符和显示负号。
  3. savefig(‘test16.png’, dpi=500)函数将在本地存储一张“test.png”的图片,像素为500。

如果读者想仅仅获取某一个城市的房价,比如“贵阳”,再绘制成折线图,如何实现呢?核心代码如下:

  • data = pd.read_csv(“test16.csv”,index_col=‘year’)
    读取data.csv文件数据,并且获取其索引为年份(year),即第一列数据,并将读取的结果赋值给data变量。
  • gy = data[‘Guiyang’]
    获取data数组中“Guiyang”的一列数据,即贵阳的房价数据,并赋值给gy变量。获取数据的两种表示方法:data[‘Guiyang’]或data.Guiyang。
# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_csv("data.csv",index_col='year')    
plt.rcParams['font.sans-serif'] = ['simHei']
plt.rcParams['axes.unicode_minus'] = False#获取贵阳数据集并绘图 
gy = data['Guiyang']  
print(gy, type(gy))
gy.plot()
data['Beijing'].plot(color='r')
plt.show()  

下图为贵阳市商品房价的折线增长图。

在这里插入图片描述


2.绘制柱状图和直方图

下面针对贵阳的商品房房价数据集进行柱状图绘制,调用Pandas提供的plot()函数。plot()默认是生成曲线图,可以通过kind参数生成其他类型的图形,可选值为:line(折线图)、bar(条图)、barh(横向柱状图)、kde(密度图)、density(密度图)、scatter(散点图)。完整代码如下:

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_csv("data.csv", index_col='year')    
plt.rcParams['font.sans-serif'] = ['simHei']
plt.rcParams['axes.unicode_minus'] = False #在图表中创建子图 4个子图
p1 = plt.subplot(221)   
data['Beijing'].plot(color='r', kind='bar')
plt.sca(p1)p2 = plt.subplot(222)   
data['Guiyang'].plot(color='y', kind='barh')
plt.sca(p2)p3 = plt.subplot(223)
data.Shanghai.plot(kind='line')
plt.sca(p3)p4 = plt.subplot(224)   
data['Changsha'].plot(kind='kde')
plt.sca(p4)
plt.show()

输出如下图所示,需要注意采用plt.subplot(221)函数增加子图,22表示共4(2*2)个子图,1表示第一张图;plt.subplot(223)函数表示绘制第三个子图。代码plt.sca(p3)用于增加子图,最后调用plt.show()函数显示。

Pandas的DataFrame提供的plot()函数设置参数绘制不同类型图形,第一张为北京市房价数据对应的柱状图(bar),第二张为贵阳市的横向柱状图(barh),第三张显示上海市房价数据对应的折线图,第四张为长沙市的概率密度图。

在这里插入图片描述

如果想生成累积柱状图,则只需指定stacked=True即可,核心代码:

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_csv("data.csv", index_col='year')    
data.plot(kind='bar', stacked=True)
plt.show()

输出如图所示。从图中可以对比五个城市2002年到2014年的商品房价信息,并采用不同颜色进行区分。

在这里插入图片描述

如果想对比不同子图,可以利用参数subplots绘制DataFrame中每个序列对应的子图。核心代码如下:

data.plot(color='y', kind='barh', subplots=True)
plt.show()

输出如图所示,对比五个城市的房价信息。

在这里插入图片描述

下面简单讲解绘制直方图。你或许会疑惑直方图和柱状图有什么区别呢?

直方图是用来描述等距数据或等比数据,直观上,直方图矩形之间是衔接在一起的,表示数据间的数学关系;柱形图则留有空隙,表示仅作为两个或多个不同的类,而不具有数学相关性质。直方图的Y轴是频率,柱形图的Y轴可以是数值。

直方图是一种展示数据频数或频率的特殊柱状图,y 轴是频数或频率的度量,既可以是频数(计数)也可以是频率(占比)。下面这段代码是绘制随机产生的1000个点的直方图。

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata = np.random.normal(5.0, 3.0, 1000)  # mean=5.0 rms=3.0
pData = pd.DataFrame(data)
print(pData)
print(type(pData))
p1 = pData.hist(histtype='stepfilled',bins=30,normed=True)
plt.show() 

这里调用pd.DataFrame(data)函数将numpy随机产生的1000个点数组转换为DataFrame类型,然后再调用hist()函数绘制直方图。其中,参数histtype='stepfilled’表示连续显示,柱状图之间没有间隔线;bins=30表示将区间设置为30,即为直方图的宽度,默认是10个区间;normed=True表示将直方图标准化处理。生成图形如图所示。

在这里插入图片描述


3.绘制箱图

箱图是一种用于表示分布的图形,展示数据的分布情况,由五个分位数组成,具体包括上四分位数、下四分位数、中位数以及上下5%的极值。下面是Python调用Pandas扩展包绘制箱图的源码。

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_csv("data.csv",index_col='year')    
gy = data['Guiyang']  
gy.plot(kind='box')
plt.show()  

下图为绘制的贵阳房价箱图,同样可以调用DataFrame的boxplot()函数绘制箱图。

在这里插入图片描述

讲到这里,Python调用Matplotlib和Pandas进行可视化分析的两种最常用方法已经介绍完毕。Matplotlib作为众多Python可视化包的鼻祖,其功能是非常强大和复杂的,其他很多工具都是基于Matplotlib的轻量级封装,比如Pandas、Seaborn等。

其中,Seaborn是一个基于Matplotlib的可视化库,旨在使默认的数据可视化更加悦目,简化复杂图表的创建,可以与Pandas很好地集成。这里就不再叙述,仅举一个调用Seaborn扩展包绘制热点图的简单示例,代码如下。

# -*- coding: utf-8 -*-
#By:Eastmount CSDN
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsdata = pd.read_csv("data.csv",index_col='year')
data = data.corr()
sns.heatmap(data)
plt.show()

输出如图所示。

在这里插入图片描述


三.ECharts可视化技术初识

数据可视化是指将结构或非结构数据转换为可视化的图表,可视化技术能将数据以更加直观的形式呈现出来,从而增加数据的说服力及客观性。本书主要结合Python讲解数据分析的可视化技术,包括前面的Matplotlib和Pandas扩展包,而更多的开源图表库也能给大家提供美观、简洁的图形,ECharts是经典的一款网站可视化图标库。

本书的另一个宗旨是让读者了解一些相关或比较前沿的信息技术知识,这些扩展知识可能给您提供一些想法或解决一些难题,这里作者简单普及下ECharts技术。

1.ECharts

ECharts是一个纯 JavaScript 的图表库,能流畅的运行在电脑端和移动设备上,兼容当前绝大部分主流浏览器(包括IE8/9/10/11、Chrome、Firefox、Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观、生动、可交互和个性化定制的数据可视化图表。

ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、Treemap、多维数据可视化的平行坐标,还有用于 BI 的漏斗图、仪表盘等,并且支持图与图之间的混搭。

下图显示ECharts官网示例,推荐大家从官网进行学习,它提供了详细的实例及使用文档。ECarts官网为:

  • http://echarts.baidu.com/

下面通过简单示例介绍ECharts入门知识,它广泛应用于网站及可视化项目中。

在这里插入图片描述


2.简单示例

1.下载相关文件
首先,下载最新的echarts.min.js文件,它提供了ECharts多种图形的支撑库。下载地址为:http://echarts.baidu.com/download.html,打开网址显示的下载页面如图所示。

在这里插入图片描述

2.Script配置文件
然后需要在中引入已经下载的echarts.min.js文件,它提供了ECharts多种图形绘制的支撑库文件,并调用ECharts图标库。核心代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><!-- 引入 ECharts 文件 --><script src="echarts.min.js"></script>
</head>
</html> 

3.绘制图形
下面blog17_01.html代码是绘制贵州省六个城市的柱状图,在代码中引入ECharts后,可以直接调用。

<script src="echarts.min.js"></script>

核心代码 :

  • var myChart = echarts.init(document.getElementById(‘main’))

初始化ECharts实例,获取id为main的div布局,并赋值给myChart变量,后面直接调用myChart变量中的函数,var在JavaScript中用于声明变量。然后在option中可以定义图形的标题(title)、坐标(tooltip)、标注图(legend)、X下标(xAxis)等。最后调用myChart.setOption(option)函数显示刚指定的配置项和数据图表。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>ECharts</title><!-- 引入 echarts.js --><script src="echarts.min.js"></script>
</head>
<body><!-- 为echarts设置一个宽度为600、高度为400的区域,用于绘图 --><div id="main" style="width: 600px;height:400px;"></div><script type="text/javascript">// 基于准备好的区域,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));// 指定图表的配置项和数据var option = {title: {text: 'ECharts 入门示例'},tooltip: {},legend: {data:['数量']},xAxis: {data: ["贵阳市","遵义市","凯里市","六盘水市","都匀市","毕节市"]},yAxis: {},series: [{name: '数量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);</script>
</body>
</html>

输出如图所示,其中X轴分别对应贵州省的几个城市,包括贵阳市、遵义市、凯里市、六盘水市、都匀市和毕节市,对应代码为:

  • xAxis: {data: [“贵阳市”,“遵义市”,“凯里市”,“六盘水市”,“都匀市”,“毕节市”]}

Y轴对应这六个城市的某种数据统计值,当鼠标选中某个柱状图,则会提示该城市的统计数值,比如凯里市的为36,统计数值对应的代码为:

  • series: [{name: ‘数量’, type: ‘bar’, data: [5, 20, 36, 10, 10, 20] }]

最后将绘制的图形显示在id为“main”的div布局中,如下所示。

在这里插入图片描述

更多图形绘制推荐大家从官网选择学习,ECharts技术真的很实用又博大精深,被广泛应用于网站开发,尤其是对全世界、全国、各省进行地图数据统计分析时,比如统计全国各省份的GDP值、全省各市州的人口规模等。

在这里插入图片描述

下一篇文章我将详细介绍PyEcharts基础知识。


四.总结

数据可视化旨在借助于图形化手段,清晰有效地传达与沟通信息,它与信息图形、信息可视化、统计图形密切相关。Python通过调用可视化分析库实现图形绘制,以直观的形式反映数据的特点或结果的好坏,常用的扩展包包括Matplotlib、Pandas、Seaborn等,同时如果您使用Python开发网站,建议读者可以结合ECharts技术进行可视化处理,这些可视化分析技术对您的科研结果呈现或项目数据展示都很有帮助。

该系列所有代码下载地址:

  • https://github.com/eastmountyxz/Python-zero2one

感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~

在这里插入图片描述

(By:娜璋之家 Eastmount 2021-08-24 夜于武汉 https://blog.csdn.net/Eastmount )


参考文献:

  • [1] 杨秀璋. 专栏:知识图谱、web数据挖掘及NLP - CSDN博客[EB/OL]. (2016-09-19)[2017-11-07]. http://blog.csdn.net/column/details/eastmount-kgdmnlp.html.
  • [2] matplotlib. Matplotlib官网[EB/OL]. (2002-2017)[2017-11-10]. http://matplotlib.org.
  • [3] scikit-learn. Scikit-Learn官网[EB/OL]. (2017)[2017-11-10].http://scikit-learn.org/
    stable/.
  • [4] pandas. Pandas官网[EB/OL]. (2017)[2017-11-10]. http://pandas.pydata.org/.
  • [5] 张良均,王路,谭立云,苏剑林. Python数据分析与挖掘实战[M]. 北京:机械工业出版社,2016.
  • [6] (美)Wes McKinney著. 唐学韬等译. 利用Python进行数据分析[M]. 北京:机械工业出版社,2013.
  • [7] 杨秀璋.[Python数据挖掘课程] 六.Numpy、Pandas和Matplotlib包基础知识[EB/OL] . (2016-11-17)[2017-11-15]. http://blog.csdn.net/eastmount/article/details/53144633.
  • [8] 杨秀璋. [Python数据挖掘课程] 七.PCA降维操作及subplot子图绘制[EB/OL]. (2016-11-26)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/53285192.
  • [9] 杨秀璋. [python数据挖掘课程] 十.Pandas、Matplotlib、PCA绘图实用代码补充[EB/OL]. (2017-03-07)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/60675865
  • [10] powerbaby. 用Pandas作图[EB/OL]. (2016-02-23)[2017-11-18]. http://www.360doc.com/
    content/16/0223/21/7249274_536782559.shtml.
  • [11] Seaborn. Seaborn:statistical data visualization[EB/OL]. (2017)[2017-11-18]. http://seaborn.pydata.org/.
  • [12] echarts.Echarts中文官网[EB/OL].(2017)[2017-11-18].http://echarts.baidu.com/index.html.
  • [13] 杨秀璋. [Echarts可视化] 二.php和ajax连接数据库实现动态数据可视化[EB/OL]. (2017-06-02)[2017-11-18]. http://blog.csdn.net/eastmount/article/details/72847067.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Python 的招聘信息可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的博主 Wechat / QQ 名片 :) 1. 项目简介 本项目利用 Python 从某招聘网站抓取海量招聘数据&#xff0c;进行数据清洗和格式化后存储到关系型数据库中&#xff08;如mysql、sqlite等&#xff09;&#xff0c;利用 Flask Bootst…

2.14 分享9个高吸睛小红书首图制作技巧,要认真学哦!【玩赚小红书】

在小红书里&#xff0c;推荐的图片比例是3:4、1:1、4:3。 做图的时候就要提前调整好比例&#xff0c;免得上传被自动裁剪掉重要信息。竖屏最常用&#xff0c;因为比较“霸屏”&#xff0c;展现的信息空间比较大。当然&#xff0c;选哪个比例还是看个人偏好&#xff0c;尽量保持…

【LLM】如何将开源基础模型训练成特定领域的LLM?

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

大型语言模型的用途是什么?

What Are Large Language Models Used For? 大型语言模型的用途是什么? Large language models recognize, summarize, translate, predict and generate text and other forms of content. 大型语言模型识别、汇总、翻译、预测和生成文本和其他形式的内容。 AI applicatio…

通过生日获取年龄+生肖+星座工具类

通过生日获取年龄生肖星座工具类 &#x1f345; Java学习路线&#xff1a;搬砖工的Java学习路线 &#x1f345; 作者&#xff1a;程序员小王 &#x1f345; 程序员小王的博客&#xff1a;https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF &#x1f345; 扫描主页左侧…

使用生辰八字取名的方法

2019独角兽企业重金招聘Python工程师标准>>> 生辰八字”是我们常说的一种取名的方式&#xff0c;在古代的时候&#xff0c;男女双方是否合适都会拿双方的生辰八字进行匹配&#xff0c;那么该如何使用八字取名呢&#xff1f; 首先我们需要进行测试自己的生辰八字&…

用计算机找到自己的另一半,生辰八字算婚期计算器 免费算个人感情婚姻的另一半...

免费算命东方神算 免费算命2020年最准的免费卜易算 社会高速发展的同时,我们也不能摒弃传统文化,要将科技和文化相结合,现在就有许多网站提供了在线占卜的功能,首页上大大的标题写着类似免费算命东方神算,并且是不是就举办一些免费算命2020年最准的免费卜易算这样比较有噱…

最简单日柱推算法_哪些人在九运中最好运

三元九运是中国划分大时间的方法,自古便记载于黄历上,并结合干支历使用,多用于风水学上。 中国古代先民仰观天文,俯察地理,经过漫长时期的观测,发现太阳系各大行星的运转规律与地球上自然和人事现象的运动变化规律之间存在着某种内在规律性联系。这种天体运行规律循环往复…

万年历、黄历,获取每日的宜忌、五行、冲煞、值神、彭祖百忌、吉神宜趋、今日胎神、凶神宜忌、二十八星宿、建除十二神

环境&#xff1a;jdk8 改写自某万年历js代码&#xff0c;故可能有些代码不规范&#xff0c;不过结果是没问题的。 application.properties jxdata{"1-甲子":{"JSYQ":"天恩 母仓 时阳 生气 益后 青龙","XSYJ":"灾煞 天火 四忌 八…

算命大师元真先生解读周易人生命运

今天我们就来和先生谈谈周易里的人生命运。 元真先生说自古有“易经为群经之首、大道之源”之美誉,为何周易在古代能有如此之高的地位,通观历史我们不难发现,周易是传统思想文化中自然哲学与人文实践的理论的根源,是古代帝王之学,政治家、军事家、商家的必修课。《周易》…

八字喜用神php源码,免费查八字喜用神的软件 通关用神

八字预测学是一项古老的学说&#xff0c;可谓是家喻户晓&#xff0c;过去为无数先人提供了人生经验&#xff0c;经过几千年的传承与发展&#xff0c;理论体系更为完善&#xff0c;所以若是想要自己的人生顺心顺意&#xff0c;了解自己的八字信息势在必行&#xff0c;本期就带您…

感谢周易算命大师元真先生

和大家说说我的亲身经历,也仅以此文感谢周易大师元真先生对我及家人的帮助,以前的我从不信命,也很少算命,但是经历过一次婚姻危机,让我彻底毁了三观,现在拿出来分享给迷茫的人们, 我叫刘小婷一个很单纯的女人,一门心思就围着孩子丈夫家庭转。老公是个很有能力的人,公司…

生辰八字五行计算

本文介绍生辰八字和八字五行的一种算法。站内有人在查询生辰八字的算法&#xff0c;此题本人也感兴趣。故以此文以续貂尾。 生辰八字计算要点是节气日&#xff0c;年柱以立春起&#xff0c;月柱以是月节气日起&#xff0c;故先要计算月首的节气日。本节气算法的节气时刻精度差些…

臭名昭著的手机验证码功能是如何实现的

点击▲关注 “爪哇笔记” 给公众号标星置顶更多精彩 第一时间直达前言 现在基本上各种手机APP注册都会用到手机验证码&#xff0c;包括一些PC端网站也会使用手机号作为唯一标识验证&#xff01; 恰巧&#xff0c;小明的老板&#xff0c;让其开发一个用户注册的功能&#xff0…

安全机制之手机移动端验证码炸弹处理策略

验证码炸弹处理策略 依据现有软件运行情况分析:用户登陆时忘记密码&#xff0c;需要通过短信验证码的方法登录。由于恶意用户或异常伙伴服务的存在&#xff0c;当系统发生各种故障和错误或受到攻击和侵害(被验证码炸弹袭击)时&#xff0c;系统往往无法正常工作&#xff0c;进而…

技术人员需要了解的手机验证码登录风险

手机验证码登录是一种常见的应用登录方式&#xff0c;简单方便&#xff0c;不用记忆密码&#xff0c;市面上能见到的APP基本都支持这种登录方式&#xff0c;很多应用还把登录和注册集成到了一起&#xff0c;注册登录一气呵成&#xff0c;给用户省去了很多麻烦&#xff0c;颇有一…

某浪新闻APP之登录验证码下发短信另类分析

前言 我又来了。今天的主角是某浪新闻APP 工具 fiddler&#xff08;抓包工具&#xff09;Drony&#xff08;习惯用了&#xff0c;不用去手机设置里面填写代{过}{滤}理地址和端口。。&#xff09;jadx-gui&#xff08;反编译app&#xff09;root环境&#xff08;我这是另类的…

【大数据AI人工智能】图文详解 ChatGPT、文心一言等大模型背后的 Transformer 算法原理

论文 Attention is All You Need 中推荐了 Transformer 。 The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and …

最强AI导师指令:一个Prompt让ChatGPT秒变金牌辅导,从小学生到博士后,让你1天学会1个月的知识!

原文&#xff1a;最强AI导师指令&#xff1a;一个Prompt让ChatGPT秒变金牌辅导&#xff0c;从小学生到博士后&#xff0c;让你1天学会1个月 视频&#xff1a;https://www.douyin.com/video/7236548869855792440 你可能看过无数个自媒体人讲解该如何写好一个ChatGPT指令&#…

AIGC消息天天不断,到底什么是AIGC?

最近&#xff0c;AIGC领域的新消息可以说是日新月异&#xff0c;今天国外某IT大佬推出一个新模型&#xff0c;明天国内某大厂推出一个新平台。 说来说去&#xff0c;到底什么是AIGC呢&#xff1f; AIGC的全称是AI Generated Content&#xff0c;也就是利用人工智能技术自动生成…