当前位置:   article > 正文

【学习笔记】Python大数据处理与分析——Matplotlib数据可视化_matplotlib数据量大怎么绘图

matplotlib数据量大怎么绘图

一、绘图步骤

1、导入第三方库

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

2、准备数据

  1. x1 = np.linspace(1, 10, 5)
  2. y1 = np.sin(x1)

3、开始绘图

plt.plot(x1, y1, linewidth=3)

4、完善图表

  1. plt.title("plot figure")
  2. plt.xlabel("value of x")
  3. plt.ylabel("value of y")

5、展示结果

plt.show()

        绘制图形如下:

二、经典图形绘制

1、折线图

        plot()函数的原型为plt.plot(x, y, format_string, **kwargs),参数分别为:

x:x轴数据(列表或函数,可选)

y:y轴数据(列表或函数,必选)

format_string:控制线条的格式字符串(定义线条的基本属性,如颜色、点型和线型,可选)

**kwargs:一系列可选关键字参数(如label指定线条标签,linewidth指定线条宽度,color指定线条颜色等)

  1. plt.plot(x1, y1, color='red', marker='o', linestyle='dashed', linewidth=1, markersize=4, label="figure")
  2. plt.title("first graph", fontsize=20) # 图表标题
  3. plt.xlabel("value of X", fontsize=12) # x轴标签
  4. plt.ylabel("value of Y", fontsize=12) # y轴标签
  5. plt.tick_params(axis='both', labelsize=10) # 刻度样式
  6. plt.grid(ls=":", c="b") # 网格线
  7. plt.text(4, 0.1, "y=sin(x)", weight="bold", color="b") # 注释文本
  8. plt.legend(loc="lower left") # 图例
  9. plt.show()

        绘制图形如下:

2、柱状图

        bar()函数的原型为matplotlib.pyplot.bar(x, height, width=0.8, bottom=0, align='center', data=None, **kwargs),参数分别为:

x:标量序列,标示在x轴上的定性数据类别,即每个柱状的x轴坐标

height:标量或标量序列,和x对应,确定每种定性数据类别的数量,即柱状的y轴高度

width:标量或数组形式序列,可选,决定单个柱状图的宽度,默认值为0.8

bottom:标量或数组等类似序列,设置y边界坐标轴起点,默认值为0

align:可选的两个值为{‘center’, ‘edge’},其默认值为center,使基准在x位置居中。

**kwargs:传递一系列的关键字参数,如color指定柱状图颜色(单一颜色为全部使用此颜色,而颜色列表会逐一染色),edgecolor指定柱状边缘的颜色;linewidth指定柱状的宽度,tick_label设置柱状图的刻度标签,默认为无标签,根据x的设置来显示,hatch设置条形的绘制风格,每种hatch字符代表填充的形状(/代表斜杆,*代表五角星,.代表点,o代表圆形......)

  1. x2 = [1, 2, 3, 4, 5, 6]
  2. y2 = [7, 5, 3, 9, 4, 6]
  3. mpl.rcParams["font.sans-serif"] = "SimHei" # 字体样式
  4. mpl.rcParams["axes.unicode_minus"] = False # 字符显示
  5. mpl.rcParams["font.size"] = 12 # 字体大小
  6. plt.bar(x2, y2, width=0.4, align="center", tick_label=["toy", "cup", "battery", "textbook", "computer", "phone"], color=['c', 'b', 'r'], hatch='/')
  7. plt.xlabel("箱子类型")
  8. plt.ylabel("箱子重量(kg)")
  9. plt.title("货运箱重量统计", color="b")
  10. plt.show()

        绘制图形如下:

3、直方图

        hist()函数的原型为plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs),参数分别为:

x: 必需参数,用于绘制直方图的数据
bins: 可选参数,指定直方图的柱子数量或柱子的边界值。默认值为10
range: 可选参数,指定直方图的取值范围。默认值为数据的最小值和最大值
density: 可选参数,指定是否将直方图的高度归一化为概率密度。默认值为False
histtype: 可选参数,指定直方图的类型。可以是’bar’(默认值),‘barstacked’,‘step’,'stepfilled’等
color: 可选参数,指定直方图的颜色
label: 可选参数,指定直方图的标签,用于图例显示
align: 可选参数,指定柱子的对齐方式。可以是’left’,‘mid’(默认值),‘right’
orientation: 可选参数,指定直方图的方向。可以是’vertical’(默认值),‘horizontal’
rwidth: 可选参数,指定柱子的宽度,取值范围为[0, 1]。默认值为None,表示自适应宽度
**kwargs:传递其他关键字参数,用于进一步自定义直方图的样式和属性

  1. x3 = [np.random.randint(0, 100, 40), np.random.randint(0, 100, 40)]
  2. y3 = list(range(0, 101, 10))
  3. mpl.rcParams["font.sans-serif"] = "SimHei"
  4. mpl.rcParams["axes.unicode_minus"] = False
  5. mpl.rcParams["font.size"] = 12
  6. plt.hist(x3, bins=y3, color=['c', 'b'], histtype="bar", rwidth=1, alpha=0.6, edgecolor="black", label=['一班', '二班'])
  7. plt.xlabel("测试成绩")
  8. plt.ylabel("学生人数")
  9. plt.title("学生英语考试分数统计", color="r")
  10. plt.legend()
  11. plt.show()

         绘制图形如下:

4、散点图

        scatter()函数的原型为matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs),参数分别为:

x,y:输入点列的数组,长度都是size

s:点的直径数组,默认直径20,长度最大size

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组

marker:点的样式,默认小圆圈 'o'。

cmap:默认None,标量或者是一个colormap的名字,只有c是一个浮点数数组时才使用。如果没有申明就是 image.cmap

norm:默认None,数据亮度在0-1之间,只有c是一个浮点数的数组的时才使用

vmin,vmax:亮度设置,在norm参数存在时会忽略

alpha:透明度设置,0-1之间,默认None,即不透明

linewidths:标记点的长度

edgecolors:颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None

plotnonfinite:布尔值,设置是否使用非限定的c(inf, -inf 或 nan) 绘制点

**kwargs:其他参数。

        以随机漫步过程为例:

  1. from random import choice # 补充
  2. class RandomWalk:
  3. def __init__(self, point_num=50000):
  4. self.point_num = point_num
  5. self.xval = [0]
  6. self.yval = [0]
  7. def fill_walk(self):
  8. while len(self.xval) < self.point_num:
  9. # 计算x和y的漫步方向和步数
  10. x_direction = choice([1, -1])
  11. step_num = choice([0, 1, 2, 3, 4])
  12. xstep = x_direction * step_num
  13. y_direction = choice([1, -1])
  14. step_num = choice([0, 1, 2, 3, 4])
  15. ystep = y_direction * step_num
  16. # 如果原地踏步,则跳过此次循环
  17. if xstep == 0 and ystep == 0:
  18. continue
  19. # 计算下个点的坐标
  20. x_next = self.xval[-1] + xstep
  21. y_next = self.yval[-1] + ystep
  22. # 将该点坐标加入xval和yval两个列表
  23. self.xval.append(x_next)
  24. self.yval.append(y_next)
  25. rw = RandomWalk()
  26. rw.fill_walk()
  27. fig, ax = plt.subplots()
  28. point_numbers = list(range(rw.point_num))
  29. # 按point_numbers列表指定的点序绘制渐变色散点
  30. ax.scatter(rw.xval, rw.yval, c=point_numbers, edgecolors='none', s=2)
  31. # 绘制起点和终点
  32. ax.scatter(0, 0, c='green', edgecolors='none', s=2)
  33. ax.scatter(rw.xval[-1], rw.yval[-1], c='red', edgecolors='none', s=2)
  34. # 隐藏坐标轴
  35. ax.axes.get_xaxis().set_visible(False)
  36. ax.axes.get_yaxis().set_visible(False)
  37. plt.show()

        绘制图形如下: 

5、等值(量)线图

(1)导入所需要的库

  1. import matplotlib.pyplot as plt
  2. import matplotlib as mpl
  3. import numpy as np

(2)数据准备

  1. n = 128
  2. x4 = np.linspace(-4, 4, n)
  3. y4 = np.linspace(-4, 4, n)

(3)填充等高线颜色

  1. def f(x, y):
  2. z = (1 - y ** 6 + x ** 6) * np.exp(-x ** 2 - y ** 2)
  3. return z
  4. # 生成mesh网格状数据,用f()函数计算网格面上每点对应高度值,结合网格上每点二维坐标绘制等高线
  5. x5, y5 = np.meshgrid(x4, y4)
  6. z = f(x5, y5)
  7. # 填充等高线
  8. plt.contourf(x5, y5, z)

        此时的绘制情况如下:

        为显示热力图,需修改plt.contourf():

csf = plt.contourf(x5, y5, z, cmap=mpl.cm.hot)

        修改后的绘制情况如下:

(4)绘制等高线

  1. # 绘制等高线
  2. cs = plt.contour(x4, y4, z, 10, colors='black')
  3. # 添加等高线文字标签
  4. plt.clabel(cs, inline=True, fontsize=12)
  5. # 添加图例
  6. plt.colorbar(csf)

(5)输出等高线图 

plt.show()

        绘制图形如下:

6、地理信息可视化

(1)平面世界地图

  1. # 设置投影方式
  2. map1 = Basemap(projection='cyl')
  3. # 背景上蓝色
  4. map1.drawmapboundary(fill_color='aqua')
  5. # 陆地上土黄色,江河湖泊上蓝色
  6. map1.fillcontinents(color='coral', lake_color='aqua')
  7. # 绘制图像
  8. map1.drawcoastlines()
  9. plt.show()

        绘制图形如下:

(2)球状世界地图

  1. # 设置投影方式
  2. map2 = Basemap(projection="ortho", lat_0=30, lon_0=120)
  3. # 背景上蓝色
  4. map2.drawmapboundary(fill_color="aqua")
  5. # 陆地上土黄色,江河湖泊上蓝色
  6. map2.fillcontinents(color="coral", lake_color="aqua")
  7. # 绘制图像
  8. map2.drawcoastlines()
  9. plt.show()

        绘制图形如下:

 

三、图表调整及美化

        大致分为添加图例和标题,调整刻度格式、标签设置、内容和格式设置,添加网格线,绘制参考线,添加图表注释,向统计图形添加表格,颜色参数使用和颜色映射表使用,细节处可自行查询函数说明,示例代码如下:

  1. # 设置字体
  2. mpl.rcParams["font.sans-serif"] = "SimHei"
  3. mpl.rcParams["axes.unicode_minus"] = False
  4. # 数据准备
  5. x6 = np.linspace(0.2, 3.0, 100)
  6. y6 = np.sin(x6)
  7. y6_ = np.random.randn(100)
  8. # 绘图
  9. plt.scatter(x6, y6_, c="green", label="散点图", edgecolors="none")
  10. plt.plot(x6, y6, ls="--", c="red", lw=3, label="曲线图")
  11. # 设置刻度范围
  12. plt.xlim(0.0, 4.0)
  13. plt.ylim(-4.0, 4.0)
  14. # 设置坐标轴标签
  15. plt.xlabel("X轴")
  16. plt.ylabel("Y轴", rotation=360)
  17. # 设置网格
  18. plt.grid(True, ls=":", color="grey")
  19. # 设置参考线
  20. plt.axhline(y=0.0, c="r", ls="--", lw=2)
  21. # 设置注释
  22. plt.annotate("y=sin(x)", xy=(np.pi / 2, 1.0), xytext=(1.8, 2), color="r", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
  23. plt.annotate("y,x轴", xy=(0.75, -4), xytext=(0.35, -2.7), color="b", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
  24. plt.annotate("", xy=(0, -3.5), xytext=(0.3, -2.7), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
  25. plt.annotate("", xy=(3.5, 0.0), xytext=(3.4, -1.0), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
  26. plt.text(3.0, -1.3, "图表参考线", color="b", fontsize=15)
  27. # 设置标题
  28. plt.title("图标元素设置示例", color="m", fontsize=20)
  29. # 设置图例
  30. plt.legend(loc="upper right", fontsize=12)
  31. # 显示图形
  32. plt.show()

        绘制图形如下:

四、综合案例

  1. import matplotlib.pyplot as plt
  2. import matplotlib as mpl
  3. from random import randint
  4. mpl.rcParams["font.sans-serif"] = "Microsoft YaHei"
  5. mpl.rcParams["axes.unicode_minus"] = False
  6. # 骰子类
  7. class Die:
  8. def __init__(self, num=6):
  9. self.num = num
  10. def roll_die(self):
  11. return randint(1, self.num)
  12. die1 = Die()
  13. die2 = Die()
  14. results = []
  15. count_nums = []
  16. x7 = list(range(1, 13))
  17. # 掷2000次,结果存入result列表
  18. for roll_num in range(2000):
  19. result = die1.roll_die() + die2.roll_die()
  20. results.append(result)
  21. # 统计每一面被掷到的次数
  22. for value in range(1, die1.num + die2.num + 1):
  23. count_num = results.count(value)
  24. count_nums.append(count_num)
  25. # 绘制图表
  26. plt.bar(x7, count_nums, width=0.7, edgecolor="black", alpha=0.6, label="频数")
  27. plt.xlabel("骰子点数和")
  28. plt.ylabel("各点数之和出现的频数")
  29. plt.title("两个骰子掷2000次", color="r")
  30. plt.xticks(range(1, 13))
  31. plt.grid(axis='y', ls=":", color="grey", alpha=0.5)
  32. plt.legend()
  33. plt.show()

        绘制图形如下:

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号