Python下matplotlib常见图形绘制

Matplotlib 是 Python 的一个2D绘图库,可以帮助我们绘制各种图形,下面介绍一些最常见的数学图形绘制方法。

1.直线图

import numpy as np 
import matplotlib.pyplot as plt 
 
x = np.arange(1,6) 
y =  2 * x
plt.title("LineGraph") #标题名
plt.xlabel("x axis") #x轴标注
plt.ylabel("y axis") #y轴标注
plt.plot(x,y) #以x为横坐标,y为纵坐标,按照(x,y)的顺序绘图
plt.show() #显示图像

运行结果:

关于上述代码中的plot函数,调用形式一般为:

plot([x], y, [fmt], data=None, **kwargs)

plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)

其中,fmt = [color][marker][linestyle],用于定义图的基本属性:颜色(color)、点型(marker)、线型(linestyle)。

**kwargs参数包括:x轴数据、y轴数据、线宽(linewidth)、线条颜色(color)。

通常,如果需要在一张图中绘制不同类别的数据点时,可以通过设置plot()参数来区分不同类别的点和相应的直线。


例如,我们可以将上述代码改为:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib
# 设置matplotlib显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 显示中文为黑体
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号

x1 = np.arange(-5,6) 
y1 =  2 * x
x2 = np.arange(-5,6) 
y2 =  x / 2
plt.title("直线图") 
plt.xlabel("x轴") 
plt.ylabel("y轴") 
plt.plot(x1,y1,'-.ro') #线形为点横线,数据点形状为圆圈,线条和数据点颜色为红色
plt.plot(x2,y2,':b+') #线形为点线,数据点形状为加号,线条和数据点颜色为蓝色
plt.show()

运行结果:

2.sin、cos函数图

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi, 256, endpoint=True) #获取x坐标
s, c = np.sin(x), np.cos(x) #获取y坐标
plt.plot(x, s,"r-")  
plt.plot(x, c,"g-")
plt.show()

运行结果:

3.条形图

pyplot 子模块提供 bar() 函数来生成条形图。

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import pyplot as plt 
x1 = [1,3,5] 
y1 = [1,2,3] 
x2 = [2,4,6] 
y2 = [3,2,1] 
plt.bar(x1, y1, facecolor='#9999ff', edgecolor='r') 
plt.bar(x2, y2, facecolor='c', edgecolor='k') 
plt.title('条形图') 
plt.xlabel('x轴') 
plt.ylabel('y轴') 
plt.show()

运行结果:

4.折线图

import matplotlib.pyplot as plt

x = [1,3,6,7,9,12]
y = [8,2,4,1,9,9]

plt.plot(x, y, 'rp-', markersize=10)
plt.title('折线图') 
plt.xlabel('x轴') 
plt.ylabel('y轴') 
plt.show()

运行结果:

5.直方图

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

# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)

# data:绘图数据
# bins:直方图的长条形数目,默认为10。
# density:是否将得到的直方图向量归一化,density默认为0代表不归一化,显示频数;density=1表示归一化,显示频率。
# facecolor:长条形的颜色
# edgecolor:长条形边框的颜色
# alpha:透明度
    
plt.hist(data, bins=50, density=1, facecolor="m", edgecolor="k", alpha=0.5)
plt.title('直方图') 
plt.xlabel('区间') 
plt.ylabel('频率') 
plt.show()

运行结果:

6.饼图

import matplotlib.pyplot as plt
import matplotlib

#以一个人数为60的班的学生考试成绩为例
label_list = ["0-59分", "60-70分", "70-80分", "80-90分", "90-100分"] #饼图各部分标签,对成绩划分区间
size = [3, 12, 15, 25, 5] #饼图各部分大小,各区间对应人数
color = ["#EB7AD4", "#76BFF0", "c", "#EFAA98", "#AA8ADC"]  #饼图各部分颜色
explode = [0, 0, 0, 0.1, 0]   # 设置突出值

# labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
# autopct:设置圆里面文本
# shadow:设置是否有阴影
# startangle:起始角度,默认从0开始逆时针转
# pctdistance:设置圆内文本距圆心距离
# patches:返回值
# l_text:圆内部文本
# p_text:圆外部文本

patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.12, autopct="%1.1f%%", shadow=True, startangle=90, pctdistance=0.8)
plt.axis("equal")    # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()

运行结果:

原文地址:https://www.cnblogs.com/BIXIABUMO/p/12500923.html