安装模块
pip3 install matplotlib
plt.figure()
x = np.arange(1, 11, 1)
y = 2 * x + 1
绘制图形:折线图
color:线的颜色
marker:点的样式
linestyle:线的样式
markerfacecolor:点的内部颜色
markersize:点的大小
markeredgecolor:点的边缘颜色
alpha:透明度
plt.plot(x,y,color="y",marker="D",linestyle="--")
plt.scatter(x,y)
plt.show()
效果如下:
只有高度有实际意义,横坐标表示柱子所在的位置,柱子的宽度没有实际的意义
要求:实现如下柱装图显示
分析:
针对上面的柱状图进行分析,可以发现它是由两组柱状图组成的,即红色的为一组,浅蓝色的为一组,且中间有一段间隔。一共有4个柱子,加上中间的一个间隔,可以视为有5个柱子。我们可以将水平方向分为5份,红色柱子处于1和4的位置,浅蓝色的柱子处于2和5的位置,即x1=[1,4],x2=[2,5],y的值极为相应x对应的值,即y1=[1000,300],y2=[800,100]
代码实现
修改字体
plt.rcParams["font.sans-serif"] = "Noto Sans CJK JP"
创建画布
plt.figure(facecolor="gray")
设置x,y的值
x1 = [1,4]
x2 = [2,5]
y1 = [1000,300]
y2 = [800,100]
绘制图形:柱状图
width:柱子宽度,默认为0.8
color:柱子颜色,color可以为一个列表,表示用列表中的颜色为柱子循环赋值
linewidth:为柱子设置一个边框
edgecolor:边框颜色
注意此处边框颜色和边框的线宽需要一一对应,即有几个柱子,添加几个颜色,几个线宽,这两个参数需要同步
plt.bar(x1,y1,color="red")
plt.bar(x2,y2,color="skyblue")
设置x轴显示的名称
x轴仅代表位置,我们只需要将"男","女"放在1.5和4.5的位置即可
plt.xticks([1.5,4.5],["男","女"])
标注文本
标注文本是在对应的(x,y)的那个点上进行标注,所以我们只需要找到标注点的坐标就找到了标注位置
va:垂直方向位置
ha:水平方向位置
bbox:文本框,可以设置文本框的颜色与透明度
# 合并x1,x2 和 y1 y2
x1.extend(x2)
y1.extend(y2)
# 第一个参数x代表横坐标
# 第二个参数y代表纵坐标
# 第三个参数y代表标注的值
for x,y in zip(x1,y1):
plt.text(x,y+2,y,fontdict=font,ha="center",va="center",bbox={"facecolor":"red","alpha":0.5,"edgecolor":"yellow"})
显示图形
plt.show()
效果如下:
代码如下:
import matplotlib.pyplot as plt
import numpy as np
# 修改字体
plt.rcParams["font.sans-serif"] = "Noto Sans CJK JP"
# 创建画布
plt.figure(facecolor="gray")
# 设置x,y的值
x1 = [1,4]
x2 = [2,5]
y1 = [1000,300]
y2 = [800,100]
# 绘制柱状图
plt.bar(x1,y1,color="red")
plt.bar(x2,y2,color="skyblue")
# 添加图例
plt.legend(["2019年","2020年"],facecolor="pink")
# 设置x轴显示的名称
plt.xticks([1.5, 4.5],["男","女"])
# 合并x1,y1,x2,y2
x1.extend(x2)
y1.extend(y2
)
# 标注文本
for x,y in zip(x1,y1):
plt.text(x,y+2,y,ha="center",va="center",bbox={"facecolor":"red","alpha":0.5,"edgecolor":"yellow"})
plt.show()
统计频数
创建画布
plt.figure(facecolor="gray")
设置x的值
x = np.random.randn(10000)
绘制直方图
bins:刻度数
x:要传入的样本
bins:区间的数目,可通过列表自行指定区间
color:直方图颜色
log:计数方法,默认为False,改为True时,使用科学计数法
plt.hist(x,bins=5,color="white")
plt.show()
效果如下:
plt.figure(facecolor="gray")
x = np.random.rand(10000)
# 指定bins
bins = [-0.01, 0.2, 0.4, 0.6, 0.8, 1.01]
plt.hist(x, bins=bins, log=True, color="blue")
plt.show()
效果如下:
创建画布,饼图最好是创建一个方的画布
plt.figure(figsize=(6,6))
绘制饼图
label:为饼图的各部分设置标签
autopct:显示饼图每个部分的百分比
explode:设置饼图各部分离圆心的距离
shadow:设置阴影
center:为饼图设置一个圆心,多用来画多个饼图时固定饼图的位置,防止多个饼图重合
x = [1000,2000,3000]
labels = ["A","B","C"]
plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0,1))
效果展示:
plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0.5,1.5))
效果如下:
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(6,6))
x = [1000,2000,3000]
labels = ["A","B","C"]
plt.pie(x,explode=[0.1,0.02,0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0,1))
plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0.5,1.5))
plt.show()
等分角度,创建x值
x = np.linspace(0, 2*np.pi, 3, endpoint=False)
设置y值
y = [2,1,3]
绘制雷达图
plt.figure(figsize=(6,6))
plt.polar(x,y)
plt.show()
效果展示
我们发现上图并没有闭合,而且角度不是我们定义的x的角度,我们需要一些参数来让上图闭合且将角度替换成x中的角度
x_concat:将第一个值放到尾部的位置
修改y的值
y = [2,1,3,2]
闭合x轴角度,将第一个值放到末尾位置
x_concat:将第一个值放到尾部的位置
x_concat = np.concatenate(x,[x[0]])
plt.figure(figsize=(6,6))
plt.polar(x_concat,y)
设置角度为x中的角度
plt.xticks(x)
plt.show()
效果如下:
接下来对样式做一些修改
填充颜色
前两个参数j为将点连接起来确定填充范围,第三个参数为填充颜色,alpha为透明度
plt.fill(x_concat,y,"y",alpha=0.2)
修改坐标点样式
此处的参数可参照折线图的样式来修改
plt.polar(x_concat,y,marker="s",linestyle="--")
效果如下:
完整代码:
import matplotlib.pyplot as plt
import numpy as np
# 等分角度,创建x值
x = np.linspace(0, 2*np.pi, 3, endpoint=False)
# 设置y轴
y = [2,1,3,2]
# 闭合x轴角度,将第一个值放到末尾位置
x_concat = np.concatenate((x,[x[0]]))
# 绘制雷达图
plt.figure(figsize=(6,6))
plt.xticks(x)
plt.fill(x_concat,y,"y",alpha=0.2)
plt.polar(x_concat,y,marker="s",linestyle="--")
plt.show()
-1609168268320)]
完整代码:
import matplotlib.pyplot as plt
import numpy as np
# 等分角度,创建x值
x = np.linspace(0, 2*np.pi, 3, endpoint=False)
# 设置y轴
y = [2,1,3,2]
# 闭合x轴角度,将第一个值放到末尾位置
x_concat = np.concatenate((x,[x[0]]))
# 绘制雷达图
plt.figure(figsize=(6,6))
plt.xticks(x)
plt.fill(x_concat,y,"y",alpha=0.2)
plt.polar(x_concat,y,marker="s",linestyle="--")
plt.show()