Python |
您所在的位置:网站首页 › excel箱形图制作 › Python |
Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
* – matplotlib库 – 曲线图 – + 曲线图的绘制 + 结合Numpy库,绘制曲线图 + 绘制多曲线图 + 读取数据文件绘制曲线图 – 散点图 – 条形图 – + 单组条形图 + * 垂直条形图 * 水平条形图 + 多组条形图 + 堆积条形图 + 对称条形图 – 饼图 – 直方图 – 箱形图 – 三角网格图 – 系列链接 matplotlib库Matplotlib是Python的绘图库,它提供了一整套和 matlab 相似的命令 API,可以生成出版质量级别的精美图形,Matplotlib使绘图变得非常简单,在易用性和性能间取得了优异的平衡。 曲线图 曲线图的绘制作为绘图程序的Hello World,我们将首先绘制一条简单的曲线。同时还将简单介绍matplotlib的工作原理。 import matplotlib.pyplot as plt x = range(50) y = [value * 2 for value in x] plt.plot(x, y) plt.show()上述代码将会绘制曲线y=2*x,其中x在[0,50]范围内,如下所示: ![]() 项目Value ![]() 此按钮用于将所绘制的图形另存为所需格式的图片,包括png,jpg,pdf,svg等常见格式 ![]() 此按钮用于调整图片的尺寸,边距等图片属性 ![]() 此按钮用于缩放图片,用于观察图形细节,单击此按钮后,在图形上使用鼠标左键拖拽进行放大,使用鼠标右键拖拽进行缩小 ![]() 此按钮用于移动图形,可以与”缩放”按钮结合观察放大后图片的具体细节,同时,单击此按钮后,在图形上使用鼠标右键拖拽可以缩放坐标轴的比例 ![]() 此按钮用于将图形恢复到其初始状态,取消缩放、移动等操作 Tips:plt.plot(x, y)用于绘制一条曲线,其中,曲线点的x坐标在列表x中给出,曲线点的y坐标在列表y中给出。 由于matplotlib它只专注于绘图,因此如果想从文件中读取输入或进行一些中间计算,那么必须使用Python模块,但不用担心,matplotlib与其他模块具有良好的兼容性,并不涉及过多的技巧。例如,要生成大量统计图形,可能需要使用科学计算包,如Numpy和Python的文件读取I/O模块。在接下来的讲解中会给出相应的示例。 结合Numpy库,绘制曲线图绘制曲线cos(x),x在[0, 2*pi]区间内: import math import matplotlib.pyplot as plt scale = range(100) x = [(2 * math.pi * i) / len(scale) for i in scale] y = [math.cos(i) for i in x] plt.plot(x, y) plt.show()若采用Numpy库,则可以使用以下等效代码: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi, 100) y = np.cos(x) plt.plot(x, y) plt.show()所绘制图形如下所示: ![]() 绘制图形如下 ![]() 很多时候我们需要对比多组数据,以发现数据间的异同,此时就需要在一张图片上绘制多条曲线——多曲线图,下图展示了在同一图片中绘制函数y = x y=x y =x、y = x 2 y=x^2 y =x 2,y = l o g e x y=log_ex y =l o g e x以及y = s i n ( x ) y=sin(x)y =s i n (x ): import numpy as np import matplotlib.pyplot as plt x = np.linspace(0.1, 2 * np.pi, 100) y_1 = x y_2 = np.square(x) y_3 = np.log(x) y_4 = np.sin(x) plt.plot(x,y_1) plt.plot(x,y_2) plt.plot(x,y_3) plt.plot(x,y_4) plt.show()上述脚本绘制图形如下: ![]() Tips:一条曲线的绘制需要调用一次plt.plot(),而plt.show()只需调用一次。这种延迟呈现机制是matplotlib的核心,我们可以声明在任何时间绘制图形,但只有在调用plt.show()时才会渲染显示图形。为了更好的说明这种延迟呈现机制,编写以下代码: import numpy as np import matplotlib.pyplot as plt def plot_func(x, y): x_s = x[1:] - y[:-1] y_s = y[1:] - x[:-1] plt.plot(x[1:], x_s / y_s) x = np.linspace(-5, 5, 200) y = np.exp(-x ** 2) plt.plot(x, y) plot_func(x, y) plt.show()绘制图形如下: ![]() 可以看到,尽管其中一个plt.plot()是在plot_func函数中调用的,它对图形的呈现没有任何影响,因为plt.plot()只是声明了我们要呈现的内容,但还没有执行渲染。因此可以使用此特性结合for循环、条件判断等语法完成复杂图形的绘制,同时也可以在同一张图中组合不同类型的统计图。 读取数据文件绘制曲线图很多情况下数据都是存储于文件中,因此,需要首先读取文件中的数据,再进行绘制,说明起见,以 .txt文件为例,其他诸如 Excel、CSV文件可以使用 pandas、numpy等库进行读取。假设存在 data.txt文件如下: 0 1 1 2 2 5 4 17 5 26 6 37读取数据和绘制的代码如下: import matplotlib.pyplot as plt x, y = [], [] for line in open('data.txt', 'r'): values = [float(s) for s in line.split()] x.append(values[0]) y.append(values[1]) plt.plot(x, y) plt.show()如果使用Numpy库,其等效代码可以写为: import matplotlib.pyplot as plt import numpy as np data = np.loadtxt('data.txt') plt.plot(data[:,0], data[:,1]) plt.show()![]() 当绘制曲线图时,我们假设点与点之间存在序列关系。而散点图是简单地绘制点,它们之间并不存在连接。 import numpy as np import matplotlib.pyplot as plt data = np.random.rand(1000, 2) plt.scatter(data[:,0], data[:,1]) plt.show()![]() 条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。 单组条形图条形图的每种表现形式都可以绘制成垂直条形图或水平条形图,以单组条形图的两种绘制方式为例。 垂直条形图 import matplotlib.pyplot as plt data = [10., 20., 5., 15.] plt.bar(range(len(data)), data) plt.show()![]() ![]() 如果更喜欢水平条形外观,就可以使用 plt.barh()函数,在用法方面与 plt.bar()基本相同,但是修改条形宽度(或者在水平条形图中应该称为高度)的参数需要使用 height: import matplotlib.pyplot as plt data = [10., 20., 5., 15.] plt.barh(range(len(data)), data, height=0.5) plt.show()![]() 当需要比较不同年份相应季度的销量等此类需求时,我们可能需要多组条形图。 import numpy as np import matplotlib.pyplot as plt data = [[10., 20., 30., 20.],[40., 25., 53., 18.],[6., 22., 52., 19.]] x = np.arange(4) plt.bar(x + 0.00, data[0], color = 'b', width = 0.25) plt.bar(x + 0.25, data[1], color = 'g', width = 0.25) plt.bar(x + 0.50, data[2], color = 'r', width = 0.25) plt.show()![]() 通过使用 plt.bar()函数中的可选参数,可以绘制堆积条形图。 import matplotlib.pyplot as plt y_1 = [3., 25., 45., 22.] y_2 = [6., 25., 50., 25.] x = range(4) plt.bar(x, y_1, color = 'b') plt.bar(x, y_2, color = 'r', bottom = y_1) plt.show()![]() ![]() 一个简单且有用的技巧是对称绘制两个条形图。例如想要绘制不同年龄段的男性与女性数量的对比: import numpy as np import matplotlib.pyplot as plt w_pop = np.array([5., 30., 45., 22.]) m_pop = np.array( [5., 25., 50., 20.]) x = np.arange(4) plt.barh(x, w_pop) plt.barh(x, -m_pop) plt.show()![]() 图中女性人口的条形图照常绘制。然而,男性人口的条形图的条形图的条形图向左延伸,而不是向右延伸。可以使用数据的负值来快速实现对称条形图的绘制。 饼图饼图可以用于对比数量间的相对关系: import matplotlib.pyplot as plt data = [10, 15, 30, 20] plt.pie(data) plt.show()![]() 直方图是概率分布的图形表示。事实上,直方图只是一种特殊的条形图。我们可以很容易地使用matplotlib的条形图函数,并进行一些统计运算来生成直方图。但是,直方图非常有用,因此matplotlib提供了一个更加方便的函数: import numpy as np import matplotlib.pyplot as plt x = np.random.randn(1024) plt.hist(x, bins = 20) plt.show()![]() 箱形图可以通过方便地显示一组值的中位数、四分位数、最大值和最小值来比较值的分布。 import numpy as np import matplotlib.pyplot as plt data = np.random.randn(200) plt.boxplot(data) plt.show()![]() 要在单个图形中绘制多个箱形图,对每个箱形图调用一次 plt.boxplot()是不可行。它会将所有箱形图画在一起,形成一个混乱的、不可读的图形。如果想要到达符合要求的效果,只需在一次调用 plt.boxplot()中,同时绘制多个箱形图即可,如下所示: import numpy as np import matplotlib.pyplot as plt data = np.random.randn(200, 6) plt.boxplot(data) plt.show()![]() 处理空间位置时会出现网格图。除了显示点之间的距离和邻域关系外,三角网格图也是表示地图的一种方便方法。 import numpy as np import matplotlib.pyplot as plt import matplotlib.tri as tri data = np.random.rand(200, 2) triangles = tri.Triangulation(data[:,0], data[:,1]) plt.triplot(triangles) plt.show()![]() Python-Matplotlib可视化(2)——自定义颜色绘制精美统计图Python-Matplotlib可视化(3)——自定义样式绘制精美统计图Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂Python-Matplotlib可视化(7)——多方面自定义统计图绘制Python-Matplotlib可视化(8)——图形的输出与保存Python-Matplotlib可视化(9)——精通更多实用图形的绘制Python-Matplotlib可视化(10)——一文详解3D统计图的绘制 Original: https://blog.csdn.net/LOVEmy134611/article/details/117301771Author: 盼小辉丶Title: Python-Matplotlib可视化(1)——一文详解常见统计图的绘制 相关阅读 Title: Numpy报错:ImportError: numpy.core.multiarray failed to import导入自定义的 python 模块时,出现以下报错: ImportError: numpy.core.multiarray failed to import from .cv2 import * ImportError: numpy.core.multiarray failed to import原因: numpy 版本过低或者过高 解决: 查看numpy 版本: pip show numpy 我当前环境中的 numpy 版本是: Version: 1.16.5 升级: pip install -U numpy (tensorflow) Robin-macbook-pro:~ robin$ pip install -U numpy Collecting numpy Downloading https://files.pythonhosted.org/packages/6a/9d/984f87a8d5b28b1d4afc042d8f436a76d6210fb582214f35a0ea1db3be66/numpy-1.19.5-cp36-cp36m-macosx_10_9_x86_64.whl (15.6MB) |████████████████████████████████| 15.6MB 1.3MB/s ERROR: tensorflow 1.13.1 has requirement protobuf>=3.6.1, but you'll have protobuf 3.6.0 which is incompatible. Installing collected packages: numpy Found existing installation: numpy 1.16.5 Uninstalling numpy-1.16.5: Successfully uninstalled numpy-1.16.5 Successfully installed numpy-1.19.5结果还是不行,遂给 numpy 降级: pip install -U numpy==1.14.0(之前是 1.16.5) 不仅造成了不少冲突,而且没效果: (tensorflow) Robin-macbook-pro:~ robin$ pip install -U numpy==1.14.0 Collecting numpy==1.14.0 Downloading https://files.pythonhosted.org/packages/33/c4/1ea5344793c159556110e42c94c9374cb08ce2a2727374cd467bd97f6579/numpy-1.14.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.7MB) |████████████████████████████████| 4.7MB 230kB/s ERROR: tensorflow 1.13.1 has requirement protobuf>=3.6.1, but you'll have protobuf 3.6.0 which is incompatible. ERROR: pmdarima 1.3.0 has requirement numpy>=1.16, but you'll have numpy 1.14.0 which is incompatible. ERROR: phik 0.9.8 has requirement numpy>=1.15.4, but you'll have numpy 1.14.0 which is incompatible. ERROR: librosa 0.8.0 has requirement numpy>=1.15.0, but you'll have numpy 1.14.0 which is incompatible. ERROR: astropy 4.0 has requirement numpy>=1.16, but you'll have numpy 1.14.0 which is incompatible. Installing collected packages: numpy Found existing installation: numpy 1.19.5 Uninstalling numpy-1.19.5: Successfully uninstalled numpy-1.19.5 Successfully installed numpy-1.14.0还是不行: 将numpy更到最新版本: pip install -U numpy,同时更新 opencv 的版本试试,这是当前版本: ![]() ![]() 最后发现,最为离奇诡异的是,在不同的文件夹下面执行相同的代码( import numpy as np)是没有任何问题的 (1) /Users/robin/software/anaconda3/envs/tensorflow/bin/python3.6 /Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/test.py Process finished with exit code 0(2) /Users/robin/software/anaconda3/envs/tensorflow/bin/python3.6 /Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/ui/test.py Traceback (most recent call last): File "/Users/robin/MLcode/Pycharm_Project/tensorflow/2021/0823_face_recognition_environment/ui/test.py", line 1, in import numpy as np File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/numpy/__init__.py", line 187, in from .testing import Tester File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/numpy/testing/__init__.py", line 10, in from unittest import TestCase File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/unittest/__init__.py", line 59, in from .case import (TestCase, FunctionTestCase, SkipTest, skip, skipIf, File "/Users/robin/software/anaconda3/envs/tensorflow/lib/python3.6/unittest/case.py", line 278, in class _CapturingHandler(logging.Handler): AttributeError: module 'logging' has no attribute 'Handler' Process finished with exit code 1最后我放弃治疗了,新建了一个文件夹,将文件移动过去了,就当做 Pycharm 抽风了吧 浪费一下午时间…!!!! Original: https://blog.csdn.net/Robin_Pi/article/details/120544691Author: Robin_PiTitle: Numpy报错:ImportError: numpy.core.multiarray failed to import 原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/246869/ 转载文章受原作者版权保护。转载请注明原作者出处! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |