python的pandas库的应用设计_可视化库----Matplotlib+Pandas高级篇及应用

编辑推荐:

本文来源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")

二、#绘制多幅图形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()

三、加载数据

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()

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()

#用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()

四、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 = "随机累加折线图")

#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()

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

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

4.2、参数详解

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 宽度

'''

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()

4.5、箱型图

fig2

= plt.figure()

ax=fig2.add_subplot(111)

ax.boxplot(df.Age)

plt.show()

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")

4.7、堆叠图

#堆叠图

var2=df.groupby(['BMI','Gender']).Sales.sum().unstack()

var2.plot(kind="bar",stacked=True,

#是否堆叠

color = ['y','b'])

4.8、散点图

fig

= plt.figure()

ax = fig.add_subplot(111)

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

plt.show()

4.9、气泡图

fig

= plt.figure()

ax = fig.add_subplot(111)

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

# 第三个变量表明根据收入气泡的大小

plt.show()

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度的位置开始画

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值