Matplotlib基础

一、绘制函数图像:

from matplotlib import pyplot as plt
import numpy as np
#生成(-50,50)的数组
x = np.arange(-50,50)
#计算因变量y的值
y = x ** 2
#根据x、y数组绘制图像y=x^2,其中属性设置图像显示参数,其中marker...设置标记点特性
plt.plot(x,y,linewidth=1,label="y=x^2的label参数",linestyle="-",color="r")

#修改字体配置,允许中文
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

#添加标题
plt.title("这是y=x^2的图像,范围[-50,50)",fontsize=16)

#图例,默认使用每个图像的label值作为图例说明
plt.legend(loc="upper right")

#显示网格,linestyle设置虚线实线,linewidth设置网格宽度,axis:x/y/both设置x/y/两者的网格
plt.grid(linestyle="--") 

#设置图像分辨率:72对应432*288、100对应600*400、300对应1800*1200,
plt.rcParams["figure.dpi"] = 100

#设置图像尺寸:
plt.rcParams["figure.figsize"] = (3,2)

#设置x、y轴名称
plt.xlabel("x轴")
plt.ylabel("y轴")

#设置x、y坐标区间
plt.xlim(x.min(),x.max())
plt.ylim(y.min(),y.max())

#设置x、y轴显示刻度,ticks设置刻度显示范围,rotation设置旋转角度,label覆盖原x刻度信息
x_titcks = range(-50,50,30)
plt.xticks(ticks=x_titcks,rotation=45,labels=["%i 刻"%i for i in x_titcks],color="red")

#修改坐标轴位置:1.获取当前坐标轴、2.spines确定top/bottom/left/right轴、set_color设置颜色、set_position设置移动百分比 
ax = plt.gca()
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
ax.spines["left"].set_position(("axes",0.5))

#向坐标区添加文本
for a in [-50,-25,0,25,50]:
	#(x,y,data)表示循环在图像(x,y)位置添加数据data
    plt.text(a,a**2,a**2)

#显示图形操作菜单
%matplotlib notebook
#显示构建的图像
plt.show()

在这里插入图片描述

二、创建画布对象:

#创建图形对象
plt.figure(
    num="f1",#图像编号
    figsize=(4,2),#指定图像宽高,单位英寸
    dpi=100,#分辨率
    facecolor="gray",#背景颜色
    edgecolor=None,#边框颜色
    frameon=True#是否显示边框
    #颜色等其他图像设置
)

三、绘制多子图:

通过在figure对象上创建Axes子图在figure的选定区域上进行图像绘制。

1.自定义划分子图:

from matplotlib import pyplot as plt
import numpy as np
#创建图形对象
fig = plt.figure(num="f1",#图像编号)
#在fig对象上创建Axes子图:参数距离边界百分比[left,bottom,widith,height]
#1.ax1从距fig对象左边界0%距fig对象下边界50%开始,宽度高度50%
ax1 = fig.add_axes([0,0.5,0.5,0.5])
#2.ax2从距fig对象左边界50%距fig对象下边界0%开始,宽度高度50%
ax2 = fig.add_axes([0.5,0,0.5,0.5])

ax1.plot([1,2,3,4],[3,5,7,4],color="r")
ax2.plot([1,2,3,4],[4,8,2,8],color="b")

在这里插入图片描述

2.subplot( )均分子图:

from matplotlib import pyplot as plt
import numpy as np
#subplot为均分画布的函数,参数:(rows,cols,index)表示划分rows行cols列,该子图占用ax为第index(0,rows*cols)个子画布
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,2,3)
ax4 = plt.subplot(2,2,4)

ax1.plot([1,2,3,4],[3,5,7,4])
ax2.plot([1,2,3,4],[1,2,3,4])
ax3.plot([1,2,3,4],[8,4,2,4])
ax4.plot([1,2,3,4],[3,1,6,5])

#画布中的子图采用紧凑型布局(解决图标重叠问题)
plt.tight_layout()

在这里插入图片描述

3.subplot( )百分比划分子图:

from matplotlib import pyplot as plt
import numpy as np

ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(2,2,2)
ax3 = plt.subplot(2,2,4)

ax1.plot([1,2,3,4],[3,5,7,4])
ax2.plot([1,2,3,4],[1,2,3,4])
ax3.plot([1,2,3,4],[8,4,2,4])

#画布中的子图采用紧凑型布局(解决图标重叠问题)
plt.tight_layout()

在这里插入图片描述

from matplotlib import pyplot as plt
import numpy as np

ax1 = plt.subplot(3,1,3)
ax2 = plt.subplot(3,2,1)
ax3 = plt.subplot(3,2,2)
ax4 = plt.subplot(3,2,3)
ax5 = plt.subplot(3,2,4)

ax1.plot([1,2],[3,5])
ax2.plot([1,2],[1,2])
ax3.plot([1,2],[8,4])
ax4.plot([1,2],[7,6])
ax5.plot([1,2],[6,7])

#画布中的子图采用紧凑型布局(解决图标重叠问题)
plt.tight_layout()

在这里插入图片描述

4.subplots( )均分子图:

from matplotlib import pyplot as plt
import numpy as np
#subplots(rows,cols)函数返回值有两个:画布对象+子图数组
fig,axes = plt.subplots(2,2)

axes[0][0].plot([1,2,3,4],[3,5,7,4])
axes[0][1].plot([1,2,3,4],[1,2,3,4])
axes[1][0].plot([1,2,3,4],[8,4,2,4])
axes[1][1].plot([1,2,3,4],[3,1,6,5])

#画布中的子图采用紧凑型布局(解决图标重叠问题)
plt.tight_layout()

在这里插入图片描述

四、绘制柱状图:

1.bar( )参数:

在这里插入图片描述

2.简单柱状图:

from matplotlib import pyplot as plt
import numpy as np

#x轴坐标[1,2,3,4],高度[2,4,6,8]
plt.bar([1,2,3,4],[2,4,6,8],color=["r","g","b","y"])

在这里插入图片描述

3.同坐标多柱状图:

from matplotlib import pyplot as plt
import numpy as np

#国家
countries = ["挪威","德国","中国","美国","瑞典"]
#金牌
gold = [16,12,9,8,8]
#银牌
silver = [8,10,4,10,5]
#铜牌
bronze = [13,5,2,7,5]

#1.确定不同国家金银铜牌柱状图起始位置数组
x = np.arange(len(countries))
width = 0.2
#金牌起始位置数组
gold_x = x
#银牌起始位置数组
silver_x = x + width
#铜牌起始位置数组
bronze_x = x + width * 2

#2.绘制金牌图形:gold_x[i]位置分别绘制高度为gold[i]宽度为width的柱状图
plt.bar(gold_x,gold,width=width,color="gold")
#3.绘制银牌图形
plt.bar(silver_x,silver,width=width,color="silver")
#4.绘制铜牌图形
plt.bar(bronze_x,bronze,width=width,color="saddlebrown")

#5.ticks设置刻度显示范围,label覆盖原x刻度信息
plt.xticks(ticks=x+width,labels=countries)

#6.向坐标区添加文本
for i in x:
    plt.text(gold_x[i],gold[i],gold[i],va="bottom",ha="center")
    plt.text(silver_x[i],silver[i],silver[i],va="bottom",ha="center")
    plt.text(bronze_x[i],bronze[i],bronze[i],va="bottom",ha="center")

在这里插入图片描述

4.叠状图:

使用bottom属性

from matplotlib import pyplot as plt
import numpy as np

#国家
countries = ["挪威","德国","中国","美国","瑞典"]
#金牌
gold = [16,12,9,8,8]
#银牌
silver = [8,10,4,10,5]
#铜牌
bronze = [13,5,2,7,5]

#2.绘制金牌图形
plt.bar(countries,gold,bottom=np.array(silver)+np.array(bronze),color="gold")#注意列表相加要转为数组
#3.绘制银牌图形
plt.bar(countries,silver,bottom=bronze,color="silver")
#4.绘制铜牌图形
plt.bar(countries,bronze,bottom=0,color="saddlebrown")

在这里插入图片描述

5.水平柱状图:

参数同bar( )

from matplotlib import pyplot as plt
import numpy as np

#y轴坐标[1,2,3,4],宽度[2,4,6,8]
plt.barh([1,2,3,4],[2,4,6,8],color=["r","g","b","y"])

在这里插入图片描述

五、绘制直方图:

from matplotlib import pyplot as plt
import numpy as np
#生成随机数x数组
x = np.random.randint(100,200,100)
#统计随机数落在各个区间数量,绘制直方图(数据x,bins柱数量)
#返回值:n各个柱高度数组,bins是各个柱起始横坐标数组,patches是每个柱包含的数据,是一个列表
n,bins,pathches = plt.hist(x,bins=10,edgecolor="white")
#修改x刻度
plt.xticks(bins)

print(n)
print(bins)
for p in pathches:
    #每个柱的
    print("横坐标:",p.get_x())#起始横坐标
    print("宽度:",p.get_width())#宽度
    print("高度:",p.get_height())#高度
    
#绘制折线图:x=np.array(bins[0:10]+5),y=n
plt.plot(np.array(bins[0:10]+5),n,marker="o")

在这里插入图片描述
在这里插入图片描述

六、绘制饼状图:

from matplotlib import pyplot as plt
import numpy as np
#explode为距离原点半径,autopct显示百分比
plt.pie(x=[100,200,300,400],labels=["A","B","C","D"],autopct="%2.f%%",explode=[0.01,0.02,0.03,0.04])

在这里插入图片描述

七、绘制散点图:

from matplotlib import pyplot as plt
import numpy as np
#s为每个散点面积
plt.scatter(x=[1,2,3,4],y=[2,5,4,6],s=[10,100,1000,10000])

在这里插入图片描述

八、绘制箱线图:

1.入参一维数组:

from matplotlib import pyplot as plt
import numpy as np
#showmeans显示平均值点,meanline显示平均值线
plt.boxplot(np.arange(1,10),showmeans=True,meanline=True)

在这里插入图片描述

2.入参多维数组:

from matplotlib import pyplot as plt
import numpy as np
#对于二维数组,每列都绘制一个箱线图
plt.boxplot(np.arange(1,10).reshape(3,3),showmeans=True,meanline=True)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值