可视化库----Matplotlib+Pandas高级篇及应用

  • 一、柱状图详解
  • 二、#绘制多幅图形subplot
  • 三、加载数据
    • 3.1、从文件中加载数据
    • 3.2、从网页中加载数据
  • 四、Pandas+Matplotlib简化数据可视化
    • 4.1、Series/DataFrame.plot()方法
    • 4.2、参数详解
    • 4.3、绘制多区域柱状图
    • 4.4、绘制直方图
    • 4.5、箱型图
    • 4.6、条形图
    • 4.7、堆叠图
    • 4.8、散点图
    • 4.9、气泡图
    • 4.10、饼图


matplotlib数据加载可视化,点这里

以下文档的源文件,我做成网页了,可以直接点击这里

一、柱状图详解

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"]=['SimHei']  # 用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

#再论柱状图
#创建一个画板
plt.figure(1)
# 确定绘图范围,由于只需要画一张图,所以我们将整张白纸作为绘图的范围
# 111: 表示设置绘图范围为1行1列,最后一个1代输出到第1块画布上目前只有1块)
ax1=plt.subplot(111)

#数据准备
#y轴数据
data = np.array([15,10,25,15])
width=0.5#柱状图宽度
#x轴数据
x_bar = np.arange(4)
rect=ax1.bar(x_bar,data,width=width,color="lightblue")
#为柱状图添加高度值
for rec in rect:
    x=rec.get_x() #获取所有x坐标的值
    height=rec.get_height()  #获取所在高度的值
    print(x,height)
    ax1.text(x+0.2,1.02*height,str(height)+'W')  #在指定位置写上高度的值
#设置x的坐标
ax1.set_xticks(x_bar)
ax1.set_xticklabels(["第一季度","第二季度","第三季度","第四季度"])
ax1.set_xlabel("季度")
#设置Y的标签
ax1.set_ylabel("销量(单位:万件)")
ax1.set_title("2017年季度销售量统计")
ax1.grid(True)  #是否显示网格
ax1.set_ylim(0,28) #设置y的显示范围


ax1.spines["right"].set_color("none")
ax1.spines["top"].set_color("none")

                                                                   可视化库----Matplotlib+Pandas高级篇及应用_第1张图片

二、#绘制多幅图形subplot

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.sans-serif"]=['SimHei']  # 用于正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

plt.figure(figsize=(6,6),dpi=80) #创建画布 ,dpi每个单位的像素
plt.figure(1) # 创建第一个画板(figure)
ax1=plt.subplot(211) # 划分画板为2 行 1 列,共 2 块区域,并获取当前画板的第一个子图(子块)
plt.scatter([1, 2, 3],[2,4,7],marker="v",s=20) # 绘图
ax2 = plt.subplot(212) # 获取当前画板的第二个子图(子块)
ax2.set_ylim(0,6) #设置y的显示范围
plt.plot([4, 5, 6]) # 绘图



#创建第二个画板,来画图
plt.figure(2)
x=np.arange(4)
y=np.array([12,13,15,10])
#绘制柱状图
ax3=plt.bar(x,y)
plt.title("第二个画板")

plt.figure(1)  #切换到第一个画板
plt.subplot(211) #切换到第一块区域subplot(211)
ax1.set_title('第一个画板(区域1)') # 做出211的标题
plt.subplot(212) #切换到第一块区域subplot(211)
ax2.set_title('第一个画板(区域2)') # 做出212的标题
# 调整每隔子图之间的距离
plt.tight_layout()
plt.show()

                                                                                                       可视化库----Matplotlib+Pandas高级篇及应用_第2张图片
                                                                                                       可视化库----Matplotlib+Pandas高级篇及应用_第3张图片

三、加载数据

3.1、从文件中加载数据

import matplotlib.pyplot as plt
import numpy as np
# import pandas as pd
import csv
plt.rcParams['font.sans-serif']=['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
#11111111111111111111加载csv文件

#定义两个空列表,存放x,y轴数据
x = []
y = []
with open('csv/matplotlib-demo.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots:
        x.append(int(row[0]))
        y.append(int(row[1]))
plt.plot(x,y, label='模拟数据')
plt.xlabel('x')
plt.ylabel('y')
plt.title('演示从文件加载数据')
plt.legend()
plt.show()

                                                                                                                         可视化库----Matplotlib+Pandas高级篇及应用_第4张图片

3.2、从网页中加载数据

mport json   #解析数据
import urllib
url = "https://api.douban.com/v2/book/1220562"
data = urllib.request.urlopen(url).read().decode()
data

#用josn将字符串数据转化为python字典
formatData = json.loads(data)
formatData

#获取字典中key值为tags对应的数据
tags=formatData["tags"]
#用来存放的两个列表
X=[]
Y=[]
#遍历数据,取count作为y轴数据,name作为x轴
for tag in tags:
    print("{}----{}".format(tag["name"],tag["count"]))
    X.append(tag["name"])
    Y.append(tag["count"])
#绘制柱状图
plt.bar(X,Y,label="图书热搜词")
plt.title("'图书热词搜索排名")
plt.xlabel('x轴-搜索热词')
plt.ylabel('y轴-搜索热词排名')
plt.legend()

                                                                可视化库----Matplotlib+Pandas高级篇及应用_第5张图片

#用numpy加载csv数据
x,y  =np.loadtxt("csv/matplotlib-demo.csv",delimiter=",",unpack=True)
plt.plot(x,y,label="numpy加载数据")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.title("'numpy加载数据过程")
plt.legend()

                                              可视化库----Matplotlib+Pandas高级篇及应用_第6张图片

四、Pandas+Matplotlib简化数据可视化

4.1、Series/DataFrame.plot()方法

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
plt.rcParams['font.sans-serif']=['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
from pandas import Series,DataFrame

#111111111111111111111111111111111111111111111Series绘图原理
#指定S的索引
s = pd.Series(np.random.randn(10).cumsum(),#累加
              index=np.arange(0,100,10))
#指定索引
index = np.arange(5)
ax=s.plot(label = "累加折线图",title = "随机累加折线图")
ax.legend()
# ax.plot(title = "随机累加折线图")



#Series+!+!+!+!+!++!++!+!+!+!+!+!指定S的索引
s = pd.Series(np.random.randn(10).cumsum(),#累加
              index=np.arange(0,100,10))
#指定索引
index = np.arange(5)
ax=s.plot(label = "累加折线图",title = "随机累加折线图",style="ko-")

ax.legend()
# ax.plot(title = "随机累加折线图")

                                                       可视化库----Matplotlib+Pandas高级篇及应用_第7张图片

                                                                   可视化库----Matplotlib+Pandas高级篇及应用_第8张图片

#22222222222222222222222222222222222222DataFrame绘图原理
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
plt.rcParams['font.sans-serif']=['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
from pandas import Series,DataFrame
df=DataFrame(np.random.randn(10,6),index = np.arange(0,100,10),columns=list("ABCDEF"))
df.plot()

                                                                      可视化库----Matplotlib+Pandas高级篇及应用_第9张图片

#将Dataframe中各列的数据分配到不同的子图中,是否共用x,y轴
df.plot(subplots=True,sharey=False)

                                                 可视化库----Matplotlib+Pandas高级篇及应用_第10张图片

4.2、参数详解

                                              可视化库----Matplotlib+Pandas高级篇及应用_第11张图片

                                                                         可视化库----Matplotlib+Pandas高级篇及应用_第12张图片

4.3、绘制多区域柱状图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
plt.rcParams['font.sans-serif']=['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
from pandas import Series,DataFrame
#创建画板,获取Axes对象
fig, axes = plt.subplots(2,1)#创建两行一列的画板
data = pd.Series(np.random.randn(16),#创建绘图数据
                 index=list('abcdefghijklmnop'))
data.plot(kind='bar',
          ax=axes[0], color='k',alpha=0.7)  #在第一块画板
data.plot(kind='barh',
          ax=axes[1], color='k',alpha=0.7)  #在第二块画板
plt.show()
'''
alpha=0.7        宽度
'''

                                                 可视化库----Matplotlib+Pandas高级篇及应用_第13张图片

4.4、绘制直方图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
plt.rcParams['font.sans-serif']=['SimHei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
from pandas import Series,DataFrame
#读取pandas中的excel文件
df = pd.read_excel("excel/pandas-matplotlib.xlsx","Sheet1")
fig = plt.figure()
#创建画布大小
fig.set_size_inches(10,8)

#在画板上指定ax的绘图板块
ax = fig.add_subplot(111)
#画直方图
ax.hist(df['Age'], bins=7)  #平均分布成七段
plt.title('年龄分布')
plt.xlabel('Age')
plt.ylabel('人数')
plt.legend()

                                                       可视化库----Matplotlib+Pandas高级篇及应用_第14张图片

4.5、箱型图

fig2 = plt.figure()
ax=fig2.add_subplot(111)
ax.boxplot(df.Age)
plt.show()

                                                                   可视化库----Matplotlib+Pandas高级篇及应用_第15张图片

4.6、条形图

# 条形图
var = df.groupby('Gender').Sales.sum()
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_xlabel("性别")
ax1.set_ylabel("人数")
ax1.set_title("人数区分")
var.plot(kind="bar")

                                        可视化库----Matplotlib+Pandas高级篇及应用_第16张图片

4.7、堆叠图

#堆叠图
var2=df.groupby(['BMI','Gender']).Sales.sum().unstack()
var2.plot(kind="bar",stacked=True,  #是否堆叠
         color = ['y','b'])

                                     可视化库----Matplotlib+Pandas高级篇及应用_第17张图片

4.8、散点图

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(df['Age'], df['Sales'],s=100)
plt.show()

                                                                   可视化库----Matplotlib+Pandas高级篇及应用_第18张图片

4.9、气泡图


fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(df['Age'], df['Sales'], s=df['Income']) # 第三个变量表明根据收入气泡的大小
plt.show()

                                           可视化库----Matplotlib+Pandas高级篇及应用_第19张图片

4.10、饼图

#饼图
temp = df.groupby(['Gender']).sum()

#单独取出
x_list = temp['Sales']
label_list = temp.index
plt.axis('equal') #x与y轴是否相等,,(相当于是否是圆还是椭圆)
plt.pie(x_list, labels=label_list,shadow=True,#是否有阴影
        startangle=90,autopct='%1.1f%%',
       explode=[0,0.1])
plt.title('expense')
plt.show()

'''
plt.axis('equal')    #x与y轴是否相等,,(相当于是否是圆还是椭圆
shadow=True,         #是否有阴影
autopct='%1.1f%%     #显示百分比数据
explode=[0,0.1]      #需要偏移的数据和大小
startangle=90        #从90度的位置开始画
'''

可视化库----Matplotlib+Pandas高级篇及应用_第20张图片

你可能感兴趣的:(pandas,matpltlib)