matplotlib
1.绘制直方图
# 绘制直方图 import matplotlib.pyplot as plt # 以后plt等价于matplotlib.pyplot # 设置中文支持,中文字体为简体黑体 from matplotlib import rcParams rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei' ax = plt.figure().add_subplot() # 建图,获取子图对象ax ax.bar(x=(0.2, 0.4, 0.6, 0.8, 1.0, 1.2), height=(1, 2, 3, 0.5, 4, 1), width=0.1) # x表示4个柱子中心横坐标分别是0.2, 0.6, 0.8, 1.2 # height表示4个柱子高度分别是1, 2, 3, 0.5 # width表示柱子宽度0.1 ax.set_title('我的直方图') plt.show()
2.绘制堆叠直方图
import matplotlib.pyplot as plt ax = plt.figure().add_subplot() # 建图,获取子图对象 labels = ['Jan', 'Feb', 'Mar', 'Apr'] num1 = [20, 30, 15, 35] # Dept1的数据 num2 = [15, 30, 40, 20] # Dept2的数据 cordx = range(len(num1)) # x轴刻度位置 rects1 = ax.bar(x=cordx, height=num1, width=0.5, color='red', label="Dept1") rects2 = ax.bar(x=cordx, height=num2, width=0.5, color='green', label="Dept2", bottom=num1) # bottom指定直方图的底部在哪个位置 ax.set_ylim(0, 100) # y轴坐标范围 ax.set_ylabel("profit") # y轴含义标签 ax.set_xticks(cordx) # 设置x轴刻度位置 ax.set_xticklabels(labels) # 设置x轴刻度下方文字 ax.set_title("My company") ax.set_xlabel("In year 2020") # x轴含义(标签) ax.legend() # 在右上角显示图例说明 plt.show()
3.绘制对比直方图
import matplotlib.pyplot as plt ax = plt.figure(figsize=(10, 5)).add_subplot() # 创建窗口,并且获取子图对象 ax.set_ylim(0, 400) # 指定y轴坐标范围 ax.set_xlim(0, 80) # 指定x轴坐标范围 # 以下三个是直方图数据 x1 = [7, 17, 27, 37, 47, 57] # 第一组直方图每个柱子中心点的横坐标 x2 = [13, 23, 33, 43, 53, 63] # 第二组直方图每个柱子中心点的横坐标 x3 = [10, 20, 30, 40, 50, 60] # 第三组直方图每个柱子中心点的横坐标 y1 = [41, 39, 13, 69, 39, 14] # 第一组直方图每个柱子的高度 y2 = [123, 15, 20, 105, 79, 37] # 第二组直方图每个柱子的高度 y3 = [124, 91, 204, 264, 221, 175] # 第三组直方图每个柱子的高度 rects1 = ax.bar(x1, y1, facecolor='red', width=3, label='Iphone') rects2 = ax.bar(x2, y2, facecolor='green', width=3, label='Huawei') rects3 = ax.bar(x3, y3, facecolor='blue', width=3, label='Xiaomi') ax.legend() # 在右上角显示三组图的说明 ax.set_xticks(x3) # x轴在x3中的各坐标点下面加刻度 ax.set_xticklabels(('A1', 'A2', 'A3', 'A4', 'A5', 'A6')) # 指定x轴每一个刻度下的文字 def label(ax, rects): # 在rects的每个柱子顶端标注数值 for rect in rects: height = rect.get_height() ax.text(rect.get_x() + rect.get_width()/2.0, height+14, str(height), rotation=90) # rotation文字逆时针旋转90度, ax.text()在子图的每一个位置都可以插入文字,rect.get_x()获取左侧的横坐标 label(ax, rects1) label(ax, rects2) label(ax, rects3) plt.show()
4.绘制折线图和散点图
import math, random import matplotlib.pyplot as plt def drawPlot(ax): xs = [i / 100 for i in range(1500)] # 1500个点的横坐标,间隔0.01 ys = [10*math.sin(x) for x in xs] # 对应曲线y=10*sin(x)上的1500个点的y坐标 ax.plot(xs, ys, "red", label="Beijing") # 画曲线y=10*sin(x),plot将点从左到右连接起来,看起来是曲线图,实际上是折线图 ys = list(range(-18, 18)) random.shuffle(ys) # 将-18~17的列表打乱 ax.scatter(range(16), ys[:16], c="blue") # 画散点,横坐标0,1,2...15,纵坐标随机 ax.plot(range(16), ys[:16], "blue", label="Shanghai") # 画折线 ax.legend() # 显示右上角的各条折线说明 ax.set_xticks(range(16)) # x轴在坐标0,1...15处加刻度 ax.set_xticklabels(range(16)) # 指定x轴每个刻度下方显示的文字 ax = plt.figure(figsize=(10, 4), dpi=100).add_subplot() # 图像长度和清晰度 drawPlot(ax) plt.show()
5.绘制饼图
import matplotlib.pyplot as plt def drawPie(ax): lbs = ('A', 'B', 'C', 'D') # 四个扇区的标签 sectors = [16, 29.55, 44.45, 10] # 四个扇区的份额(百分比) expl = [0, 0.1, 0, 0] # 四个扇区的突出程度, 0.1表示半径的0.1 ax.pie(x=sectors, labels=lbs, explode=expl, autopct='%.2f', shadow=True, labeldistance=1.2, # labeldistance=1.1表示标签离圆心距离为1.1倍半径 pctdistance=0.6, startangle=90) # pctdistance=0.6表示份额距离圆心的距离为0.6倍半径,startangle=90表示从90度的地方开始画 ax.set_title("pie sample") ax = plt.figure().add_subplot() drawPie(ax) plt.show()
6.绘制热力图
import numpy as np from matplotlib import pyplot as plt data = np.random.randint(0, 100, 30).reshape(5, 6) # 生成一个5行6列,元素[0, 100]内的随机矩阵 xlabels = ['Beijing', 'Shanghai', 'Chengdu', 'Guangzhou', 'Hangzhou', 'Wuhan'] ylabels = ['2016', '2017', '2018', '2019', '2020'] ax = plt.figure(figsize=(10, 8)).add_subplot() ax.set_yticks(range(len(ylabels))) # y轴在坐标[0, len(ylabels)]处加刻度 ax.set_yticklabels(ylabels) # 设置y轴刻度文字 ax.set_xticks(range(len(xlabels))) # x轴在坐标[0, len(xlabels)]处加刻度 ax.set_xticklabels(xlabels) # 设置x轴刻度文字 heatMp = ax.imshow(data, cmap=plt.cm.hot, aspect='auto', vmin=0, vmax=100) for i in range(len(xlabels)): for j in range(len(ylabels)): ax.text(i, j, data[j][i], ha="center", va="center", color="blue", size=26) plt.colorbar(heatMp) # 绘制右边的颜色-数值对照柱 plt.xticks(rotation=45, ha="right") # 将x轴刻度文字进行旋转,且水平方向向右对齐 plt.title("Sales Volume(ton)") plt.show()