使用matplotlib绘制基本图像

基本折线图的绘制和显示

折线图

import matplotlib.pyplot as plt
创建画布
plt.figure()
绘制图形
plt.plot([x for x in range(1, 8)], [13, 17, 25, 22, 19, 28, 30])
显示图形,jupyter中不必须
plt.show()

使用matplotlib绘制基本图像

保存绘制的图片

savefig():保存图片

import matplotlib.pyplot as plt
plt.figure(figsize = (15, 8), dpi = 80)  figsize调整画布的大小,dpi调整清晰度
plt.plot([x for x in range(1, 8)], [13, 17, 25, 22, 19, 28, 30]) plt.savefig('my_plot1.png')
图像保存要在展示之前,否则会保存一个空白图像,因为plt.show()会释放画布资源
plt.show()

辅助显示层设置

例子:假设有一组某城市中午12点到下午1点,每分钟温度变化的数据,其中温度的范围是15-18度。现在需要将这些温度以折线图的形式展示

import matplotlib.pyplot as plt
import random import numpy as py
数据准备
x,时间,y,15-18的温度
x = range(60)
y = [random.uniform(15, 18) for i in x]
plt.figure(figsize = (15, 8), dpi = 80)
plt.plot(x, y)

使用matplotlib绘制基本图像

yticks, xticks:对x轴和y轴刻度进行设置

设置中文字符(1)
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['kaiTi']
mpl.rcParams['font.serif'] = ['kaiTi']
设置中文字符(2)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['simhei'] # 替换成simhei
mpl.rcParams['axex.unicode_minus'] = False # 解决坐标轴不显示负号的问题
创建画布
plt.figure(figsize = (15, 8), dpi = 80)
绘制图形
plt.plot(x, y)
将y轴刻度范围调整为0-31度,每隔5个单位显示一个刻度
plt.yticks(range(0, 31, 5))
x_lb = ['12点{}分'.format(i) for i in x] # xticks(ticks=None, labels=None, **kwargs)
代替原有的ticks长度必须匹配
plt.xticks(x[::5], x_lb[::5])
添加网格显示
plt.grid(linestyle = '--', alpha = 0.5)
添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('某城市温度变化图')

使用matplotlib绘制基本图像

在同一个画布进行多次绘制

%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plot
import random # 设置中文字符
plt.rcParams['font.sans_serif'] = ['SimHie']
plt.rcParams['axes.unicode_minus'] = False

在添加一个图像层显示另一个城市的温度变化,温度在1-3度
x = range(60)
y1 = [random.uniform(15, 18) for i in x] # 随机从15-18中生成浮点数
y2 = [random.uniform(1, 3) for i in x] # 随机从1-3中生成浮点数
创建画布
plt.figure(figsize = (15, 8), dpi = 80)
绘制图形
plt.plot(x, y1, color = 'black', linestyle = '--', label = '城市B')
plt.plot(x, y2, color = 'pink', linestyle = '-', label = '城市P')
'''
显示图例,显示的位置由其参数loc决定best:0, upper right:1, upper left:2, lower left:3, lower right:4, right:5, center left:6, center right:7, lower center:8, upper center:9, center:10
'''
plt.legend(loc = 1) # 可以不填,默认为1
修改x,y刻度
x_lb = ['11:{}'.format(i) for i in x]
plt.xticks(x[::5], x_lb[::5])
plt.yticks(range(1, 30, 5))
添加网格
plt.grid(linestyle = '--', alpha = 0.5)
添加描述信息
plt.xlabel('时间变化')
plt.ylabel('温度变化')
plt.title('温度随时间变化')
显示图像
plt.show()

多个坐标系显示图形

subplot:将不同图绘制到不同的坐标系。nrows,多少行,ncols,多少列。返回元组,figure(画布对象)和ax(坐标系绘图区,设置坐标系属性,set_xticks,set_yticks)对象

在两个不同的画布显示两个城市的温度
x = range(60)
y1 = [random.uniform(15, 18) for i in x] # 随机从15-18中生成浮点数
y2 = [random.uniform(1, 3) for i in x] # 随机从1-3中生成浮点数
创建画布绘图区
'''
1行2列,nrows 1,ncols 2 返回元组:figure, ax
'''
figure, axes = plt.subplots(ncols = 2, nrows = 1, figsize = (15, 6), dpi = 80)
绘图
axes[0].plot(x, y1, color = 'black', linestyle = '--', label = '城市B')
axes[1].plot(x, y2, color = 'pink', linestyle = '-', label = '城市P')
显示图例
axes[0].legend()
axes[1].legend()
修改x,y刻度
x_lb = ['11:{}'.format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_lb[::5])
axes[0].set_yticks(range(0, 30, 5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_lb[::5])
axes[1].set_yticks(range(0, 30, 5))
添加网格
axes[0].grid(linestyle = '-.', alpha = 0.5)
axes[1].grid(linestyle = '-.', alpha = 0.5)
添加描述信息
axes[0].set_xlabel('时间变化')
axes[0].set_ylabel('温度变化')
axes[0].set_title('温度随时间变化')
axes[1].set_xlabel('时间变化')
axes[1].set_ylabel('温度变化')
axes[1].set_title('温度随时间变化')
显示图像
plt.show()

使用matplotlib绘制基本图像

散点图

scatter():生成散点图

import numpy as np
N = 1000 x = np.random.randn(N)
y = np.random.randn(N)
plt.scatter(x, y)
plt.show()
'''
scatter()常见参数: x,y形状如(n, )的一维数组,
必须填 s表示图中点的大小 c表示点的颜色,默认为蓝色
marker表示点的形状,默认为圆点
apha标量,0为透明,1为不透明,0-1之间就可以实现半透明效果
edgecolors边缘颜色
'''

使用matplotlib绘制基本图像

柱状图

bar():绘制柱状图

'''
x,柱子下标列表,也就是每个柱子的标签
height,柱子高度
widhth,柱子宽度
align,柱子对齐方式,center根据下标对齐,edge每根柱子以下标为起点,然后显示在下标的右边 color,颜色
edgecolor,边框颜色
linewith,边框高度
tick_label,柱子上显示的标签
'''
plt.figure(figsize = (8, 6), dpi = 80)
柱子数量
N = 6
每个柱子对应的序列
values = (15, 21, 64, 87, 33, 22)
每个柱子的下标序列
index = np.arange(N)
柱子宽度
width = 0.35
绘制柱子,指定颜色
plt.bar(index, values, width, label = 'ceceil', color = 'pink') # 前两个值名字可以自定但顺序和位置不能改变
plt.show()

使用matplotlib绘制基本图像
比较十股股票发行价以及一个月后的价钱
构造数据
start_price = [random.randint(1, 50) for i in range(10)]
end_price = [random.randint(1, 50) for i in range(10)]
stock_name = ['股票{}'.format(i) for i in range(1, 11)]
显示设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
创建画布
plt.figure(figsize = (15, 8), dpi = 80)
绘制柱状图
plt.bar(range(10), start_price, width = 0.3, label = '发行价', color = 'black')
plt.bar([i + 0.3 for i in range(10)], end_price, width = 0.3, label = '首月收盘价', color = 'pink')
添加图例
plt.legend()
设置x轴标签
plt.xticks([i + 0.15 for i in range(10)], stock_name)
plt.show()

使用matplotlib绘制基本图像

直方图

  • 直方图展示数据的分布,柱状图比较数据的大小。

  • 直方图X轴为定量数据,柱状图X轴为分类数据。因此,直方图上的每根柱子都是不可移动的,X轴上的区间是连续的、固定的。而柱状图上的每根柱子是可以随意排序的,有的情况下需要按照分类数据的名称排列,有的则需要按照数值的大小排列。

  • 直方图柱子无间隔,柱状图柱子有间隔

  • 直方图柱子宽度可不一,柱状图柱子宽度须一致。柱状图柱子的宽度因为没有数值含义,所以宽度必须一致。但是在直方图中,柱子的宽度代表了区间的长度,根据区间的不同,柱子的宽度可以不同,但理论上应为单位长度的倍数。

'''
hist():x用于绘制直方图的样本数组,
bins直方图数组(整数值)
组数 = 极差/组距离
'''
构造数据
data = [x for x in np.random.randint(70, 160, 300)]
创建画布
plt.figure(figsize = (15, 8), dpi = 80)
绘制直方图
distance = 5 group_num = int((max(data) - min(data)) / distance)
plt.hist(data, bins = 'auto')
plt.xticks(range(min(data), max(data) + 6, distance))
plt.show()

饼图

plt.pie(x, explode, labels, autopct, colors)

x表示饼图每一块的比重,explode画出的饼图中每一块离中心点的距离,autopct控制饼图内百分比设置

准备数据
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
size = [15, 30, 45, 10]
中心偏离度
explode = (0.05, 0.05, 0.1, 0.05)
设置画布
plt.figure(figsize = (15, 8), dpi = 80)
饼图属性
plt.pie(size, explode = explode, labels = labels, autopct = '%1.1f%%')
长宽更改
plt.axis('equal')
显示图例
plt.legend()
plt.show()

使用matplotlib绘制基本图像

Original: https://blog.csdn.net/yhlauvchuchu/article/details/125958620
Author: yhlauvchuchu
Title: 使用matplotlib绘制基本图像

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/766770/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球