天池Matplotlib学习

版权声明:转载请注明来源,谢谢。 https://blog.csdn.net/luke_sanjayzzzhong/article/details/89297123

Matplotlib介绍

matplotlib.pyplot是一个用于python编程语言中的2D图形的绘图库。 它可以在python脚本,shell,Web应用程序服务器和其他图形用户界面工具包中使用。
有几个工具包可用于扩展python matplotlib功能。其中一些是单独的下载,其他可以与matplotlib源代码一起提供,但具有外部依赖性。

  • Basemap:这是一个地图绘图工具包,包含各种地图投影,海岸线和政治边界。
  • Cartopy:它是一个映射库,具有面向对象的地图投影定义,以及任意点,线,多边形和图像转换功能。
  • Excel tool:Matplotlib提供与Microsoft Excel交换数据的实用程序。
  • Mplot3d:用于三维图。
  • Natgrid:它是natgrid库的接口,用于对间隔数据进行不规则网格化。

Matplotlib图的类型

  • 条形图
  • 直方图
  • 散点图
  • 面积图
  • 饼图
  • 多图合并
# 先展示一下简单的画图
from matplotlib import pyplot as plt
%matplotlib inline
# 画布上画图
plt.plot([1,2,3], [4, 5, 1])
# 在画布上显示
plt.show()

在这里插入图片描述

# 为创建的图像添加标题和标签
x = [5, 2, 7]
y = [2, 16, 4]
plt.plot(x, y)

# 图片的标题
plt.title('Image Title')
# 坐标轴
plt.ylabel('Y axis')
plt.xlabel('X axis')

plt.show()

在这里插入图片描述

# 甚至可以用多样式来创建更好的图形:更改特定线条的宽度或颜色,或者想要网格线
from matplotlib import style
style.use('ggplot')
x = [5, 8, 10]
y = [12, 16, 6]
x2 = [6, 9, 11]
y2 = [6, 15, 7]

plt.plot(x, y, 'g', label='line one', linewidth=5)
plt.plot(x2, y2, 'r', label='line two', linewidth=5)

plt.title('Epic Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')

# 设置图例位置
plt.legend()
plt.grid(True, color='k')
plt.show()

在这里插入图片描述

条形图

首先,让我们理解为什么我们需要一个条形图。条形图使用条形来比较不同类别之间的数据。当您想要测量一段时间内的变化时,它非常适合。它可以水平或垂直表示。此外,要记住的重要一点是,条形越长,价值就越大。

plt.bar([0.25, 1.25, 2.25, 3.25, 4.25],[50, 40,70,80,20], label='BMW', color='b', width=.5)
plt.bar([.75,1.75,2.75,3.75,4.75],[80,20,20,50,60], label='Audi', color='r', width=0.5)
# 显示图例
plt.legend()
plt.xlabel('Days')
plt.ylabel('Distance(kms)')
plt.title('Information')
plt.show()

在这里插入图片描述

直方图

条形图和直方图之间的区别:直方图用于显示分布,而条形图用于比较不同的实体。当您有阵列或很长的列表时,直方图很有用。
让我们考虑一个例子,我需要使用箱子绘制不同年龄阶段的人口数。现在,箱子指的是被分成一系列间隔的值范围。箱子通常是相同尺寸的。在下面的代码中,我创建了间隔为10的箱子,这意味着第一个箱子包含从0到9,然后是10到19,依此类推。

population_age = [22,55,62,45,21,22,34,42,42,4,2,102,95,85,55,110,120,70,65,55,111,115,80,75,65,54,44,43,42,48]
bins = [0,10,20,30,40,50,60,70,80,90,100]

plt.hist(population_age, bins, histtype='bar', color='b', rwidth=.8)
plt.xlabel('age group')
plt.ylabel('number of people')
plt.title('Histogram')
plt.show()

在这里插入图片描述

散点图

通常我们需要散点图来比较变量,例如,一个变量受另一个变量的影响,以构建一个关系。数据显示为点的集合,每个点具有一个变量的值,该变量确定水平轴上的位置,而另一个变量的值确定垂直轴上的位置。考虑以下示例:

x = [1,1.5,2,2.5,3,3.5,3.6]
y = [7.5,8,8.5,9,9.5,10,10.5] 
x1 = [8,8.5,9,9.5,10,10.5,11]
y1 = [3,3.5,3.7,4,4.5,5,5.2]

plt.scatter(x, y, label='high income low saving', color='r')
plt.scatter(x1, y1, label='low income high savings', color='b')
plt.xlabel('saving*100')
plt.ylabel('income*1000')
plt.title('Scatter plot')
plt.legend()
plt.show()

在这里插入图片描述

面积图

面积图与线图非常相似。它们也被称为堆栈图。这些图可用于跟踪构成一个整体类别的两个或多个相关组的随时间变化。例如,让我们将一天内的工作进行分类,比如睡觉,吃饭,工作和玩耍。 考虑以下代码:

days = [1, 2, 3, 4, 5]
sleeping = [7, 8, 6, 11, 7]
eating = [2, 3, 4, 3, 2]
working = [7,8,7,2,2]
playing = [8,5,7,8,13]

plt.plot([], [], color='m', label='Sleeping', linewidth=5)
plt.plot([], [], color='c', label='Eating', linewidth=5)
plt.plot([], [], color='r', label='Working', linewidth=5)
plt.plot([], [], color='k', label='Playing', linewidth=5)

plt.stackplot(days, sleeping, eating,working, playing, colors=['m','c', 'r','k'])
plt.xlabel('x')
plt.ylabel('y')
plt.title('Stack Plot')
plt.legend()
plt.show()

在这里插入图片描述

饼图

饼图是指圆形图,它被分解成段,即饼图。它基本上用于显示百分比或比例数据,其中每个饼图片代表一个类别。 我们来看看下面的例子

days = [1,2,3,4,5] 
sleeping =[7,8,6,11,7]
eating = [2,3,4,3,2]
working =[7,8,7,2,2]
playing = [8,5,7,8,13]
slices = [7,2,2,13]
activities = ['sleeping','eating','working','playing']
cols = ['c','m','r','b'] 

plt.pie(slices, labels=activities, colors=cols, startangle=90, shadow=True, explode=(0, 0.1,0,0), autopct='%1.1f%%')
plt.title('Pie plot')
plt.show()

在这里插入图片描述

多图合并

前面已经讨论了python matplotlib中的多种类型的图,例如条形图,散点图,饼图,区域图等。现在,下面展示如何处理多个图,考虑下面的例子

import numpy as np
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
# subplot(nrows, ncols, index, **kwargs)
plt.subplot(1, 2, 1)
plt.plot(t1, f(t1), 'bo', t2, f(t2))

plt.subplot(1, 2, 2)
plt.plot(t2, np.cos(2*np.pi*t2))

plt.show()


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/luke_sanjayzzzhong/article/details/89297123