基于Python的大数据分析基础(六)---数据可视化之Matplotlib

点击查看Matplotlib官方文档

7.Python对数据的可视化处理

    7.1 工具 Jupyter Notebook

       %matplotlib inline                  
        #在 jupyter 中嵌入显示,图片内嵌,而不是弹出。缺陷:除非代码一次执行,不然无法叠加绘图
        %config InlineBackend.figure_format = "retina"  #呈现分辨率较高的图像
        常用来制作数据可视化的图形库是ggplot,直接pip3 install 即可,因为被放弃了这个库,所以这里跳过

    7.2 matplotlib

    1.点图和线图(key:二维数据,plot(),subplot()绘制多个子图)

# -*- coding: UTF-8 -*-
'''
@Author :Jason
plt 画点图 和 线图
plot参数说明  (x,y,format_string)
            x: x轴,列表或者数组
            y: y轴,列表或者数组
            format_string:  控制曲线的格式字符串,可选
'''
import numpy as np
import matplotlib.pyplot as plt

#x轴
x1 = np.linspace(0.0,5.0)
x2 = np.linspace(0.0,2.0)

#y元素
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

#绘图一
plt.subplot(2,1,1)
plt.plot(x1,y1,"yo-")
plt.title("xy")
plt.ylabel("y")

#绘图二
plt.subplot(2,1,2)
plt.plot(x2,y2,'r.-')
plt.xlabel("time(s)")
plt.ylabel("Undamped")

plt.show()

图形:

                          

    2.直方图(histogram) 二维统计表

# -*- coding: UTF-8 -*-
'''
@Author :Jason
直方图
hist函数命令格式如下
    n,bins,pathes = plt.hist(
                            arr,  #以为数组 x
                            bins, #直方图的柱数 默认为10
                            normed = 0, #是否向量归一化,默认0
                            facecolor = "black",  #直方图颜色
                            edgecolor = "black",  #直方图边框颜色
                            alpha = 1,   #透明度
                            histtype = "bar",  #直方图类型  bar,barstacked,step,stepfilled
                            )
    返回值:
        n : 直方图向量,是否归一化由参数 normed 决定
        bins : 返回各个bin的区间范围
        patches : 返回每个bin里面包含的数据,是一个list
'''


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

mu = 100 #均值
sigma = 15  #标准差
x = mu + sigma * np.random.randn(10000)
print("x:",x.shape)
#直方图条数
num_bins = 50
#绘图
n, bins, patches = plt.hist(x, num_bins,normed=1,facecolor = "red",alpha = 0.5)

#添加一个最佳拟合曲线
y = mlab.normpdf(bins,mu,sigma) #返回关于数 据的pdf数值(概率密度函数)
plt.plot(bins,y,"r--")
plt.xlabel("Smarts")
plt.ylabel("Probability")

#在图中添加公示用latex的语法($ $)
plt.title("Histogram of IQ:$\mu = 100$,$\sigma=15$")

#调整图像的间距,防止y轴数值与 label重合
plt.subplots_adjust(left=0.15)
plt.show()
print("bind:\n",bins)

 图形:

                         

   3.等直线图 <===> 等量线图

# -*- coding: UTF-8 -*-
'''
@Author :Jason
等量线图(等直线图),地理中的等高线图
连续分部且逐渐变化的数量特征
contour()函数将三维图像在二维空间上表示,并且使用clabel()在每条线上显示数据值的大小
'''
import numpy as np
from matplotlib import cm
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#生成数据
delta = 0.2
x = np.arange(-3,3,delta)
y = np.arange(-3,3,delta)

X, Y = np.meshgrid(x,y)
Z = X**2 + Y**2

x = X.flatten()#返回一维数组,但该函数只能适用于numpy对象(array 或者 mat)
y = Y.flatten()
z = Z.flatten()

fig = plt.figure(figsize=(12,6))

ax1 = fig.add_subplot(121,projection = "3d")
ax1.plot_trisurf(x,y,z,cmap=cm.jet,linewidth=0.01)
#cmap指颜色,默认绘制为RGB(A)颜色空间,jet表示"蓝青黄红"颜色
plt.title("3D")
ax2 = fig.add_subplot(122)
cs = ax2.contour(X,Y,Z,15,cmap="jet",)
#X,Y,Z,15代表的是显示等高线的密集程度,数值越大,画的等高线数就越多
ax2.clabel(cs,inline=True,fontsize = 10,fmt='%1.1f')
plt.title("Contour")
plt.show()

图形:

                           

4.三维曲面图

# -*- coding: UTF-8 -*-
'''
@Author :Jason
三维曲面图
'''
from mpl_toolkits.mplot3d import axes3d
from matplotlib import pyplot as plt
from matplotlib import cm

fig = plt.figure(figsize=(8,6))
ax = fig.gca(projection="3d")

#三维数据
X,Y,Z = axes3d.get_test_data(0.05)
ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)
cset = ax.contour(X,Y,Z,zdir="z",offset=-100,cmap=cm.coolwarm)
cset = ax.contour(X,Y,Z,zdir="x",offset=-40,cmap=cm.coolwarm)
cset = ax.contour(X,Y,Z,zdir="y",offset=-40,cmap=cm.coolwarm)

ax.set_xlabel("X")
ax.set_xlim(-40,40)
ax.set_ylabel("Y")
ax.set_ylim(-40,40)
ax.set_zlabel("Z")
ax.set_zlim(-100,100)
plt.show()

图形:

                              

5.条形图

# -*- coding: UTF-8 -*-
'''
@Author :Jason
条形图
'''
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题



import numpy as np
from matplotlib import pyplot as plt

#组数
n_group = 5

#平均值 和 标准差
means_men = (20,35,30,35,27)
std_men = (2,3,4,1,2)

means_women = (25,32,34,30,35)
std_women = (3,4,2,3,3)

#画图
fig ,ax = plt.subplots()
index = np.arange(n_group)
bar_width = 0.35 #宽度
opacity = 0.4
error_config = {"ecolor":"0.3"}

#条形图中的第一条类
rectsl = plt.bar(index,means_men,bar_width,
                alpha = opacity,
                color = "b",
                yerr = std_men,
                error_kw = error_config,
                label="男"
                 )
rects2 = plt.bar(index + bar_width,means_women,bar_width,
                 alpha = opacity,
                 color="r",
                 yerr = std_women,
                 error_kw = error_config,
                 label = "女")
plt.xlabel("Group")
plt.ylabel("Scores")
plt.title("男女各组间得分情况")
plt.xticks(index + bar_width,("A","B","C","D","E"))
plt.legend()

#自动调整subplot()的参数给指定的填充区
plt.tight_layout()
plt.show()

 图形:

                        

6.饼图

# -*- coding: UTF-8 -*-
'''
@Author :Jason
饼图
pie(x,  #百分比数据
    explode,  #是否提取出来
    labels,   #描述
    colors,   #需要呈现的颜色
    startangle, #饼图开始的位置
    )

'''
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
from matplotlib import pyplot as plt

lables = "语文","数学","英语","化学"
sizes = [123,434,904,232] #类似百分比
colors = ["green","red","gold","blue"] #颜色

#0.1 代表从饼图中分割出来
explode = (0,0.1,0,0)

#画图
plt.pie(sizes,explode=explode,labels=lables,colors=colors,autopct="%1.1f",shadow=True,startangle=90)

plt.axis("equal")
plt.show()

图形:

                                

7.气泡图(散点图)

# -*- coding: UTF-8 -*-
'''
@Author :Jason
散点图 ==> 气泡图
scatter(x,  #x方向数据
        y,  #y方向数据
        s,  #气泡大小
        color, #气泡颜色,一定要和x轴数据个数对应
        alpha,  #透明度
        )
'''
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
from matplotlib import pyplot as plt
import pandas as pd

#导入数据

# df_data = pd.read_csv("https://raw.githubusercontent.com/pydata/pandas/master/pandas/tests/data/iris.csv")
df_data = pd.read_csv("./files/scatter.csv")
# df_data.to_csv("./files/scatter.csv",encoding='utf-8-sig',index=None)
df_data.head()

#画图
fig, ax = plt.subplots()
#设置气泡颜色
colors = ["#7CFC00","#473C8B","#8B1A1A","#C0FF3E","#C67171","#FFD700","#BBFFFF",
          "#8B5A00","#5C5C5C","#66CD00","#242424","#1E90FF","#8B1A1A","#C0FF3E","#C67171"]
#SepalLength为x,SepalWidth为y,PetalLength*100为气泡大小,颜色,透明度
ax.scatter(df_data["SepalLength"],df_data["SepalWidth"],s=df_data["PetalLength"]*100,
           color=colors*10,alpha=0.6)

ax.set_xlabel("SeplLength(厘米)")
ax.set_ylabel("SepalWidth(厘米)")
ax.set_title("PetalLength(cm)*100")

#显示网格
ax.grid(True)
fig.tight_layout()
plt.show()

图形:

                          

参照:《基于Python的大数据分析基础及实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值