Matplotlib+Pandas高级篇

栏目: Python · 发布时间: 5年前

内容简介:一、柱状图详解二、#绘制多幅图形subplot
编辑推荐:
本文来源csdn,本文主要通过各种8种图详细介绍了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高级篇

二、#绘制多幅图形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高级篇

Matplotlib+Pandas高级篇

三、加载数据

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高级篇

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高级篇

#用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高级篇

四、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高级篇

Matplotlib+Pandas高级篇

#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高级篇

#将Dataframe中各列的数据分配到不同的子图中,是否共用x,y轴

df.plot(subplots=True,sharey=False)

Matplotlib+Pandas高级篇

4.2、参数详解

Matplotlib+Pandas高级篇

Matplotlib+Pandas高级篇

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高级篇

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高级篇

4.5、箱型图

fig2 = plt.figure()

ax=fig2.add_subplot(111)

ax.boxplot(df.Age)

plt.show()

Matplotlib+Pandas高级篇

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高级篇

4.7、堆叠图

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

Matplotlib+Pandas高级篇

4.8、散点图

fig = plt.figure()

ax = fig.add_subplot(111)

ax.scatter(df['Age'], df['Sales'],s=100)

plt.show()

Matplotlib+Pandas高级篇

4.9、气泡图

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

Matplotlib+Pandas高级篇

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高级篇


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法(第4版)

算法(第4版)

塞奇威克 (Robert Sedgewick)、韦恩 (Kevin Wayne) / 谢路云 / 人民邮电出版社 / 2012-10-1 / 99.00元

本书全面讲述算法和数据结构的必备知识,具有以下几大特色。  算法领域的经典参考书 Sedgewick畅销著作的最新版,反映了经过几十年演化而成的算法核心知识体系  内容全面 全面论述排序、搜索、图处理和字符串处理的算法和数据结构,涵盖每位程序员应知应会的50种算法  全新修订的代码 全新的Java实现代码,采用模块化的编程风格,所有代码均可供读者使......一起来看看 《算法(第4版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具