IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 常见图表的绘制 -> 正文阅读

[Python知识库]常见图表的绘制

绘制折线图?plot()

参数说明:

mfc:标记的颜色。 

ms:标记的大小。 

mec:标记边框的颜色。 

alpha:透明度,设置该参数可以改变颜色的深浅。

举例:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df=pd.read_excel('体温.xls')

plt.rcParams['font.sans-serif']=['SimHei']   
x=df['日期']
y=df['体温']
plt.figure(figsize=(10,8),facecolor='c')
plt.plot(x,y,color='m',linestyle='-',marker='o',mfc='w')
plt.xlabel('2020年2月')
plt.ylabel('基础体温')
# 设置xy轴的最大限度
# plt.xlim(1,14)
# plt.ylim(36.0,36.5)
# 网格线
plt.grid(linestyle='--')
for a,b in zip(x,y):
    plt.text(a,b+0.03,'%.1f'%b,ha='center',va='bottom',fontsize=9)
#     标题
plt.title('14天基础体温表',fontsize='18')
# 图标图例
plt.legend(('基础体温',))
# 标注最高温
x_max=x[y.idxmax()]
y_max=y[x.idxmax()]
plt.annotate('最高体温',xy=(x_max,y_max),xytext=(x_max+0.3,y_max))
# 坐标轴刻度线
plt.rcParams['xtick.direction'] = 'in' 

效果?

?

绘制柱形图

参数说明: 

x:x轴数据。 

height:柱子的高度,也就是y轴数据。 

width:浮点型,柱子的宽度,默认值为0.8,可以指定固定值。 

bottom:标量或数组,可选参数,柱形图的y坐标,默认值为None。 

*:星号本身不是参数。星号表示其后面的参数为命名关键字参数,命名关键字参数必须传入参数名;否则程序会出现错误。 

align:对齐方式,如center(居中)和edge(边缘),默认值为center。 

data:data关键字参数。如果给定一个数据参数,所有位置和关键字参数将被替换。 

kwargs:关键字参数,其他可选参数,如color(颜色)、alpha(透明度)、label(每个柱子显示的标签

多柱形图

柱形图中若显示n个柱子,则柱子宽度值需小于1/n;否则柱子会出现重叠现象。

import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('books.xlsx',sheet_name='Sheet2')
plt.rcParams['font.sans-serif']=['SimHei']
labels=df['年份']


y1=df['京东']
y2=df['天猫']
y3=df['自营']
width=0.25
x=[i for i in range(len(labels.values))]
x=pd.Series(x)
plt.bar(x,y1,width=width,color='b',alpha=0.7)
plt.bar(x+width,y2,width=width,color='y')
plt.bar(x+2*width,y3,width=width,color='g')
plt.xticks(x,labels)
plt.xlabel('年份')
plt.ylabel('销量')
plt.ylabel('线上销售额(元)')
plt.title('2013-2019年线上图书销售额分析图')
plt.grid(linestyle=':')

?

?

绘制直方图?hist()

参数说明: 

x:数据集,最终的直方图将对数据集进行统计。 

bins:统计数据的区间分布。 

range:元组类型,显示的区间。 

density:布尔型,显示频率统计结果,默认值为None。设置值为False,不显示频率统计结果;设置值为True,则显示频率统计结果。需要注意,频率统计结果=区间数目/(总数×区间宽度)。 

histtype:可选参数,设置值为bar、barstacked、step或stepfilled,默认值为bar,推荐使用默认配置,其中step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似。 rwidth与bar结合使用

align:可选参数,控制柱状图的水平分布,设置值为left、mid或right,默认值为mid,其中,left或者right会有部分空白区域,推荐使用默认值。 

log:布尔型,默认值为False,即y坐标轴是否选择指数刻度。

stacked:布尔型,默认值为False,是否为堆积柱状图。

import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_excel('grade1.xls')
plt.rcParams['font.sans-serif']=['SimHei']
x=df['得分']
plt.xlabel('分数')
plt.ylabel('学生数量')
plt.title('高一数学成绩分布直方图')
plt.hist(x,bins=[0,25,50,75,100,125,150],facecolor='blue',edgecolor='black',alpha=0.7,density=True)
plt.show()

?

绘制饼形图?pie()

1.基础饼形图

参数说明

x:每一块饼图的比例,如果sum(x)>1会使用sum(x)归一化。 

explode:每一块饼图离中心的距离。 

labels:每一块饼图外侧显示的说明文字。 

autopct:设置饼图百分比,可以使用格式化字符串或format()函数。如'%.1f '保留小数点前后1位。 

pctdistance:类似于labeldistance参数,指定百分比的位置刻度,默认值为0.6。 

shadow:在饼图下面画一个阴影,默认值为False,即不画阴影。 

labeldistance:标记的绘制位置,相对于半径的比例,默认值为1.1,如<1则绘制在饼图内侧。 

startangle:起始绘制角度,默认是从x轴正方向逆时针画起,如设置值为90则从y轴正方向画起。 

radius:饼图半径,默认值为1。 

counterclock:指定指针方向,布尔型,可选参数。默认值为True,表示逆时针;如果值为False,则表示顺时针。 

wedgeprops:字典类型,可选参数,默认值为None。字典传递给wedge对象,用来画一个饼图。例如wedgeprops={'linewidth':2}设置wedge线宽为2。 

textprops:设置标签和比例文字的格式,字典类型,可选参数,默认值为None。传递给text对象的字典参数。 

center:浮点类型的列表,可选参数,默认值为(0,0),表示图表中心位置。 

frame:布尔型,可选参数,默认值为False,不显示轴框架(也就是网格);如果值为True,则显示轴框架,与grid()函数配合使用。实际应用中建议使用默认设置,因为显示轴框架会干扰饼形图效果。 

rotatelabels:布尔型,可选参数,默认值为False;如果值为True,则旋转每个标签到指定的角度。

import pandas as pd
import matplotlib.pyplot as plt
df1=pd.read_excel('data2.xls')
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(figsize=(5,3))
labels=df1['地区']
sizes=df1['销量']
colors=['red','yellow','slateblue','green','magenta','cyan','darkorange','lawngreen','pink','gold']
plt.pie(sizes,
       labels=labels,
        colors=colors,
        labeldistance=1.02,
        autopct='%.1f%%',
        startangle=90,
        radius=0.5,
        center=(0.2,0.2),
        textprops={'fontsize':9,'color':'k'},
        pctdistance=0.6,
       wedgeprops = {'width': 0.3, 'edgecolor': 'k'},
        shadow=True,
#         fontdict={"color":'red'}
       )
plt.axis('equal')
plt.title('2020年1月各地区销量占比情况分析')

?

?

2.分裂饼形图

分裂饼形图主要通过设置explode参数实现,该参数用于设置饼图距中心的距离,我们需要将哪块饼图分裂出来,就设置它与中心的距离即可

注意:有几个数据explode就需要设置几个参数,参数长度必须一致

3.立体感带阴影的饼形图

shadow=True

4.环形图

一个关键参数wedgeprops,字典类型,用于设置饼形图内、外边界的属性,如环的宽度,环边界颜色和宽度,

5.内嵌环形图

(1)连续使用两次pie()函数。

(2)通过wedgeprops参数设置环形边界。

(3)通过radius参数设置不同的半径。

import pandas as pd
import matplotlib.pyplot as plt
# 内嵌环形图分析各地区销量占比情况。
df = pd.read_excel("data2.xls", sheet_name=None)
plt.rcParams["font.sans-serif"] = ["SimHei"]
x1 = df["Sheet1"]["销量"]
x2 = df["2月"]["销量"]
# 画布 
plt.figure(figsize=(6, 6))
# pctdistance:类似于labeldistance参数,指定百分比的位置刻度,默认值为0.6;  autopct: 百分比
# wedgeprops:字典类型,可选参数,默认值为None。字典传递给wedge对象,用来画一个饼图。例如wedgeprops={'linewidth':2}设置wedge线宽为2。
#             edgecolor: 边缘颜色
plt.pie(x1, labels=df["Sheet1"]["地区"], autopct="%.1f%%",  radius=1,pctdistance=0.85, wedgeprops=dict(linewidth=2, width=0.3, edgecolor="w"))
plt.pie(x2, autopct="%.1f%%", radius=0.7, pctdistance=0.85, wedgeprops=dict(linewidth=2, width=0.3, edgecolor="w"))
plt.show()

?

绘制散点图

参数说明: 

x,y:数据。 

s:标记大小,以平方磅为单位的标记面积,设置值如下。 

数值标量:以相同的大小绘制所有标记。 

行或列向量:使每个标记具有不同的大小。x、y和sz中的相应元素确定每个标记的位置和面积。sz的长度必须等于x和y的长度。 

[]:使用36平方磅的默认面积。 

c:标记颜色,可选参数,默认标记颜色为蓝色。 

marker:标记样式,可选参数,默认值为'o'。 

cmap:颜色地图,可选参数,默认值为None。 

norm:可选参数,默认值为None

vmin,vmax:标量,可选,默认值为None 

alpha:透明度,可选参数,0~1的数,表示透明度,默认值为None。 

linewidths:线宽,标记边缘的宽度,可选参数,默认值为None。 

verts:(x,y)的序列,可选参数,如果参数marker为None,这些顶点将用于构建标记。标记的中心位置为(0,0)。 

edgecolors:轮廓颜色,与参数c类似,可选参数,默认值为None。 

data:data关键字参数。如果给定一个数据参数,所有位置和关键字参数将被替换。 

**kwargs:关键字参数,其他可选参数。

import pandas as pd
import matplotlib.pyplot as plt
import random
plt.figure(figsize=(5,3))
x=[random.randrange(0,100) for i in range(50)]
y=[random.randrange(10,200) for r in range(50)]
color=[]
for i in range(25):
    color.extend([i,i])
plt.scatter(x,y,c=color)

?

?

绘制面积图??stackplot()

参数说明:

x:x轴数据。 

args:当传入的参数个数未知时使用args。这里指y轴数据可以传入多个y轴。 

data:data关键字参数。如果给定一个数据参数,所有位置和关键字参数将被替换。 

kwargs:关键字参数,其他可选参数,如color(颜色)、alpha(透明度)等。

绘制热力图??imshow()

热力图是通过密度函数进行可视化用于表示地图中点的密度的热图。它使人们能够独立于缩放因子感知点的密度。热力图可以显示不可点击区域发生的事情。利用热力图可以看数据表里多个特征两两的相似度

显示颜色条:plt.colorbar()

import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv('data.csv',encoding='gbk')
plt.rcParams["font.sans-serif"] = ["SimHei"]
da=df['中奖号码'].str.split('  ',expand=True)
da_num=[]
for i in range(7):
    idx=i+1
    if idx==7:
        idx=0
    tem=da.groupby(i).count()[idx]
    da_num.append(tem)
x=pd.concat(da_num,axis=1)
x.fillna(0,inplace=True)
plt.imshow(x.values)

?

?

绘制箱形图??boxplot()?

箱形图又称箱线图、盒须图或盒式图,它是一种用作显示一组数据分散情况下的资料的统计图。因形状像箱子而得名。箱形图最大的优点就是不受异常值的影响(异常值也称为离群值

参数说明: 

x:指定要绘制箱形图的数据。 

notch:是否以凹口的形式展现箱形图,默认非凹口。 

sym:指定异常点的形状,默认为加号(+)显示。 

vert:是否需要将箱形图垂直摆放,默认垂直摆放。 

whis:指定上下限与上下四分位的距离,默认为1.5倍的四分位差。 

positions:指定箱形图的位置,默认为[0,1,2,…]。 

widths:指定箱形图的宽度,默认为0.5。 

patch_artist:是否填充箱体的颜色。 

meanline:是否用线的形式表示均值,默认用点来表示。 

showmeans:是否显示均值,默认不显示。 

showcaps:是否显示箱形图顶端和末端的两条线,默认显示。 

showbox:是否显示箱形图的箱体,默认显示。 

showfliers:是否显示异常值,默认显示。 

boxprops:设置箱体的属性,如边框色、填充色等。 

labels:为箱形图添加标签,类似于图例的作用。 

filerprops:设置异常值的属性,如异常点的形状、大小、填充色等。 

medianprops:设置中位数的属性,如线的类型、粗细等。 

meanprops:设置均值的属性,如点的大小、颜色等。

capprops:设置箱形图顶端和末端线条的属性,如颜色、粗细等。 

whiskerprops:设置须的属性,如颜色、粗细、线的类型等。

中位数 中位数即为数据的50%分位点所对应的值(Q2)。 

上四分位数 上四分位数则为数据的75%分位点所对应的值(Q3)。 

上限 上限的计算公式为Q3+1.5(Q3-Q1)。 

下限 下限的计算公式为Q1-1.5(Q3-Q1)??Q3-Q1表示四分位差

判断标准结论
x>Q3+1.5(Q3-Q1)或者x<Q1-1.5(Q3-Q1)异常值
x>Q3+3(Q3-Q1)或者x<Q1-3(Q3-Q1)极端异常值

import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel('学生成绩表.xlsx')
df=df.fillna(0)
plt.figure(figsize=(5,3))
plt.boxplot([df['第一周'],df['第二周'],df['第三周']],boxprops={'color':'red'},showmeans=True)
plt.xticks([1,2,3],['第一周','第二周','第三周'])

?

绘制3D图表 Axes3D()

from mpl_toolkits.mplot3d.exes3d import Axes3d

绘制多个子图表

1.subplot()函数

subplot()函数直接指定划分方式和位置,它可以将一个绘图区域划分为n个子图,每个subplot()函数只能绘制一个子图

参数说明: 

args:当传入的参数个数未知时使用args。 

kwargs:关键字参数,其他可选参数。 例如,绘制一个2×3的区域,subplot(2,3,3),将画布分成2行3列在第3个区域中绘制

(1)每绘制一个子图表都要调用一次subplot()函数。

(2)绘图区域位置编号

import matplotlib.pyplot as plt
plt.figure(figsize=(10,8),facecolor='c')
plt.subplot(4,3,1)
plt.subplot(4,3,2)
plt.subplot(4,3,3)
plt.subplot(4,2,3)
plt.subplot(4,2,4)
plt.subplot(4,1,3)
plt.subplot(4,4,13)
plt.subplot(4,4,14)
plt.subplot(4,4,15)
plt.subplot(4,4,16)

?

2.subplots()函数

参数说明: 

nrows和ncols:表示将画布分割成几行几列,例如,nrows=2、ncols=2表示将画布分割为2行2列,起始值均为0。当调用画布中的坐标轴时,ax[0,0]表示调用左上角的坐标,ax[1,1]表示调用右下角的坐标。 

sharex和sharey:布尔值或者值为“none”“all”“row”“col”,默认值为False。用于控制x或y轴之间的属性共享。具体参数值说明如下。 

True或者“all”:表示x或y轴属性在所有子图中共享。 

False或者“none”:表示每个子图的x或y轴都是独立的部分。 

“row”:表示每个子图在一个x或y轴上共享行(row)。 

“col”:表示每个子图在一个x或y轴上共享列(column) 

squeeze:布尔值,默认值为True,额外的维度从返回的axes(轴)对象中挤出,对于n×1或1×n个子图,返回一个一维数组,对于n×m,n>1和m>1返回一个二维数组;如果值为False,则表示不进行挤压操作,返回一个元素为Axes实例的二维数组,即使它最终是1×1。 

subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()函数来创建每个子图。 

gridspec_kw:字典类型,可选参数。把字典的关键字传递给GridSpec()构造函数创建网格区域,然后将子图放在网格(grid)里。 **fig_kw:把所有详细的关键字参数传递给figure。

import matplotlib.pyplot as plt
plt.figure(figsize=(10,8),facecolor='c')
figure,axes=plt.subplots(1,3)
axes[0].plot([1,2,3,4,5])
axes[1].bar([1,2,3,4,5],[4,5,6,7,2])
axes[2].pie([1,2,3,4,5])

?

?

3.add_subplot()函数

add_subplot()函数也可以实现在一张图上绘制多个子图表,用法与subplot()函数基本相同

总结:以上用3种方法实现了在一张图上绘制多个子图表,3种方法各有所长。subplot()函数和add_subplot()函数比较灵活,定制化效果比较好,可以实现子图表在图中的各种布局(如一张图上可以随意摆放3个或5个图表);而subplots()函数较为不灵活,但它可以用较少的代码实现绘制多个子图表。

图表的保存

plt.savefig('image.png')

需要注意的一个关键问题:保存代码必须在图表预览前,也就是plt.show()代码前;否则保存后的图片是白色,图表无法保存。

双y轴可视化数据分析图表

双y轴可视化数据分析图表的实现主要使用add_suplot()函数和twinx()函数。twinx()函数表示共享x轴,那么也就是一个x轴、两个y轴

import pandas as pd
import matplotlib.pyplot as plt
df =pd.read_excel('mrbook.xlsx')
x=[1,2,3,4,5,6]
y1=df['销量']
y2=df['rate']
flg=plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
ax1=fig.add_subplot(111)
plt.title('销量占比情况')
plt.xticks(x,['1月','2月','3月','4月','5月','6月'])
ax1.bar(x,y1,label='left')
ax1.set_ylabel('销量 (册)')
ax2=ax1.twinx()
ax2.plot(x,y2,color='black',linestyle='--',marker='o',linewidth=2,label=u'增长率')
ax2.set_ylabel(u'增长率')
for a,b in zip(x,y2):
    plt.text(a,b+0.02,'%.2f%b',ha='center',va='bottom',fontsize=10,color='red')
plt.show()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 19:00:59  更:2022-06-08 19:03:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 15:23:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码