【Python】Matplotlib绘图02_pyplot图表美化

本人依据上课学习内容,将matplotlib内容浓缩为代码块
以下是第二部分的学习内容:
1.添加图表辅助元素
2.子图绘制
3.共享坐标轴
4.双坐标轴
5.调整子图之间的距离

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = np.arange(5)
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12])
lines = plt.plot(x, y1, x, y2)

'''1.添加图表辅助元素'''
# 轴标签
# axes对象用set_xlabel()
plt.xlabel('x轴')
plt.ylabel('y轴')

# 刻度范围与刻度标签
# 标签也可以在绘制的时候用label等参数直接控制
# 若不设置,则坐标轴的刻度范围取决于数据中的最大值和最小值
# axes用set_xlim(),set_xticklabels
plt.xlim(x.min() - 1.5, x.max() + 1.5)
plt.xticks(np.arange(5), ['a', 'b', 'c', 'd', 'e'])

# 标题
# axes用set_title()
plt.title('展示图表辅助元素的折线图')

# 图例
# 如果plot建立的时候已经指明label内容,直接plt.legend()即可
# fancybox边框设为圆角,loc设置位置
plt.legend(lines, ['折线1', '折线2'], shadow=True, fancybox=True,
           loc='best', title='图例标题展示')

# 网格
# 坐标轴无刻度,则无法显示网格
# visible是否显示网格,axis='both'/'x'/'y'显示哪个方向的网格
plt.grid(visible=True, axis='y', linewidth=0.3)

# 参考线
# 水平参考线,y是参考线y轴坐标,xmin,xmax是参考线起止位置比例
plt.axhline(y=0, xmax=0, xmin=1, linestyle='--')
# 垂直参考线,x是参考线x轴坐标
plt.axvline(x=0, ymax=0, ymin=1, linestyle='--')

# 参考区域
# ymin:表示水平跨度的下限
# ymax:表示水平跨度的上限
# xmin:表示垂直跨度的下限
# xmax:表示垂直跨度的上限
# 水平参考区域,ymin,ymax以数据为单位,xmin,xmax以轴为单位
plt.axhspan(ymin=0.5, ymax=1.0, alpha=0.3)
# 垂直参考区域
plt.axvspan(xmin=0.5, xmax=2.0, alpha=0.3)

# 注释文本
# (1)有指向
# xy需要指的坐标,xytest注释文本位置,arrowprops箭头字典
plt.annotate('折线1最小值', xy=(x.min()+2, y1.min()+0.5),
             xytext=(x.min()+2+1, y1.min()+0.5+1), arrowprops=dict(arrowstyle="->"))
# (2)无指向
# x,y注释文本坐标,s注释文本内容
# bbox注释文本边框属性
plt.text(x=3.10, y=0.10, s="y=0参考线", bbox=dict(alpha=0.2))

# 编写数学表达式文本
# r'$\alpha > \beta$'  a>b
# r'$\alpha_i > \beta_i$'  ai>bi, _下标,^上标
# r'$\frac{3}{4}$'  3/4  \frac{}{}显示分数
# r'$\frac{5 - \frac{1}{x}}{4}$'   (5-1/x)/4

# 表格
plt.table(cellText=[[6, 6, 6], [8, 8, 8]], colWidths=[0.1] * 3,
          rowLabels=['第1行', '第2行'], colLabels=['第1列', '第2列', '第3列'], loc='upper left')

plt.show()

'''2.子图绘制'''
# Figure函数:
fig = plt.figure(figsize=(6, 8))  # 创建a*b尺寸的画布
ax = fig.add_subplot(111)  # 在画布上添加1,1,1(1行1列索引1)绘图区域
ax.plot(y1)
# Subplots函数:
fig, ax = plt.subplots(2, 2, figsize=(10, 5))
ax1 = ax[1, 0]  # 行1列0
ax1.plot([1, 2, 3, 4, 5])
# fig, ax1, ax2, ax3, ax4 = plt.subplots(2, 2, figsize=(10, 5))
# ax1.plot(y1)  # ax[0, 0]
# ax2.bar(x, y1)  # ax[0, 1]
# ax3.plot(y2)  # ax[1, 0]
# ax4.bar(x, y2)  # ax[1, 1]

'''3.共享坐标轴'''
# sharex(或sharey)参数控制是否共享x轴(或y轴)。
# sharex参数支持False或'none'、True或
# 'all'(都共享x轴)、'row'(同行子图共享x轴)、'col'(同列子图共享x轴)中任一取值。
fig, ax_arr = plt.subplots(2, 2, sharex='col')

# 双坐标轴,twinx 加y轴双坐标,twiny 加x轴双坐标
# ax_right = ax.twinx

# 调整子图之间的距离
# plt.tight_layout()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Python 3D绘图以及Kmeans机器学习之3D Matplotlib绘图,我可以提供一些基本的信息,希望对你有所帮助。 Python中的Matplotlib库是一个数据可视化工具,可以绘制出各种类型的图表,包括2D和3D图表。在进行3D绘图时,需要引入Matplotlib库中的mplot3d子库。 K-means算法是一种聚类算法,可以将一组数据分为多个类别,每个类别中的数据具有相似的特征。K-means算法的核心思想是通过计算数据之间的距离,将数据划分到最近的簇中,并不断调整簇的中心点,直到达到最优的聚类效果。 在Python中,可以使用sklearn库中的KMeans类来实现K-means算法。在实现3D绘图时,可以使用Matplotlib库中的mplot3d子库中的Axes3D类来创建3D坐标轴,并使用scatter3D函数绘制散点图。 具体的代码实现可以参考以下示例: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.cluster import KMeans # 生成随机数据 np.random.seed(5) data = np.random.normal(size=[100, 3]) # 使用K-means算法进行聚类 kmeans = KMeans(n_clusters=3).fit(data) labels = kmeans.labels_ # 绘制3D散点图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter3D(data[:, 0], data[:, 1], data[:, 2], c=labels) plt.show() ``` 这段代码可以生成100个随机数据,然后使用K-means算法将其分为3类,并绘制成3D散点图。你可以根据自己的需要修改数据和参数,实现不同类型的3D图表和K-means聚类效果的可视化展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值