内容简介:一、柱状图详解二、#绘制多幅图形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")
二、#绘制多幅图形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度的位置开始画 '''
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。