1.极地图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec x = [1, 2, 3, 4, 5] y = [2, 3, 5, 7, 6] gridspec = GridSpec(1, 3) # 极地图:projection='polar' ax1 = plt.subplot(gridspec[0, 0:2], projection='polar') ax1.plot(x, y, '--', lw=2) ax1.set_theta_zero_location('N') # 0度在东西南北哪个方位,逆时针增加角度。N, NW, W, SW, S, SE, E, NE ax1.set_thetagrids([0, 50, 66, 90, 133, 180, 270]) # 指定显示的切角线-经度线 # ax1.set_theta_offset(0) # 弧度偏移n。顺逆时针偏移对应的角度= 180 / π × n,大概57*n。0对应顺时针90度 ax1.set_rlim(0, 12) # 指定纬度线值区间-圆环-半径。最好包括下面2项设置全部的值 ax1.set_rgrids([0, 3, 4, 8, 9]) # 设置若干可以显示的纬度线值。 ax1.set_rticks([3, 4, 9]) # 显示这些纬度线值,要在上面设置的列表里。 ax1.set_rlabel_position(0) # 设置纬度线文字在哪个角度线上 ax1.set_title("极地坐标图") # 普通直角图 ax2 = plt.subplot(gridspec[0, 2:3], facecolor="#dfee9a") ax2.plot(x, y, '--', lw=2) # ax2.set_title("直角坐标图", x=1.2, y=-0.15) ax2.set_title("直角坐标图", x=1.2, y=0.5, rotation=-30) plt.show() |
2.柱形图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import matplotlib.pyplot as plt prop_width = 0.25 # 柱的宽度比例 # ====1.蓝柱子==== # 控制柱子的位置。元素数量和数据元素相同。数值要均匀。 prop1_index = [1, 2, 3, 4, 5] # 绘图柱子高度数据 prop1_height = [20, 35, 30, 35, 27] bar1 = plt.bar( # x=prop1_index, # 柱子位置集合 height=prop1_height, # 柱子数据结合 width=prop_width, # 柱宽比例0-1。按元素数量平分得到的数字,乘以这个数。默认0.8 # alpha=0.4, # 柱子透明度 color='b', # 柱子颜色 label='蓝柱子') # 图形标注-图里 # ====2.红柱子==== prop2_index = [i + prop_width for i in prop1_index] prop2_height = (25, 32, 34, 20, 25) bar2 = plt.bar(prop2_index, prop2_height, width=prop_width, color='r', label='红柱子') # ====3.x轴==== mark_index = [i + prop_width / 2 for i in prop1_index] x_marks = ('A', 'B', 'C', 'D', 'E') # 和数据数量相同 plt.xticks( # x 轴刻度线 ticks=mark_index, # 位置 labels=x_marks) # 文字 plt.legend() # 显示图例 plt.tight_layout() # 自动调整图像间隔 plt.show() |
3.直方图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocator data = [8, 9, 13, 14, 14, 15, 23, 28] fig, (ax0, ax1, ax2, ax3, ax4) = plt.subplots(nrows=5, figsize=(5, 7)) ax0.hist( # data, # bins=30, # 分析出数据元素最小-最大的数值跨度,lizt = min -> max # 整数:将lizt分成几组-柱子的个数。默认10。 # 所有数据元素放到对应大小区间的组里。组不够多则合并显示为概率或计数。 histtype='bar', # 类型。默认bar facecolor='yellowgreen', # 颜色 density=None, # True元素出现的概率;False/None元素出现次数。默认False cumulative=False, # 是否累积。计算累加分布。默认false rwidth=0.3, # 柱子宽度 alpha=0.75) # 透明度 ax0.xaxis.set_major_locator(MultipleLocator(1)) ax1.hist( # data, # bins=30, # range=(5, 20), # 只显示这个区间的数值 rwidth=0.3) # ax1.set_xlim(5, 30) # ax1.xaxis.set_major_locator(MultipleLocator(1)) ax2.hist( # data, # bins=5, # rwidth=0.3) # ax2.xaxis.set_major_locator(MultipleLocator(1)) ax3.hist( # data, # bins=[5, 10, 20, 30], # 分析出数据元素最小-最大的数值跨度,lizt = min -> max # 序列:将每个分组的临界值都标识出来。每个组的组距都可以是不同的。 # 如果分5组记得需要的临界值是6个,参数序列中需要有6个数值 rwidth=0.3) # ax3.xaxis.set_major_locator(MultipleLocator(1)) ax4.hist( # data, # bins=[5, 10, 20, 30], # rwidth=0.3) # plt.show() |
4.散点图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import matplotlib.pyplot as plt import random x = [random.randint(1, 10) * x for x in range(1, 10)] y = [random.randint(2, 10) * x for x in range(1, 10)] s = [random.randint(5, 35) * x for x in range(21, 30)] c = [random.choice('rgbyckm') for x in range(0, 9)] fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.scatter( # x, # 横坐标 y, # 纵坐标 s=s, # 图像大小。或统一大小 c=c, # 颜色。或统一颜色 marker=(5, 1), # 线条型图片。 # 第1个数字表示有几个竖杠。如1个为|,2个为+,3个为六芒星,4个为米,5个为五角星,,, # 第2个数字取1/2。1为撑开图形,2位收敛图形 alpha=0.5, # lw=2, # 边框宽度 facecolors='none') # plt.show() |
5.饼图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import matplotlib.pyplot as plt labels = ['娱乐', '育儿', '饮食', '房贷', '交通', '其它'] sizes = [2, 5, 12, 70, 2, 9] # 总和100 explode = (0, 0, 0, 0.1, 0, 0) # '房贷'偏离圆心 plt.pie( # x=sizes, # 扇面比例。如 2/100*360 explode=explode, # 离开中心距离 labels=labels, # 扇面的标注文字 autopct='%1.1f%%', # 百分比显示设置。可使用format字符串或format function shadow=False, # 饼图下阴影。默认值:False,即不画阴影 startangle=0) # 起始绘制角度,默认图是从x轴正方向逆时针画起,如90°则从y轴正方向画起 # labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧; # pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6; # radius :控制饼图半径,默认值为1; # counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。 # wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。 # textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。 # center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。 # frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。 # rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。 plt.title("饼图") plt.show() |
6.几何图形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import matplotlib.pyplot as plt fig = plt.figure(1) # 创建一个窗口 ax = fig.add_subplot(1, 1, 1) # 添加一个子图 # 默认都使用小数,表示在窗口宽高的百分比位置。 rect1 = plt.Rectangle( # (0.1, 0.2), # x, y 0.2, # 宽 0.3, # 高 color='r') # 创建一个矩形,参数:(x,y),width,height circ1 = plt.Circle( # (0.7, 0.2), # 圆心x y 0.15, # 半径。默认圆形会跟随窗口大小进行缩放 color='r', # alpha=0.3) # 创建一个椭圆,参数:中心点,半径, pgon1 = plt.Polygon( # [[0.45, 0.45], # 每个顶点坐标 [0.65, 0.6], # [0.5, 0.65], # [0.35, 0.76], # [0.2, 0.6]]) # 最后一个顶点自动与第一个顶点闭合 pgon1.set_label("多边形") ax.add_patch(rect1) # 将形状添加到子图上 ax.add_patch(circ1) ax.add_patch(pgon1) ax.axis('equal') # xy轴等比。现象:圆是否为正圆 fig.canvas.draw() # 子图绘制 plt.show() |
7.绘图类PolyCollection和Poly3DCollection
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import matplotlib.pyplot as plt from matplotlib.collections import PolyCollection from mpl_toolkits.mplot3d.art3d import Poly3DCollection vertices_2d = [ # 点(x,y) # 4个顶点-四边形 [(0.23, 0.21), (0.7, 0.3), (0.5, 0.5), (0.1, 0.6)], # # 3个顶点-三角形 [(0.55, 0.65), (0.6, 0.8), (0.8, 0.6)]] poly_2d = PolyCollection(vertices_2d, edgecolor="none", linewidths=0, color=['red', "blue"]) ax1 = plt.subplot(2, 1, 1, projection='rectilinear') ax1.add_collection(poly_2d) vertices_3d = [ # 点(x,y,z)。 # 3个顶点-三角形 [[0.61377549, 0.68580259, 0.96418538], # [0.15825059, 0.54761657, 0.77019897], # [0.66885340, 0.03589625, 0.12602636]], # # 4个顶点-四边形,如果点的位置不协调,面可能是褶皱的 [[0.13767549, 0.12596858, 0.96418538], # [0.28515829, 0.56547617, 0.52339897], # [0.38515829, 0.66547617, 0.44019897], # [0.60515829, 0.47656517, 0.39827097], # [0.50216684, 0.29620355, 0.52602636]], # ] poly_3d = Poly3DCollection(vertices_3d, edgecolor="none", linewidths=0, color=["blue", 'red']) ax2 = plt.subplot(2, 1, 2, projection='3d') ax2.set_xlabel('X', fontdict={'size': 15, 'color': 'red'}) ax2.set_ylabel('Y', fontdict={'size': 15, 'color': 'red'}) ax2.set_zlabel('Z', fontdict={'size': 15, 'color': 'red'}) ax2.add_collection3d(poly_3d) plt.show() |
- end
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/2975.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设