【python】绘图代码模板

【python】绘图代码模板

  • pandas.DataFrame.plot( )画图函数
  • Seaborn绘图 -数据可视化必备
    • 主题样式
    • 导入数据集
    • 可视化统计关系
      • 散点图
      • 抖动图
      • 箱线图
      • 小提琴图
      • Pointplot
      • 群图
    • 可视化数据集的分布
      • 绘制单变量分布
        • 柱状图
        • 直方图
      • 绘制双变量分布
        • Hex图
        • KDE 图
        • 可视化数据集中的成对关系
    • 好看的图模板
      • 来自宽格式数据集的线图
      • 带观察值的水平箱线图
      • 多个面上的线图
      • 具有多种语义的散点图
    • 问题解决方案
      • 解决seaborn绘图无法显示中文等问题

pandas.DataFrame.plot( )画图函数

DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None,figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None,xerr=None,secondary_y=False, sort_columns=False, **kwds)

以下是DataFrame.plot()方法的参数以及它们的作用和可选值:

  • x:横轴的列名或位置索引,用于指定绘图时使用的横轴数据。

  • y:纵轴的列名或位置索引,用于指定绘图时使用的纵轴数据。

  • kind:绘图类型,可以是以下选项:

    • 'line':折线图
    • 'bar':垂直条形图
    • 'barh':水平条形图
    • 'hist':直方图
    • 'box':箱线图
    • 'kde':核密度估计图
    • 'density':与 'kde' 相同
    • 'area':面积图
    • 'pie':饼图
    • 'scatter':散点图
    • 'hexbin':六边形散点图
  • ax:Matplotlib Axes对象,用于在已有的图形上添加新的图层。

  • subplots:布尔值,如果为True,则为每个列绘制单独的子图。

  • sharex:布尔值,如果subplots为True,则共享x轴。

  • sharey:布尔值,如果subplots为True,则共享y轴。

  • layout:元组,用于指定子图的行列布局。

  • figsize:元组,图形的尺寸,以英寸为单位。

  • use_index:布尔值,默认为True,使用行索引作为x轴。

  • title:字符串,图形的标题。

  • grid:布尔值,控制是否显示网格线。

  • legend:布尔值或者字符串’reverse’,控制是否显示图例。

  • style:列表或字典,用于指定每列折线图的线条样式。

  • logx:布尔值,是否使用对数坐标轴(x轴)。

  • logy:布尔值,是否使用对数坐标轴(y轴)。

  • loglog:布尔值,是否同时使用对数坐标轴(x轴和y轴)。

  • xticks:序列,用于自定义x轴刻度值。

  • yticks:序列,用于自定义y轴刻度值。

  • xlim:列表或元组,自定义x轴显示范围。

  • ylim:列表或元组,自定义y轴显示范围。

  • rot:整数,设置刻度标签的旋转角度。

  • fontsize:整数,设置刻度标签的字体大小。

  • colormap:字符串或Matplotlib colormap对象,默认为None,用于选择图的区域颜色。

  • colorbar:布尔值,如果为True,则在柱状图和散点图上添加颜色条。

  • position:浮点数,用于指定条形图布局的相对对齐位置(0表示左端/底端,1表示右端/顶端)。

  • table:布尔值、Series或DataFrame,默认为False,如果为True,则根据DataFrame的数据绘制表格。

  • yerrxerr:DataFrame、Series、数组或字典,用于绘制带有误差条的图表(详情请参考绘图带有误差条的方法)。

  • stacked:布尔值,在折线图和柱状图中默认为False,在面积图中默认为True,用于创建堆叠图。

  • sort_columns:布尔值,默认为False,以字母表顺序绘制各列,默认使用前列顺序。

  • secondary_y:布尔值或序列,默认为False,是否在右侧添加第二个y轴。如果是序列,指定要在右侧绘制的列。

  • mark_right:布尔值,默认为True,当使用第二个y轴时,是否自动在图例中标记列标签为"(right)"。

  • **kwds:其他传递给Matplotlib绘图方法的关键字参数。

返回值:

  • axes:Matplotlib AxesSubplot对象或其数组。

示例:

import pandas as pd
import matplotlib.pyplot as plt# 创建示例数据
data = {'Year': [2015, 2016, 2017, 2018, 2019, 2020, 2021],'Sales': [100, 120, 150, 180, 200, 230, 250],'Expenses': [80, 90, 100, 110, 120, 130, 140]
}df = pd.DataFrame(data)# 绘制折线图
df.plot(x='Year', y=['Sales', 'Expenses'], kind='line', marker='o', linewidth=2)
plt.title('Sales and Expenses Over Years')
plt.xlabel('Year')
plt.ylabel('Amount (in thousands)')
plt.grid(True)
plt.legend(['Sales', 'Expenses'])
plt.show()# 绘制条形图
df.plot(x='Year', y=['Sales', 'Expenses'], kind='bar', alpha=0.7)
plt.title('Sales and Expenses Over Years')
plt.xlabel('Year')
plt.ylabel('Amount (in thousands)')
plt.grid(axis='y')
plt.legend(['Sales', 'Expenses'])
plt.show()

在这里插入图片描述
在这里插入图片描述

Seaborn绘图 -数据可视化必备

官方示例:https://seaborn.pydata.org/tutorial.html
Seaborn是一个构建在matplotlib之上的一个非常完美的Python可视化库。
与Matplotlib的低级接口相比,Seaborn具有高级接口。适合处理数据流

主题样式

Seaborn 有五个预设的主题样式:darkgrid、whitegrid、dark、white 和 ticks。这些主题样式可通过 sns.set(style='样式名')sns.set_style('样式名') 命令切换

darkgrid 主题,显示灰色背景带网格线,无坐标轴刻度线。# 默认主题,可简写为 sns.set()
whitegrid 主题,显示白色背景带网格线,无坐标轴刻度线。
dark 主题,显示灰色背景无网格线,无坐标轴刻度线。
white 主题,显示白色背景无网格线,无坐标轴刻度线。
ticks 主题,显示白色背景无网格线,有坐标轴刻度线

需要导入的包

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from scipy import stats

导入数据集

数据来源:https://datahack.analyticsvidhya.com/contest/enigma­codefest­machine­learning­1/

df = pd.read_csv(r"train_NIR5Yl1.csv")
df.head()

在这里插入图片描述

可视化统计关系

散点图

散点图可以可视化两个变量之间的关系。每个点在数据集中显示一个观察值,这些观察值用点状结构表示。图中显示了两个变量的联合分布。


# 创建图形和轴
sns.relplot(x="Views", y="Upvotes", data = df)

在这里插入图片描述
显示与数据相关的标签

sns.relplot(x="Views", y="Upvotes", hue = "Tag", data = df)
# 另外还可以通过参数size = "Tag"或者数size=(15,200)。,改变点大小

在这里插入图片描述
另外可以在色调(Hue)的帮助下在我们的图片中添加另一个维度,通过为点赋予颜色来实现,每种颜色都有一些附加的意义。

sns.relplot(x="Views", y="Upvotes", hue = "Answers", data = df);

在这里插入图片描述

抖动图

使用的数据来源:https://datahack.analyticsvidhya.com/contest/wns­analytics­hackathon­2018­1/

在这里插入图片描述
使用catplot()函数查看education列和avg_training_score列之间的关系

sns.catplot(x="education", y="avg_training_score", jitter = False, data=df2)

在这里插入图片描述

在Seaborn的catplot函数中,jitter参数控制是否对数据点进行抖动(jittering)。抖动是在分类变量上添加一些随机的小偏移量,使得数据点在x轴上稍微分散,从而防止多个数据点重叠在同一个位置,增加可视化的可读性。

  • jitter=True:表示在x轴上对数据进行抖动。这样做可以有效避免数据点的重叠,特别是当数据较密集时,使得图表更易于观察和解读。

  • jitter=False:表示不对数据进行抖动。如果你的数据不太密集,或者你更关心各个数据点的精确位置,可以选择这个选项。

选择是否使用抖动取决于数据的特点和你想要达到的可视化效果。对于大多数情况下,启用抖动是一个好的选择,因为它可以帮助更好地展示数据的分布情况。然而,如果你的数据较少或者有特定需求,可以将jitter设置为False

Hue图
接下来,如果我们想在我们的图中引入另一个变量或另一个维度,我们可以使用hue参数。假设我们希望看到教育和avg_training_score图中的性别分布

sns.catplot(x="education", y="avg_training_score", hue = "gender", data=df2)

在这里插入图片描述
在上面的图中,一些点是相互重叠的,为了消除这种情况,可以设置kind =
“swarm”, swarm使用一种算法来防止这些点重叠,并且沿着分类轴调整这些点。

sns.catplot(x="education", y="avg_training_score", kind = "swarm", data=df2)

在这里插入图片描述
将is_promoted作为一个新变量引入

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted",  kind = "swarm", data=df2)

在这里插入图片描述

箱线图

箱线图 ,它显示了分布的三个四分位值以及最终值。箱图中的每个值都对应于数据中的实际观察值

sns.catplot(x="education", y="avg_training_score", kind = "box", data=df2)

在这里插入图片描述

小提琴图

小提琴图结合了箱线图和核密度估计程序,以提供更丰富的值分布描述。四分位数值显示在小提琴内部。

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin", data=df2)

在这里插入图片描述
当色调语义参数是二值时,我们还可以拆分小提琴,这也可能有助于节省绘图空间。

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin",split=True, data=df2)

在这里插入图片描述

Pointplot

pointplot,这个图指出估计值和置信区间。Pointplot连接来自相同色调类别的数据。这有助于识别特定色调类别中的关系如何变化

sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "point", data=df2)

在这里插入图片描述

群图

sns.catplot(x="education",               # x轴上的分类变量,这里是教育程度y="avg_training_score",      # y轴上的数值变量,这里是平均培训分数hue="is_promoted",           # 按照是否晋升(is_promoted)来给数据点着色col="gender",                # 按照性别(gender)分列绘制图表aspect=.9,                   # 控制每个绘图块(facet)的纵横比例kind="swarm",                # 指定绘图类型为分类散点图(swarm plot)data=df2)                    # 数据来源,这里是一个DataFrame df2

在这里插入图片描述

可视化数据集的分布

绘制单变量分布

柱状图

在研究变量分布时,最常见的是柱状图。默认情况下,distplot()函数绘制柱状图并适合内核密度估计

sns.distplot(df2.age)

在这里插入图片描述

直方图

直方图以箱子的形式表示数据的分布,并使用条形图来显示每个箱子下的观察次数。我们还可以在其中添加一个加固图,而不是使用KDE(核密度估计),这意味着在每次观察时,它都会画一个小的垂直标尺。

sns.distplot(df2.age, kde=False, rug = True)

在这里插入图片描述

绘制双变量分布

使用了seaborn库的jointplot()函数。默认情况下,jointplot绘制散点图。

sns.jointplot(x="avg_training_score", y="age", data=df2);

在这里插入图片描述

Hex图

Hexplot是一个双变量的直方图,因为它显示了在六边形区域内的观察次数。这是一个非常容易处理大数据集的图。为了绘制Hexplot,我们将把kind属性设置为hex

sns.jointplot(x=df2.age, y=df2.avg_training_score, kind="hex", data = df2)

在这里插入图片描述

KDE 图

sns.jointplot(x="age", y="avg_training_score", data=df2, kind="kde");

在这里插入图片描述

可视化数据集中的成对关系

sns.pairplot(df2)

在这里插入图片描述

好看的图模板

来自宽格式数据集的线图

# 导入必要的库
import numpy as np
import pandas as pd
import seaborn as sns
sns.set_theme(style="whitegrid") # 设置Seaborn绘图的主题和样式# 创建一个随机种子,以便结果可以复现
rs = np.random.RandomState(365)# 生成一个包含随机数据的数组,形状为(365, 4),并计算每一列的累积和
values = rs.randn(365, 4).cumsum(axis=0)# 创建日期范围为2016年1月1日起的365个日期,间隔为1天
dates = pd.date_range("1 1 2016", periods=365, freq="D")# 使用Pandas将数据和日期合并为DataFrame,并给每列指定名称"A", "B", "C", "D"
data = pd.DataFrame(values, dates, columns=["A", "B", "C", "D"])# 使用滚动窗口计算每列的7天滚动均值,并更新数据
data = data.rolling(7).mean()# 使用Seaborn绘制折线图,展示数据中每列的变化趋势
sns.lineplot(data=data, palette="tab10", linewidth=2.5)

在这里插入图片描述

带观察值的水平箱线图

数据来源:https://github.com/mwaskom/seaborn-data/blob/master/planets.csv

# 导入所需的库
import seaborn as sns  
import matplotlib.pyplot as plt# 设置seaborn的主题样式为'ticks'
sns.set_theme(style="ticks")  # 初始化图表,大小为(7,6),并设置x轴为对数刻度
f, ax = plt.subplots(figsize=(7, 6))
ax.set_xscale("log")# 载入seaborn内置的'planets'数据集
planets = pd.read_csv(r"planets.csv")# 使用箱形图绘制'distance'为x轴,'method'为y轴
# 设置whis可显示异常值的范围,width调整箱形的宽度
# 使用'vlag'色阶
sns.boxplot(x="distance", y="method", data=planets, whis=[0, 100], width=.6, palette="vlag")# 使用散点图绘制'distance'为x轴,'method'为y轴  
# 设置点的大小,颜色和线宽
sns.stripplot(x="distance", y="method", data=planets,size=4, color=".3", linewidth=0)# 数据可视化美化
# 显示x轴网格线,移除y轴标签,裁剪左边边框 
ax.xaxis.grid(True)
ax.set(ylabel="") 
sns.despine(trim=True, left=True)# 显示图表
plt.show()

在这里插入图片描述

多个面上的线图

import seaborn as sns # 设置seaborn主题样式为'ticks'
sns.set_theme(style="ticks")  # 加载'sdots'示例数据集
dots = sns.load_dataset("dots")# 定义调色板的具体颜色值  
palette = sns.color_palette("rocket_r") # 绘制两面多个线图
# x轴为'time',y轴为'firing_rate'
# hue表示颜色区分的变量'coherence' 
# size表示点的大小代表的变量'choice'
# col表示按'slign'分面  
# kind指定折线图类型
# size_order设置点的大小顺序
# palette定义上面指定的调色板
# height/aspect设置图形大小,facet_kws定义分面参数
sns.relplot(data=dots, x="time", y="firing_rate",hue="coherence", size="choice", col="align",kind="line", size_order=["T1", "T2"], palette=palette,height=5, aspect=.75, facet_kws=dict(sharex=False))# 该图的作用是:
# 使用线图展示'dots'数据集中
# 'time','firing_rate'两个变量的关系
# 并利用颜色、点大小、分面等视觉编码显示不同的第三维和第四维信息
# 直观呈现多维数据集的关系

在这里插入图片描述

具有多种语义的散点图

import seaborn as sns 
import matplotlib.pyplot as plt# 设置seaborn主题样式为白色网格
sns.set_theme(style="whitegrid") # 加载内置的钻石数据集
diamonds = sns.load_dataset("diamonds")# 初始化图像和子图,并移除子图边框
f, ax = plt.subplots(figsize=(6.5, 6.5))
sns.despine(f, left=True, bottom=True)# 定义钻石clarity的排序
clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]  # 绘制散点图
# x轴为carat,y轴为price
# hue为clarity,即颜色区分clarity
# size为depth,即点的大小代表depth
# palette定义颜色渐变 
# hue_order指定上面定义的clarity顺序
# sizes设置点的大小范围
# data和ax指定所用的数据及子图
sns.scatterplot(x="carat", y="price", hue="clarity", size="depth",palette="ch:r=-.2,d=.3_r",hue_order=clarity_ranking,sizes=(1, 8), linewidth=0,data=diamonds, ax=ax)# 这是一个组合了多个变量的散点图
# 既展示了carat与price的关系
# 又通过颜色和大小编码呈现了clarity和depth维度的信息
# 可以更清晰地呈现钻石数据集的多维分布情况

在这里插入图片描述

问题解决方案

解决seaborn绘图无法显示中文等问题

plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决无法显示符号的问题
sns.set(font='SimHei', font_scale=0.8)        # 解决Seaborn中文显示问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/77730.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习中的人生启示:“没有免费的午餐”定理(NFL)的个人发展之道→探讨感觉和身边其他人有差距怎么办?

文章目录 1 引言2 探究NFL定理的含义3 将NFL定理应用于个人发展4 探索个人兴趣和天赋5 结论 1 引言 机器学习中的“没有免费的午餐”定理(NFL)是一条深具启示意义的原则。该定理表明,没有一种算法可以在所有问题上都表现最好。在机器学习领域…

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐,只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍,每小节4拍,简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示,这表…

软件工程专业应该学什么?

昨天,我朋友的孩子报考了软件工程专业,问我软件工程到底学啥?所以我给他开列了一个书单。 现在高校开了一堆花名头的专业: 偏技术类:云计算、大数据、人工智能、物联网 偏应用类:电子商务、信息管理 但我个…

MySQL|查看事务加锁情况

文章目录 使用information_schema数据库中的表获取锁信息INNODB_TRXINNODB_LOCKSINNODB_LOCK_WAITS 使用SHOW ENGINE INNODB STATUS获取信息补充 使用information_schema数据库中的表获取锁信息 在information_schema数据库中,有几个与事务和锁紧密相关的表 INNOD…

3个命令定位CPU飙高

top 指令找出消耗CPU最厉害的那个进程的pid top -H -p 进程pid 找出耗用CPU资源最多的线程pid printf ‘0x%x\n’ 线程pid 将线程pid转换为16进制 结合jstack 找出哪个代码有问题 jstack 进程pid | grep 16进制的线程pid -A 多少行日志 jstack 进程pid | grep 16进制的线程…

Source Insight_突出显示对选定字符的引用

1、突出显示对选定字符的引用 在Source Insight中,当我们选中一个函数或者变量的时候,关于它的所有引用地方都高亮显示,想要实现效果如下。 2、配置方法 (1)点击"Options"→“File Type options...” (2)勾选“Highlight referenc…

Python - 【socket】 客户端client重连处理简单示例Demo(一)

一. 前言 在Python中,使用socket进行网络通信时,如果连接断开,可以通过以下步骤实现重连处理 二. 示例代码 1. 定义一个函数,用于建立socket连接 import socketdef connect_socket(host, port):while True:try:# 建立socket连…

CMake:检测python解释器和python库

CMake:检测python解释器和python库 导言检测python解释器CMakeLists.txt输出附录 检测python库项目结构CMakeLists.txt相关源码附录 导言 python是一种非常流行的语言。许多项目用python编写的工具,从而将主程序和库打包在一起,或者在配置或构建过程中使…

当服务器域名出现解析错误的问题该怎么办?

​  域名解析是互联网用户接收他们正在寻找的域的地址的过程。更准确地说,域名解析是人们在浏览器中输入时使用的域名与网站IP地址之间的转换过程。您需要站点的 IP 地址才能知道它所在的位置并加载它。但,在这个过程中,可能会出现多种因素…

小白解密ChatGPT大模型训练;Meta开源生成式AI工具AudioCraft

🦉 AI新闻 🚀 Meta开源生成式AI工具AudioCraft,帮助用户创作音乐和音频 摘要:美国公司Meta开源了一款名为AudioCraft的生成式AI工具,可以通过文本提示生成音乐和音频。该工具包含三个核心组件:MusicGen用…

Win32 EditControl多行文本框自动换行,并在添加新行时自动将光标移到末尾

【文本框属性设置】 设为多行文本框:MultilineTrue 允许按回车键换行:Want ReturnTrue 自动换行:Auto HScrollFalse 在最后一行按回车键,自动向上滚动:Auto VScrollTrue 显示垂直滚动条:Vertical ScrollTru…

maven的下载与安装

文章目录 1 官网下载地址2 设置环境变量3 设置仓库地址4 添加阿里云的中央镜像 1 官网下载地址 https://maven.apache.org/ 下载 2 设置环境变量 MAVEN_HOME PATH mvn -v验证 3 设置仓库地址 仓库地址 4 添加阿里云的中央镜像 阿里云中央镜像

【探索Linux】—— 步步学习强大的命令行工具 P.1(Linux简介)

目录 前言 一、Linux简介 二、linux的不同发行版本 三、Linux的开源性质 四、Linux的特点 五、Linux代码演示(仅供参考) 总结 前言 前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C的一些知识&#xff…

Redis

Redis进阶 讨论问题: 数据存放的位置有哪些(磁盘,内存,数据库) 为什么做缓存? 速度:内存 >10 倍固态硬盘 > 10 倍机械硬盘 一、SpringBoot操作Redis 1、 添加redis依赖 spring Boo…

Java源码规则引擎:jvs-rules 8月新增功能介绍

JVS-rules是JAVA语言下开发的规则引擎,是jvs企业级数字化解决方案中的重要配置化工具,核心解决业务判断的配置化,常见的使用场景:金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节…

JVM入门到精通

一、JVM概念 1.1、什么是JVM Java Virtual Machine:Java虚拟机,用来保证Java语言跨平台 Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域 Java虚拟机与Java语言并没有必然…

Pytorch入门学习——快速搭建神经网络、优化器、梯度计算

我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识&a…

ChatGPT“侵入”校园,教学评价体制受冲击,需作出调整

北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的“完美论文”。“这篇文章写得比大多数学生都要好......好到不符合我对学生的预期!”他去问ChatGPT:“这是你写的吗?”ChatGPT回答:“99.9%的概率是的。” ChatGPT“侵…

HTTP——八、确认访问用户身份的认证

HTTP 一、何为认证二、BASIC认证BASIC认证的认证步骤 三、DIGEST认证DIGEST认证的认证步骤 四、SSL客户端认证1、SSL 客户端认证的认证步骤2、SSL 客户端认证采用双因素认证3、SSL 客户端认证必要的费用 五、基于表单认证1、认证多半为基于表单认证2、Session 管理及 Cookie 应…

ORB算法在opencv中实现方法

在OPenCV中实现ORB算法,使用的是: 1.实例化ORB orb cv.xfeatures2d.orb_create(nfeatures)参数: nfeatures: 特征点的最大数量 2.利用orb.detectAndCompute()检测关键点并计算 kp,des orb.detectAndCompute(gray,None)参数&#xff1a…